Отключаем использование PowerShell для пользователей

От отдела безопасности поступила задача запретить использование PowerShell на некоторых компьютерах. Необходимо запретить пользователям запускать интерактивную PowerShell консоль, выполнять PowerShell скрипты, но при этом логон скрипты GPO, задания планировщика с PowerShell скриптами (запускаемые от SYSTEM) должны работать. В статье мы рассмотрим несколько методов запрета запуска PowerShell на компьютерах, которые можно централизованно применить через групповые политики.

Встроенная политика выполнения PowerShell скриптов в Windows (PowerShell Execution Policy) со значением Restricted позволяет запретить только выполнение файлов скриптов PS1, но не блокирует использование пользователями интерактивной консоли powershell.exe . В Windows 10 и 11 значение политики выполнения PowerShell по-умолчанию Restricted (можно настроить через параметр GPO Turn on Script Execution в Computer Configuration -> Administrative Templates -> Windows Component -> Windows PowerShell).

GPO для скриптов PowerShell

В редакторе GPO есть еще одна встроенная политика, позволяющая запретить запуск определенных исполняемых файлов. Это Don’t run specified Windows applications в разделе User Configuration -> Administrative Templates -> System). Включите политику, нажмите кнопку Show и добавьте имя исполняемого файла powershell.exe , запуск которого нужно запретить.

Политика Don’t run specified Windows applications

После применения настроек GPO на клиенте при попытке запустить powershell.exe, появится ошибка:

Restrictions
This operation has been cancelled due to restrictions in effect on this computer. Please contact your system administrator.

Однако такая политика недостаточно надежная. Например, она не заблокировала запуск Windows Terminal с сессией PowerShell.

запуск powershell.exe частично заблокирован

Отметим, что при разработке политик запрета PowerShell придется заблокировать несколько исполняемых файлов, которые хранятся в разных каталогах:

  • x86 и x64 версии powershell.exe и powershell_ise.exe в каталогах %SystemRoot%\System32\WindowsPowerShell\v1.0\ и %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\
  • Если на компьютере установлен новый PowerShell Core, нужно запретить также запуск исполняемого файла pwsh.exe. Например, в моем случае это путь C:\Program Files\PowerShell\7\pwsh.exe (путь к файлу можно получить командой: Get-Command pwsh.exe путь к pwsh.exe

Более гибкие ограничения на запуск исполняемых файлом можно задать через Software Restriction Policies (SRP).

  1. Создайте доменную GPO в консоли gpmc.msc
  2. Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Security Settings -> Software Restriction Policies
  3. Выберите New Software Restriction Policy Создать Software Restriction Policy
  4. Перейдите в раздел Additional Rules и добавьте следующий путь: %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
  5. Выберите уровень безопасности Disallowed запретить powershell.exe через Software Restriction Policy

Назначьте политику на целевую OU. После применения политики, пользователи не смогут запускать powershell.exe:

This app has been blocked by your administrator

This app has been blocked by your administrator

Также такая политика SRP не позволяет запустить powershell.exe через Windows Terminal:

[error 2147943660 (0x800704ec) when launching `%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe']

error 2147943660 (0x800704ec) when launching `%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe'

This program is blocked by group policy. For more information, contact your system administrator.

This program is blocked by group policy

Можно сделать исключения в политике, разрешив некоторым пользователям использовать PowerShell. В этом примере я создал в AD отдельную группу AllowPowerShell, в которую добавил администраторов, которым будет разрешено запускать PowerShell.

Затем в консоли GPMC в настройках политики на вкладке Delegation я добавил эту группу, с правом чтения, но применение политики заблокировал: Apply group policy -> Deny.

Сделать исключения в политике для администраторов

Таким образом мы запретили запуск PowerShell пользователям, но сделали исключения для группы администраторов. Аналогично нужно запретить применять эту политику для SYSTEM, что позволит запускаться startup скриптам и powershell задания планировщика.

Проверить, что политика не применяется для администраторов можно с помощью команды gpresult /r.

gpresult /r

Однако технология Software Restriction Policies считается устаревшей (deprecated), начиная с Windows 10 1803 и Windows Server 2019. Вместо нее рекомендуют использовать политики ограничения запуска программ Windows Defender Application Control (WDAC) или AppLocker.

Далее мы рассмотрим, как запретить запуск powershell.exe с помощью политики AppLocker. Изначально политики Applocker можно было применять только к Enterprise редакция Windows. Но, начиная с Windows 10 2004, политики AppLocker можно применять в том числе в Pro редакциях Windows.

  1. Чтобы политика Applocker применялись на клиенте, нужно включить автозапуск службы Application Identity (Computer Configuration -> Windows Settings -> Security Settings -> System Services) Автозапуск службы Application Identity
  2. Затем перейдите в Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Application Control Policies -> Applocker. Откройте свойств, включите опцию Configured для Executable rules -> Enforce rules. Включить правила Applocker
  3. Щелкните по секции Executable rules и выберите Create Default rules.
  4. В правиле All files located in the Windows folder добавьте исключения для исполняемого файла powershell.exe по Publisher.
  5. Выберите исполняемый файл и ползунок поставьте на File name. запрет запуска powershell.exe
  6. Такое правило запретит пользователям запускать это файл.
  7. Чтобы powershell.exe могли запускать администраторы, нужно создать для них новое разрешающее правило, в котором содержится только этот файл. исключение в правилах applocker для группу администраторов
  8. Дефолтные политики Aplocker запрещают пользователям запускать любые исполняемый файлы, кроме расположенных в папках Windows и Program Files. Поэтому если вы хотите запретить запуск только powershell.exe, нужно правило добавить разрешающее все для доменных пользователей, кроме powershell.exe (в поле path указываем * ). разрешить пользователям запуск других файлов
При построении политик Applocker нужно учитывать несколько моментов. Уровень по умолчанию Disallowed, т.е. запрещено все, кроме явно разрешенного. Запрещающие правила имеют приоритет над разрешающими. Т.е. разрешённый файл для запуска файл не должен быть явно запрещён и должен быть явно разрешён.

Для просмотра результирующих политик Applocker на клиенте можно выгрузить их в XML файл:

Get-AppLockerPolicy -Effective -XML > C:\Backup\app.xml

При попытке запустить powershell.exe на клиенте появится сообщение, что приложение заблокировано администратором.

запуск powershell.exe заблокирован администратором

Аналогичным образом нужно заблокировать x86 и x64 версии powershell.exe, powershell_ise.exe и pwsh.exe.


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)