Windows Defender 应用程序控制阻止 Windows 在第二次重启后启动(签名策略)

Windows Defender 应用程序控制阻止 Windows 在第二次重启后启动(签名策略)

大家好!

我想锁定一些 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)。为了测试这一点,我在运行 Windows 10 1903 的 VMware 虚拟机中的“C:\Windows\System32\CodeIntegrity\CIPolicies\Active\{PolicyID}.cip”下放置了一个签名策略。首次启动后,该策略被激活并阻止执行所有应用程序(除允许的应用程序外)。但是,如果我再次重新启动系统,VMWare 将无法启动 Windows,除非我禁用安全启动。(似乎操作系统未安装,我进入了 UEFI 配置)使用没有签名的相同策略可以正常工作,但我想确保这些终端上的管理员不会篡改或删除该策略,这就是我想要签署该策略的原因。

为了对其进行签名,我生成了一个代码签名证书,如下所述: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 应该抛出某种错误或阻止启动。

检查虚拟机是否支持设备保护功能:我使用 dgreadiness 工具来测试虚拟机是否符合使用设备保护的条件。该工具报告了以下几行:

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 作为受信任的根证书安装到机器证书存储区:这不会改变任何行为。

有人对我应该做些什么有什么建议吗?或者有人知道我做错了什么吗?

感谢您的帮助

马丁

答案1

似乎使用如上所述的多个 CI 策略这里尚未完全发挥作用。为了解决 Windows 无法启动的问题,基本策略必须将 GUID 设置为 {A244370E-44C9-4C06-B551-F6016E563076}。这也是在“C:\Windows\schemas\CodeIntegrity\ExamplePolicies”下找到的示例策略中使用的 GUID。使用此 GUID 时,策略将激活,并且签名将得到正确验证。只要没有部署其他具有更高版本号的有效策略,旧策略就会处于活动状态,即使有人删除了策略文件。因此,策略不会被篡改。

但是,链接中描述的一些功能不能按预期工作(也许该功能尚未准备好充分使用):

  • 使用多个基本策略:如果采用第二个基本策略,Windows 将在启动期间显示错误,指出验证签名时出现问题。
  • 篡改补充策略:Windows 会检查补充策略的签名,但如果有人删除它们或用旧版本替换它们,这也是可以接受的。

由于这些缺点,我目前真的不明白多重策略功能的用处。

我将使用一个 CIPolicy,其中包含自己的代码签名证书规则。这样,我就可以签署包含有关允许程序的信息的安全目录,如 harrymc 所建议和所述这里. 这样看起来工作更稳定,也更容易使用。

答案2

Windows Defender 应用程序控制 (WDAC) 和 Device Guard 是两个不同的东西。

设备保护是一组由物理硬件支持的功能,例如 VBS、凭据保护、硬件强制堆栈保护、安全启动等,为启动、针对不良 UEFI 和整个操作系统提供安全性。

另一方面,WDAC 是 Windows 上的应用程序/文件白名单。

您遇到的问题很可能是由于证书不良或签名过程中出现问题。

我创建了一个名为 WDACConfig 的 PowerShell 模块,它简化了所有与 WDAC 相关的活动,包括签署和部署 WDAC 策略。

GitHub 链接,

WDACConfig 模块: https://github.com/HotCakeX/Harden-Windows-Security/wiki/WDACConfig

有关使用 Windows Server 中的企业 CA 角色创建证书的详细文档(包括视频): https://github.com/HotCakeX/Harden-Windows-Security/wiki/How-to-Create-and-Deploy-a-Signed-WDAC-Policy-Windows-Defender-Application-Control

相关内容