1. Что такое Custom Kernel Signers?
Мы знаем, что в Windows10 есть строгие требования к драйверу режима ядра. Одним из требований является то, что драйверы должны быть подписаны EV сертификатом, которому доверяет Microsoft. Более того, начиная с выпуска 1607, новые драйверы надо загружать на Windows Hardware Portal для получения подписи от Microsoft. Даже если драйвер использует самоподписанный сертификат, без включения режима TestSigning, Windows10 все равно отказывается его загружать, даже если сертификат был установлен в Windows Certificate Store (certlm.msc или certmgr.msc). Это означает, что в Windows10 есть независимое хранилище сертификатов для драйвера режима ядра.Custom Kernel Signers(CKS) - это политика, поддерживаемая Windows10 (возможно, начиная с выпуска 1703). Полное название политики -
CodeIntegrity-AllowConfigurablePolicy-CustomKernelSigners. Она позволяет пользователям решать, каким сертификатам в ядре доверять, а каким нет. Кстати, эта политика может потребовать включения другой политики - CodeIntegrity-AllowConfigurablePolicy.Обычно CKS отключается по умолчанию во всех редакциях Windows10, кроме Windows10 China Government Edition.
Если ПК с Windows10 удовлетворяет следующим условиям:
- Включена политика CodeIntegrity-AllowConfigurablePolicy-CustomKernelSigners. (Возможно CodeIntegrity-AllowConfigurablePolicy также необходима).
- Включена функция SecureBoot.
Если вы заинтересованы в других политиках, то можете поискать тут.
2. Как включить данную опцию?
2.1 Требования
- У вас должны быть права администратора.
- Вам временно необходима Windows10 версии Enterprise или Education.
Почему? Потому что вам надо выполнить командуConvertFrom-CIPolicyв Powershell, которую нельзя выполнить в других версиях Windows 10. - Вы можете устанавливать UEFI Platform Key.
2.2 Создание сертификатов и установка Platform Key(PK)
Пожалуйста, проследуйте этой инструкции, чтобы создать сертификаты. После этого вы получите следующие файлы:
Код:
// самоподписанный корневой сертификат удостоверяющего центра
localhost-root-ca.der
localhost-root-ca.pfx
// сертификат уровня ядра, выпущенный самоподписанным корневым сертификатом удостоверяющего центра
localhost-km.der
localhost-km.pfx
// сертификат UEFI Platform Key, выпущенный самоподписанным корневым сертификатом удостоверяющего центра
localhost-pk.der
localhost-pk.pfx
2.2.1 Установка PK в VMware
Если имя вашей виртуальной машины VMware -TestVM и у нее есть SecureBoot, то в ее папке будет два файла: TestVM.nvram и TestVM.vmx. Вы можете установить PK следующим образом:- Выключите виртуальную машину.
- Удалите TestVM.nvram. Это сбросит настройки UEFI виртуальной машины, при следующем запуске.
- Откройте TestVM.vmx текстовым редактором и добавьте в конец следующие две строки:
Первая строка позволяет вам управлять ключами SecureBoot в UEFI.Код:uefi.allowAuthBypass = "TRUE" uefi.secureBoot.PKDefault.file0 = "localhost-pk.der"
Вторая строка делает файлlocalhost-pk.der, в папке виртуальной машины, стандартным UEFI PK. Еслиlocalhost-pk.derнаходится вне папки виртуальной машины, то укажите полный путь.
2.3 Создание правил сертификата подписи кода уровня ядра
Запустите Powershell от имени администратора в Windows10 версии Enterprise/Education.- Выполните New-CIPolicy для создания новой CI (Code Integrity - Целостность Кода) политики. Убедитесь, что ОС не заражена вредоносными программами.
Данная команда просканирует всю папку System32 и займет некоторое время. Если вы не хотите запускать процесс сканирования, вы можете использовать мой готовый файл SiPolicy.xml.Код:New-CIPolicy -FilePath SiPolicy.xml -Level RootCertificate -ScanPath C:\windows\System32\ - Выполните Add-SignerRule для добавления нашего сертификата подписи кода уровня ядра в SiPolicy.xml.
Код:Add-SignerRule -FilePath .\SiPolicy.xml -CertificatePath .\localhost-km.der -Kernel - Выполните ConvertFrom-CIPolicy для сериализации SiPolicy.xml и получения бинарного файла SiPolicy.bin
Код:ConvertFrom-CIPolicy -XmlFilePath .\SiPolicy.xml -BinaryFilePath .\SiPolicy.bin
2.4 Правила политики подписания и применение политик
- Для подписи SiPolicy.bin, мы должны использовать PK сертификат. Если у вас есть Windows SDK, вы можете подписать его, используя signtool.
Пожалуйста, пропишите пароль от вашего localhost-pk.pfx в <password of localhost-pk.pfx>.Код:signtool sign /fd sha256 /p7co 1.3.6.1.4.1.311.79.1 /p7 . /f .\localhost-pk.pfx /p <password of localhost-pk.pfx> SiPolicy.bin
После этого вы получите файл SiPolicy.bin.p7 в текущей директории. - Переименуйте SiPolicy.bin.p7 в SiPolicy.p7b и скопируйте SiPolicy.p7b в EFI\Microsoft\Boot\
Код:# run powershell as administrator mv .\SiPolicy.bin.p7 .\SiPolicy.p7b mountvol x: /s cp .\SiPolicy.p7b X:\EFI\Microsoft\Boot\
2.5 Включение CustomKernelSigners
Переменная, отвечающая за состояние CKS, хранится в значении ProductPolicy, чей ключ -HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions.Хотя администраторы могут изменять это значение, оно будет сброшено сразу же после изменения. Это происходит потому, что это значение является просто отображением переменной в ядре после того, как ядро инициализировано. Единственный способ изменить переменную - это вызвать ExUpdateLicenseData. Однако, этот API может быть вызван только в режиме ядра или косвенно путем вызова NtQuerySystemInformation, с помощью SystemPolicyInformation. К сожалению, последний способ успешно работает только тогда, когда вызов делает защищенный процесс.
Таким образом, мы можем модифицировать значение только тогда, когда ядро не завершило инициализацию. Есть ли у нас шанс? Да, в этом нам поможет Windows Setup Mode.
Я написал программу, которая облегчит включение CKS. Код находится в папке EnableCustomKernelSigners, а саму программу EnableCKS.exe можно скачать здесь. Конечно, вы можете написать такую программу сами.
Два раза кликните на EnableCKS.exe и вы увидите
Код:
[+] Succeeded to open "HKLM\SYSTEM\Setup".
[+] Succeeded to set "CmdLine" value.
[+] Succeeded to set "SetupType" value.
Reboot is required. Are you ready to reboot? [y/N]
Код:
CodeIntegrity-AllowConfigurablePolicy
CodeIntegrity-AllowConfigurablePolicy-CustomKernelSigners
2.6 Постоянный CustomKernelSigners
Теперь Вы сможете загружать драйвера, подписанные с помощью localhost-km.pfx. Но подождите минутку. В течение 10 минут, CKS будет сброшен до выключенного состояния, с помощью sppsvc, за исключением случаев, когда у вас стоит Windows10 China Government Edition. Не волнуйтесь, сброс вступает в силу только при следующем запуске системы.Поэтому мы должны загрузить драйвер для непрерывного вызова ExUpdateLicenseData, чтобы сохранить CKS. Я собрал драйвер с именем ckspdrv.sys, который можно скачать [на этой странице]](https://github.com/HyperSine/Windows10-CustomKernelSigners/releases). Код находится в папке CustomKernelSignersPersistent.
ckspdrv.sys не подписан. Вы должны подписать его, с помощью localhost-km.pfx, чтобы его можно было загрузить в ядро.
Код:
signtool sign /fd sha256 /ac .\localhost-root-ca.der /f .\localhost-km.pfx /p <password of localhost-km.pfx> /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp ckspdrv.sys
Пожалуйста пропишите пароль в
<password of localhost-km.pfx> от вашего localhost-km.pfx.Затем скопируйте ckspdrv.sys в c:\windows\system32\drivers и запустите cmd от имени администратора:
Код:
sc create ckspdrv binpath=%windir%\system32\drivers\ckspdrv.sys type=kernel start=auto error=normal
sc start ckspdrv
ckspdrv.sys будет успешно добавлен, что также подтверждает, что наша политика применилась правильно.Теперь вы можете загрузить любой драйвер, подписанный
localhost-km.pfx. Развлекайтесь и наслаждайтесь~Оригинал
автор перевода Thatskriptkid