Использование элемента управления приложениями для защиты PowerShell
В этой статье описывается настройка политики управления приложениями для бизнеса . Политику можно настроить для принудительного применения или аудита правила политики. В режиме аудита поведение PowerShell не изменяется, но регистрирует сообщения события 16387 в PowerShellCore/Analytic
журнал событий. В режиме принудительного применения PowerShell применяет ограничения политики.
В этой статье предполагается, что вы используете тестовый компьютер, чтобы проверить поведение PowerShell на широком компьютере перед развертыванием политики управления приложениями в вашей среде.
Создание политики управления приложениями
Политика управления приложениями описана в XML-файле, который содержит сведения о параметрах политики, разрешенных файлах и сертификатах подписи, распознаваемых политикой. При применении политики только утвержденные файлы могут загружаться и запускаться. PowerShell блокирует неутвержденные файлы скриптов от запуска или запуска их в режиме в ConstrainedLanguage
зависимости от параметров политики.
Вы создаете политику управления приложениями и управляете ими с помощью модуля ConfigCI , который доступен во всех поддерживаемых версиях Windows. Этот модуль Windows PowerShell можно использовать в Windows PowerShell 5.1 или в PowerShell 7 с помощью уровня совместимости Windows. Этот модуль проще использовать в Windows PowerShell. Созданную политику можно применить к любой версии PowerShell.
Действия по созданию политики управления приложениями
Для тестирования необходимо просто создать политику по умолчанию и самозаверяющий сертификат подписи кода.
Создание политики по умолчанию
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
Эта команда создает файл политики по умолчанию, который
SystemCIPolicy.xml
позволяет запускать все файлы, подписанные кодом Майкрософт.Примечание.
Выполнение этой команды может занять до двух часов, так как оно должно сканировать весь тестовый компьютер.
Отключение режима аудита в политике по умолчанию
Новая политика всегда создается в
Audit
режиме. Чтобы проверить применение политик, необходимо отключить режим аудита при применении политики. ИзменитеSystemCIPolicy.xml
файл с помощью текстового редактора, напримерnotepad.exe
Visual Studio Code (VS Code).Audit mode
Закомментируйте параметр.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
Создание самозаверяющего сертификата подписи кода
Вам нужен сертификат подписывания кода для подписывания всех тестовых двоичных файлов или файлов скриптов, которые необходимо запустить на тестовом компьютере. Предоставляется
New-SelfSignedCertificate
модулем PKI . Чтобы получить наилучшие результаты, выполните эту команду в Windows PowerShell 5.1.$newSelfSignedCertificateSplat = @{ DnsName = $env:COMPUTERNAME CertStoreLocation = "Cert:\CurrentUser\My\" Type = 'CodeSigningCert' } $cert = New-SelfSignedCertificate @newSelfSignedCertificateSplat Export-Certificate -Cert $cert -FilePath c:\certs\signing.cer Import-Certificate -FilePath C:\certs\signing.cer -CertStoreLocation "Cert:\CurrentUser\Root\" $cert = Get-ChildItem Cert:\CurrentUser\My\ -CodeSigningCert dir c:\bin\powershell\pwsh.exe | Set-AuthenticodeSignature -Certificate $cert
Добавление сертификата подписи кода в политику
Используйте следующую команду, чтобы добавить новый сертификат подписи кода в политику.
Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
Преобразование XML-файла политики в двоичный файл принудительного применения политики
Наконец, необходимо преобразовать XML-файл в двоичный файл, используемый элементом управления приложениями для применения политики.
ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
Применение политики управления приложениями
Чтобы применить политику к тестовой машине, скопируйте
SIPolicy.p7b
файл в требуемое системное расположение.C:\Windows\System32\CodeIntegrity
Примечание.
Некоторые определения политик должны быть скопированы в вложенную папку, например
C:\Windows\System32\CodeIntegrity\CiPolicies
. Дополнительные сведения см. в советах администратора управления приложениями и известных проблемах.Отключение политики управления приложениями
Чтобы отключить политику, переименуйте
SIPolicy.p7b
файл. Если вам нужно выполнить больше тестирования, вы можете изменить имя обратно на повторное создание политики.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
Тестирование с помощью аудита политики управления приложениями
PowerShell 7.4 добавила новую функцию для поддержки политик управления приложениями в режиме аудита . В режиме аудита PowerShell запускает ненадежные скрипты в ConstrainedLanguage
режиме без ошибок, но записывает сообщения в журнал событий. Сообщения журнала описывают, какие ограничения будут применяться, если политика была в режиме принудительного применения .
Просмотр событий аудита
PowerShell регистрирует события аудита в журнале событий PowerShellCore/Analytic . Журнал по умолчанию не включен. Чтобы включить журнал, откройте windows Просмотр событий, щелкните правой кнопкой мыши журнал PowerShellCore/Analytic и выберите "Включить журнал".
Кроме того, можно выполнить следующую команду из сеанса PowerShell с повышенными привилегиями.
wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet
События в Windows Просмотр событий можно просмотреть или использовать Get-WinEvent
командлет для получения событий.
Get-WinEvent -LogName PowerShellCore/Analytic -Oldest |
Where-Object Id -eq 16387 | Format-List
TimeCreated : 4/19/2023 10:11:07 AM
ProviderName : PowerShellCore
Id : 16387
Message : App Control Audit.
Title: Method or Property Invocation
Message: Method or Property 'WriteLine' on type 'System.Console' invocation will not
be allowed in ConstrainedLanguage mode.
At C:\scripts\Test1.ps1:3 char:1
+ [System.Console]::WriteLine("pwnd!")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FullyQualifiedId: MethodOrPropertyInvocationNotAllowed
Сообщение о событии содержит положение скрипта, в котором будет применено ограничение. Эти сведения помогут вам понять, где необходимо изменить скрипт, чтобы он выполнялось в политике управления приложениями.
Внимание
После проверки событий аудита необходимо отключить журнал Аналитики. Журналы аналитики быстро растут и потребляют большое количество дискового пространства.
Просмотр событий аудита в отладчике PowerShell
Если для интерактивного сеанса PowerShell задана $DebugPreference
переменная Break
, PowerShell переходит в отладчик скрипта командной строки в текущем расположении в скрипте, где произошло событие аудита. Точка останова позволяет отлаживать код и проверять текущее состояние скрипта в режиме реального времени.
PowerShell