大家好!
我想锁定一些 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