От отдела безопасности поступила задача запретить использование 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 есть еще одна встроенная политика, позволяющая запретить запуск определенных исполняемых файлов. Это Don’t run specified Windows applications в разделе User Configuration -> Administrative Templates -> System). Включите политику, нажмите кнопку Show и добавьте имя исполняемого файла
powershell.exe
, запуск которого нужно запретить.
После применения настроек 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 придется заблокировать несколько исполняемых файлов, которые хранятся в разных каталогах:
- 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
Более гибкие ограничения на запуск исполняемых файлом можно задать через Software Restriction Policies (SRP).
- Создайте доменную GPO в консоли
gpmc.msc
- Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Security Settings -> Software Restriction Policies
- Выберите New Software Restriction Policy
- Перейдите в раздел Additional Rules и добавьте следующий путь:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
- Выберите уровень безопасности Disallowed
Назначьте политику на целевую OU. После применения политики, пользователи не смогут запускать powershell.exe:
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']
This program is blocked by group policy. For more information, contact your system administrator.
Можно сделать исключения в политике, разрешив некоторым пользователям использовать PowerShell. В этом примере я создал в AD отдельную группу AllowPowerShell, в которую добавил администраторов, которым будет разрешено запускать PowerShell.
Затем в консоли GPMC в настройках политики на вкладке Delegation я добавил эту группу, с правом чтения, но применение политики заблокировал: Apply group policy -> Deny.
Таким образом мы запретили запуск PowerShell пользователям, но сделали исключения для группы администраторов. Аналогично нужно запретить применять эту политику для SYSTEM, что позволит запускаться startup скриптам и powershell задания планировщика.
Проверить, что политика не применяется для администраторов можно с помощью команды 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.
- Чтобы политика Applocker применялись на клиенте, нужно включить автозапуск службы Application Identity (Computer Configuration -> Windows Settings -> Security Settings -> System Services)
- Затем перейдите в Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Application Control Policies -> Applocker. Откройте свойств, включите опцию Configured для Executable rules -> Enforce rules.
- Щелкните по секции Executable rules и выберите Create Default rules.
- В правиле All files located in the Windows folder добавьте исключения для исполняемого файла
powershell.exe
по Publisher. - Выберите исполняемый файл и ползунок поставьте на File name.
- Такое правило запретит пользователям запускать это файл.
- Чтобы powershell.exe могли запускать администраторы, нужно создать для них новое разрешающее правило, в котором содержится только этот файл.
- Дефолтные политики Aplocker запрещают пользователям запускать любые исполняемый файлы, кроме расположенных в папках Windows и Program Files. Поэтому если вы хотите запретить запуск только powershell.exe, нужно правило добавить разрешающее все для доменных пользователей, кроме powershell.exe (в поле path указываем
*
).
Для просмотра результирующих политик Applocker на клиенте можно выгрузить их в XML файл:
Get-AppLockerPolicy -Effective -XML > C:\Backup\app.xml
При попытке запустить powershell.exe на клиенте появится сообщение, что приложение заблокировано администратором.
Аналогичным образом нужно заблокировать x86 и x64 версии powershell.exe, powershell_ise.exe и pwsh.exe.