Print Friendly
Отправить в сообщении

Зачем нужно подписывать скрипты?

Зачем нужно подписывать скрипт Первой и самой главной ошибкой тех кто начинает работать с PowerShell является запуск представленной ниже команды на всех хостах.

Set-ExecutionPolicy Unrestricted

Вроде как удобно, но поверьте последствия могут быть самые разнообразные…

Результатом выставления уровня запуска в режим Unrestricted будет ослабление надежной политики безопасности «по умолчанию» и как возможные последствия – потеря контроля и возможная компроментация учетных записей. Насколько хватит фантазии :)

Примечание: Напомню, что по умолчанию высталена безопасная политика Restricted (ничего и никому), об этом я недавно писал, надеюсь что вы это читали, а если не читали то обязательно зайдете.

Перед тем как поступить опрометчиво подумайте стоит ли оно этого…

  • Запускаете ли вы скрипты на рабочих станциях? Для каких целей?
  • Запускаете ли вы их в контексте пользователей имеющих административные привилегии?
  • Если запускаете то подписаны ли они?

Предлагаю рассмотреть следующий сценарий.

  1. На всех рабочих станциях Execution Policy выставлено в Unrestricted (встречаю довольно часто).
  2. В контексте пользователя запускается логон-скрипт ан powershell по подключению принтеров и общих папок, копированию некого набора файлов и пр.

Какие минусы?

На первый взгляд все замечательно, все работает, никто не жалуется. Вроде все хорошо т.к. запускаемые скрипты находятся в контролируемой общей папке. Ничего не предвещает проблем, но всегда есть вероятность что они появятся именно в тот момент когда их ожидаешь меньше всего.

Откройте консоль powershell и введите.

$profile

Вы получите путь до powershell-профиля пользователя. Редактируем этот файл командой.

notepad $profile

Открывается файл powershell-профиля для текущего пользователя. Вводим строку «Write-Host HELLO!«, сохраняем, закрываем. Закрываем консоль powershell, открываем новую. В окне видим надпись HELLO!

Что это может дать?

Первое что приходит в голову – возможность запускать нужные команды в контексте безопасности пользователя профиль которого надо подменить. Например скопировать файлы с жесткого диска пользователя на нужный ресурс (нет у вас доступа и полномочий а инфу стырить хочется…) или загрузить файл и выполнить его.

Примечание: В случае запуска логон-скрипта то что внесено в Powershell-профиль выполнится автоматически.

Подобное возможно в случае если «Мои документы» хранятся в папке права на которую выставлены некорректно или удалось подпихнуть заранее созданный файл профиля пользователю под которым планируется зловредная акция :)

Вариантов множество… Включите фантазию.

Второй вариант подмены профиля может быть реализован в случае если на хосте предоставлены административные полномочия сторонним лицам (внедренцы, аутсорсеры и пр. практика показывает что это бывает довольно часто). В этом варианте конечно существует масса других способов повышения привилегий, но мы пока рассматриваем только подмену powershell-профиля.

Как бороться.

Прежде всего нужно определиться где и для чего вы будете использовать PowerShell-скрипты.

Мое мнение – PowerShell создан для административных задач и запускать его нужно только на доверенных компьютерах. Все остальные задачи можно решать средствами GPO.

После понимания области применения необходимо настроить политики запуска только для подписанных скриптов т.к. при попытке подмены файла, скрипт заданный в профиле не будет выполняться.

Итог

Вы подписываете скрипты?
Настроены  ли ваши политики на использование только подписанных скриптов?

Что вы думаете по поводу вышесказанного?

Приглашаю присоединиться ко мне в следующих сервисах:
facebook Google Plus вКонтакте Twitter
Если Вам понравилась статья, то вы можете подписаться на RSS. А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Получать обновления на email

Вы можете оставить комментарий.

8 Комментариев »

 
  • 1# Kazun (76 комм.):

    ExecutionPolicy,по мне,так – это защита от себя не более того.

    1) powershell -noexit -ExecutionPolicy bypass
    PS > Get-ExecutionPolicy
    Bypass

    2)
    PS > Get-ExecutionPolicy
    Restricted
    PS > ‘»Hello»‘ > F:\1.ps1
    PS > F:\1.ps1
    File F:\1.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see «get-help about_
    signing» for more details.
    At line:1 char:9
    + F:\1.ps1 <<< Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

    Execution Policy Change
    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic. Do you want to change the execution
    policy?
    [Y] Yes [N] No [S] Suspend [?] Help (default is «Y»):
    PS > Get-ExecutionPolicy
    Bypass
    PS > F:\1.ps1
    Hello

    3) Copy&Paste,политика не важна.

      Цитировать

    • 2# Сергей Мариничев (565 комм.):

      В случае если ты имеешь привеленгии то да.
      Если нет то изменить уровень выполнения никак.
      Основная идея – не включать ничего кроме нужного а если уж включил то использовать только подписанные скрипты.

        Цитировать

  • 3# Kazun (76 комм.):

    Сергей Мариничев:
    В случае если ты имеешь привеленгии то да.
    Если нет то изменить уровень выполнения никак.
    Основная идея – не включать ничего кроме нужного а если уж включил то использовать только подписанные скрипты.

    На что привилегии? Действия выше,были от обычного

      Цитировать

    • 4# Сергей Мариничев (565 комм.):

      т.е. у вас обычный пользователь может писать в ветку ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’ ?
      Там храниться значение политики. В случае попатки его замены под бесправным пользователем ругается
      AuthorizationManager Check Failed.

      Это Win7…
      ХР-юши под рукой нет, но думаю что результат будет мало отличаться.

        Цитировать

  • 5# Kazun (76 комм.):

    Сергей Мариничев:
    т.е. у вас обычный пользователь может писать в ветку ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell’ ?
    Там храниться значение политики. В случае попатки его замены под бесправным пользователем ругается
    AuthorizationManager Check Failed.

    Это Win7…
    ХР-юши под рукой нет, но думаю что результат будет мало отличаться.

    Я показал,два варианта,где не надо никуда ничего писать.
    1) powershell -noexit -ExecutionPolicy bypass
    2) Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

      Цитировать

    • 6# Сергей Мариничев (565 комм.):

      Хм.
      В пределах текущей сессии ДА это видно при вызове Get-ExecutionPolicy -List, но в разрезе задачи т.е. при подмене профиля этого не реализовать.

      PS за Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process спасибо. Я про скоп процесса и не подумал :)

        Цитировать

  • 7# Kazun (76 комм.):

    Сергей Мариничев:
    Хм.
    В пределах текущей сессии ДА это видно при вызове Get-ExecutionPolicy -List, но в разрезе задачи т.е. при подмене профиля этого не реализовать.

    PS за Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process спасибо. Я про скоп процесса и не подумал

    Скажем,для этого,метода – это будет сложно.Но если самоцель,защитить профайл,это будет,как один из рубежей защиты.Причем,очень не значительный.Есть методы обхода,но все будет зависеть от квалификации администратора и атакующего.Для Xp ситуация осложнится(контроль с сертификатами),но не будем усложнять.Я рад,что появляется больше материала по PowerShell на русском языке.Желаю Вам,развития ресурса и чтоб больше народу приобщалось к PowerShell,за счет посещения вашего ресурса и передачи русскому сообществу информаци.

      Цитировать

    • 8# Сергей Мариничев (565 комм.):

      Спасибо.
      По сути своей, ДА, все зависит от квалификации (неломаемых систем нет), но описанная методика не исключена.

      Кстати какие могут быть проблемы у XP. Про самоподписанный сертификат понятно, а при сертификате выданном доменным CA?

        Цитировать

 

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>