Windows Server配置WDAC策略仅运行微软签名软件的核心,是在服务器上启用Windows Defender应用程序控制(WDAC),通过创建并部署严格策略,强制系统只执行带有微软数字签名的应用程序、脚本、驱动程序和动态链接库(DLL),从而将非微软签名的软件完全隔离在外,极大提升服务器的安全基线。
WDAC是什么?为什么它对Windows Server至关重要?
WDAC,即Windows Defender应用程序控制,前身是“设备防护”中的“代码完整性策略”。它是一种基于代码完整性的安全功能,允许管理员通过策略定义允许在系统上运行的软件。对于Windows Server而言,其重要性在于从根源上阻断未授权或恶意软件的运行。传统防病毒软件基于特征库,属于“事后补救”,而WDAC是一种“事前预防”的零信任模型。它不关心文件是否“恶意”,只关心其是否“被允许”。通过强制只运行微软签名的软件,能有效防御供应链攻击、无文件攻击以及利用合法工具(如PsExec、PowerShell)的“Living-off-the-Land”攻击,是构建服务器核心安全防线的基础。
配置前的关键准备工作与注意事项
在开始配置前,必须进行周密的规划,否则可能导致服务器关键功能中断。首先,进行全面的应用程序清单审计,使用"Get-ChildItem"命令扫描所有磁盘,或使用Microsoft Defender for Endpoint等工具,识别所有正在运行的业务软件、管理工具、代理程序(如备份代理、监控代理)和驱动程序。其次,确认这些必要软件是否具有有效的微软签名。许多商业软件(如VMware Tools、一些数据库驱动)可能使用其自身或第三方签名,这些需要被特殊处理。最后,务必在测试环境中先行验证策略,并确保有紧急恢复方案,例如通过高级启动选项或恢复模式来撤销策略。
步骤一:创建基础的仅允许微软签名的WDAC策略
我们将使用PowerShell来创建和部署策略。首先,以管理员身份打开PowerShell。创建最基本的、仅允许微软商店和微软签名的策略XML文件。这个策略是一个理想的起点,但通常过于严格,需要后续调整。
# 生成一个默认的、仅允许微软签名的策略XML文件 New-CIPolicy -Level PcaCertificate -FilePath C:\WDAC\MSOnlyPolicy.xml -UserPEs
此命令生成的策略("MSOnlyPolicy.xml")基于发布者证书(PcaCertificate)级别,主要允许由微软根证书签名的代码。"-UserPEs"参数确保扫描用户模式的应用程序。生成的XML文件是策略的“源代码”,我们需要将其转换为可部署的二进制格式。
步骤二:补充必要规则与处理非微软签名软件
纯粹的“仅微软”策略在实际生产环境中几乎无法工作,因为总会有合法的非微软软件。WDAC提供了灵活的规则合并机制。你需要为每一个必需的非微软签名软件创建补充策略。例如,要为"C:\Program Files\YourApp\yourapp.exe"创建允许规则:
# 为特定文件创建基于文件哈希的允许规则(最严格但不便维护) $Rules = New-CIPolicyRule -DriverFilePath "C:\Program Files\YourApp\yourapp.exe" Merge-CIPolicy -OutputFilePath C:\WDAC\SupplementalPolicy.xml -PolicyPaths C:\WDAC\MSOnlyPolicy.xml -Rules $Rules # 或者,如果该软件有稳定的发布者证书,创建基于发布者的规则(推荐) $Rules = New-CIPolicyRule -Publisher "CN=Your Software Inc., O=Your Software Inc., L=City, S=State, C=US" -Level Publisher Merge-CIPolicy -OutputFilePath C:\WDAC\SupplementalPolicy.xml -PolicyPaths C:\WDAC\MSOnlyPolicy.xml -Rules $Rules
基于哈希的规则在文件每次更新后都会失效,而基于发布者证书的规则更持久。将所有必要的补充规则合并到主策略中,形成最终策略。
步骤三:配置策略规则选项与转换为二进制格式
WDAC策略支持多种规则选项,用于微调其行为。对于服务器环境,以下几个选项至关重要:
# 启用"已启用:审核模式",此模式下策略仅记录违规而不阻止,用于最终部署前验证 Set-RuleOption -FilePath C:\WDAC\FinalPolicy.xml -Option 3 # 启用"已启用:补充策略",允许后续部署补充策略,而无需替换整个基础策略 Set-RuleOption -FilePath C:\WDAC\FinalPolicy.xml -Option 16 # 禁用"已启用:脚本执行",此选项默认启用(允许脚本),如果希望严格限制PowerShell等,可移除 # Remove-RuleOption -FilePath C:\WDAC\FinalPolicy.xml -Option 0
配置好选项后,将最终的XML策略文件转换为".cip"二进制文件:
ConvertFrom-CIPolicy -XmlFilePath C:\WDAC\FinalPolicy.xml -BinaryFilePath C:\WDAC\FinalPolicy.cip
步骤四:部署与激活WDAC策略
部署WDAC策略有多种方法,对于独立服务器或小规模环境,使用本地策略部署最为直接。将生成的".cip"文件重命名并复制到系统代码完整性策略目录:
Copy-Item -Path C:\WDAC\FinalPolicy.cip -Destination C:\Windows\System32\CodeIntegrity\SiPolicy.p7b -Force
复制完成后,必须重启服务器以使策略生效。对于大规模部署,强烈推荐使用组策略(GPO)或移动设备管理(MDM)工具如Intune。你可以将".cip"文件重命名为"SiPolicy.p7b",并通过GPO的“计算机配置->管理模板->系统->设备防护->部署代码完整性策略”进行分发。
步骤五:监控、审核与策略维护
策略激活后,监控是持续安全的关键。在事件查看器中查看"Applications and Services Logs -> Microsoft -> Windows -> CodeIntegrity -> Operational"日志,这里会记录所有被策略允许或拒绝的代码执行事件。事件ID 3076表示成功验证,事件ID 3077表示被阻止。在初始“审核模式”下运行一段时间(如一周),仔细分析3077事件,确保所有被阻止的程序都是预期内的,没有误杀关键业务进程。根据审核日志,不断补充和调整策略。当策略稳定后,将规则选项3(审核模式)移除,转换为“强制执行模式”:
Remove-RuleOption -FilePath C:\WDAC\FinalPolicy.xml -Option 3 ConvertFrom-CIPolicy -XmlFilePath C:\WDAC\FinalPolicy.xml -BinaryFilePath C:\WDAC\FinalPolicy_Enforce.cip # 再次部署并重启
策略维护是一个持续过程。每当部署新的服务器角色、功能或业务软件时,都需要提前在测试环境中更新WDAC策略。
高级技巧与行业最佳实践
1. 分层策略:采用“基础策略+补充策略”的分层架构。基础策略锁定为“仅微软”,为每类服务器(如Web服务器、数据库服务器)创建独立的补充策略,提高管理灵活性。
2. 管理WDAC的策略本身:通过配置策略规则选项10(“已启用:高级引导选项菜单”),可以在启动时按F3临时禁用策略,或在F8菜单中切换策略,为故障排除提供通道。
3. 处理.NET程序集和COM对象:某些应用程序依赖未签名的.NET程序集或COM组件。WDAC默认不检查这些,但可通过规则选项13(“已启用:Managed Installer”)配合Windows Defender的“受管理安装程序”功能,为通过SCCM、Intune等渠道安装的软件提供一定便利。
4. 与CI/CD管道集成:在DevOps环境中,将WDAC策略的生成和测试作为镜像构建流水线的一部分,确保生产镜像天生具备应用程序控制能力。
结论:构建服务器安全的终极壁垒
在Windows Server上配置仅运行微软签名软件的WDAC策略,是一项需要细致规划但回报极高的安全投资。它从根本上改变了安全博弈的战场,将攻击面从“所有可执行代码”缩小到“有限的被允许代码”。尽管初始部署存在兼容性挑战,但通过严谨的清单审计、充分的审核模式测试以及灵活的补充策略机制,企业可以稳步建立起这道强大的应用程序白名单防线。在勒索软件和高级持续性威胁(APT)日益猖獗的今天,结合其他安全措施(如及时更新、最小权限原则),WDAC为Windows Server提供了接近“免疫”未知恶意代码的能力,是任何追求顶级安全基线的组织不可或缺的技术组件。
