Вопрос или проблема
Всем привет!
Я хочу заблокировать некоторые терминалы Windows 10 так, чтобы они могли запускать только одобренное программное обеспечение, но с возможностью его обновления.
Мой план состоял в том, чтобы воспользоваться новой функцией Windows 10 версии 1903, которая позволяет использовать несколько политик CI (как описано здесь: https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/deploy-multiple-windows-defender-application-control-policies). Чтобы протестировать это, я поместил подписанную политику в “C:\Windows\System32\CodeIntegrity\CIPolicies\Active\{PolicyID}.cip” в виртуальной машине VMware, работающей под управлением Windows 10 1903. После первой загрузки политика активируется и предотвращает запуск всех приложений (кроме разрешенных). Однако, если я перезагружаю систему снова, VMWare не удается загрузить Windows, пока я не отключу Secure Boot. (Кажется, что ОС не установлена, я попадаю в UEFI конфигурацию). Использование той же политики без подписи работает нормально, но я хочу убедиться, что администраторы на этих терминалах не смогут изменить или удалить политику, поэтому я хочу подписать политику.
Для подписания я сгенерировал сертификат CodeSigning, как описано здесь: https://blogs.technet.microsoft.com/ukplatforms/2017/05/04/create-code-integrity-signing-certificate/. После этого я добавил сертификат к политике с помощью следующей команды:
Add-SignerRule -FilePath .\policy.xml -CertificatePath .\codeSigningCertificate.cer -Update
С установленным правилом подписчика я удалил опцию принятия неподписанных политик, используя:
Set-RuleOption -FilePath .\policy.xml -Option 6 -Delete
Затем я преобразовал политику в бинарный формат с помощью:
ConvertFrom-CIPolicy -XmlFilePath .\policy.xml -BinaryFilePath .\policy.cip
Наконец, чтобы подписать политику, я использовал signtool с следующими параметрами:
signtool.exe sign -v /n CodeSigningCertificate -p7 . -p7co 1.3.6.1.4.1.311.79.1 -fd sha256 .\policy.cip
Я скопировал полученный файл “policy.cip.p7” на чистую установку по пути “C:\Windows\System32\CodeIntegrity\CIPolicies\Active\{PolicyID}.cip” и получил описанное поведение.
Вот несколько вещей, которые я также попробовал:
Использование “C:\Windows\System32\CodeIntegrity\SIPolicy.p7b” для развертывания одной политики: это сработало хорошо, но Windows не реагировала, когда я удалял политику. Она просто деактивировалась. Мое понимание использования подписанной политики заключается в том, что Windows должна выдавать какую-то ошибку или предотвращать загрузку, если кто-то с ней вмешивается.
Проверка, поддерживает ли виртуальная машина функциональность Device Guard: я использовал инструмент dgreadiness, чтобы проверить, соответствует ли ВМ критериям использования Device Guard. Инструмент сообщил следующие строки:
PS C:\Users\User\Downloads\dgreadiness_v3.6> .\DG_Readiness_Tool_v3.6.ps1 -Capable
###########################################################################
Readiness Tool Version 3.4 Release.
Tool to check if your device is capable to run Device Guard and Credential Guard.
###########################################################################
###########################################################################
OS and Hardware requirements for enabling Device Guard and Credential Guard
1. OS SKUs: Available only on these OS Skus - Enterprise, Server, Education, Enterprise IoT, Pro, and Home
2. Hardware: Recent hardware that supports virtualization extension with SLAT
To learn more please visit: https://aka.ms/dgwhcr
###########################################################################
Checking if the device is DG/CG Capable
====================== Step 1 Driver Compat ======================
Driver verifier already enabled
Verifying each module please wait ....
Completed scan. List of Compatible Modules can be found at C:\DGLogs\DeviceGuardCheckLog.txt
No Incompatible Drivers found
====================== Step 2 Secure boot present ======================
Secure Boot is present
====================== Step 3 MS UEFI HSTI tests ======================
Copying HSTITest.dll
HSTI Duple Count: 0
HSTI Blob size: 0
String:
HSTIStatus: False
HSTI is absent
====================== Step 4 OS Architecture ======================
64 bit arch.....
====================== Step 5 Supported OS SKU ======================
This PC edition is Supported for DeviceGuard
====================== Step 6 Virtualization Firmware ======================
Virtualization firmware check passed
====================== Step 7 TPM version ======================
get-tpm : Object was not found. (Exception from HRESULT: 0x80090011)
At C:\Users\User\Downloads\dgreadiness_v3.6\DG_Readiness_Tool_v3.6.ps1:818 char:21
+ $TPMLockout = $(get-tpm).LockoutCount
+ ~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-Tpm], TpmWmiException
+ FullyQualifiedErrorId : Microsoft.Tpm.Commands.TpmWmiException,Microsoft.Tpm.Commands.GetTpmCommand
TPM is absent or not ready for use
====================== Step 8 Secure MOR ======================
Secure MOR is available
====================== Step 9 NX Protector ======================
NX Protector is available
====================== Step 10 SMM Mitigation ======================
SMM Mitigation is available
====================== End Check ======================
====================== Summary ======================
Device Guard / Credential Guard can be enabled on this machine.
The following additional qualifications, if present, can enhance the security of Device Guard / Credential Guard on this system:
HSTI is absent
TPM is absent or not ready for use
To learn more about required hardware and software please visit: https://aka.ms/dgwhc
Установка CA сертификата подписи кода как доверенного корневого сертификата в хранилище сертификатов машины: это не изменило поведение.
У кого-нибудь есть предложения, что я могу сделать по этому поводу или есть идеи, что я сделал неправильно?
Спасибо за помощь
Мартин
Кажется, что использование нескольких политик CI, как описано здесь, еще не полностью работает. Чтобы решить проблему с неперезагрузкой Windows, в базовой политике должен быть установлен GUID {A244370E-44C9-4C06-B551-F6016E563076}. Это также GUID, используемый в примерных политиках, найденных в “C:\Windows\schemas\CodeIntegrity\ExamplePolicies”. При использовании этого GUID политика активируется и подпись проверяется корректно. Пока не будет задействована другая действительная политика с более высоким номером версии, старая политика остается активной, даже если кто-то удаляет файл политики. Таким образом, политика защищена от вмешательства.
Однако есть некоторые функции, описанные в ссылке, которые не работают так, как предполагалось (возможно, функция еще не готова к полному использованию):
- Использование нескольких базовых политик: при наличии второй базовой политики Windows выдает ошибку при загрузке, указывающую на проблему с проверкой подписи.
- Вмешательство в дополнительные политики: Windows проверяет подпись дополнительных политик, но также допускает их удаление или замену на более старую версию.
С этими недостатками я пока не вижу необходимости в использовании функции нескольких политик.
Вместо этого я использую одну CIPolicy с правилом для собственного сертификата подписи кода. Таким образом, я могу подписывать каталоги безопасности, содержащие информацию о разрешенных программах, как предложил harrymc и как описано здесь. Это, кажется, работает более стабильно и удобно в использовании.
Windows Defender Application Control (WDAC) и Device Guard — это две разные вещи.
Device Guard — это набор функций, таких как VBS, Credential Guard, защита стека с аппаратным приложением, Secure Launch и т. д., поддерживаемых физическим оборудованием, для обеспечения безопасности загрузки, против плохих UEFI и для всей ОС.
С другой стороны, WDAC — это белый список приложений/файлов в Windows.
Проблема, с которой вы сталкиваетесь, скорее всего, из-за неисправного сертификата или проблемы в процессе подписи.
Я создал приложение, которое упрощает все связанные с WDAC (контролем приложений) действия, включая подпись и развертывание политик.
AppControl Manager: https://github.com/HotCakeX/Harden-Windows-Security/wiki/AppControl-Manager
.
Ответ или решение
Для решения проблемы, связанной с невозможностью загрузки Windows после применения политики Windows Defender Application Control (WDAC), необходимо сначала понять основные концепции и принципы работы WDAC и как они связаны с безопасностью устройства.
Теоретическая часть
Windows Defender Application Control — это функция, предназначенная для обеспечения безопасности путем разрешения выполнения только доверенного программного обеспечения и блокирования потенциально вредоносных приложений и скриптов. В основе WDAC лежат политики целостности кода (Code Integrity Policies, CIP), которые определяют, какие приложения можно запускать. Политики могут быть подписаны, что добавляет дополнительный уровень защиты, предотвращая изменение или удаление политик незамеченным образом.
Security Boot (Защищённая загрузка) в свою очередь, представляет собой механизм, который использует криптографические проверки для уверенности в том, что используемое программное и аппаратное обеспечение – доверенное. В случае когда политика WDAC подписана неправильно, это может привести к проблемам совместимости с Secure Boot, поскольку неудачная валидация подписей приведет к ошибкам на этапе загрузки.
Пример
В описанной вами ситуации наблюдается проблема, когда подписанная политика WDAC позволяет запуск Windows только один раз, а после второго перезапуска система перестает загружаться. Это может быть связано с неправильной реализацией функций CIP или с ошибками в процессе подписания политики. Вы использовали Windows 10 версии 1903 в виртуальной машине VMware и столкнулись с ошибкой во время загрузки с включенной защищенной загрузкой, что указывает на проблему с подписью.
При создании кодовой подписи и применении политики произошли следующие действия:
- Создание сертификата: Генерация сертификата для подписи по инструкции с сайта Microsoft.
- Добавление политики подписи: Применение команды Add-SignerRule для привязки подписи.
- Удаление опции некритической подписи: Удаление возможности применения неподписанных политик.
- Конвертация формата политики: Преобразование от XML в бинарный CIP, а затем подписание с помощью утилиты signtool.exe.
Несмотря на тщательную реализацию этих шагов, политика не работала как ожидалось; система удачно загружала политику только единожды.
Ваш пример также содержит шаги по проверке совместимости с Device Guard и Secure Boot, где отсутствуют некритичные драйверы и присутствует поддержка Secure MOR и NX Protector, но отсутствует TPM, что также может быть фактором, влияющим на безопасность, но не представляющим критической угрозы в данном контексте.
Приложение
Чтобы исправить ситуацию, можно реализовать следующие действия:
-
Проверка правильности сертификата и цепи доверия: Убедитесь, что сертификат, использованный для подписи, правильно интегрирован в доверенную цепочку сертификатов системы, и не требуется установка доверенного корневого сертификата на уровне всей системы.
-
Тестирование с использованием другой версии Windows или обновления: Некоторые особенности и исправления могли быть реализованы в более поздних обновлениях Windows 10 или других версиях (она может обеспечить лучшую поддержку функций).
-
Использование единственной политики на базе GUID: Это может устранить многозначность, вызванную наличием нескольких политик, и избежать ошибок проверки подписи, что уже было выявлено как успешное временное решение.
-
Использование инструментов и утилит для управления политиками: Используйте специализированные утилиты, такие как AppControl Manager, которые могут предложить более удобный интерфейс и автоматизацию процесса проверки и применения политик.
-
Документация и поддержка: Обратитесь к официальной документации и сообществу специалистов, чтобы узнать о последних обновлениях и решениях, касающихся работы с WDAC на конкретных конфигурациях, таких как VMware.
Подытоживая, на практике проблема может крыться в интеграции и реализации политики в сочетании с ограничениями виртуальной среды. Переход на альтернативные методы применения политик, например, с использованием рекомендованных кодовых подписей или различий в настройках Windows, может решить проблему и позволит обеспечить безопасную эксплуатацию необходимых терминалов.