使用 Windows Defender 应用程序控制自动允许托管安装程序部署的应用

注意

Windows Defender 应用程序控制的某些功能仅适用于特定 Windows 版本。 详细了解 Windows Defender 应用程序控制功能可用性

Windows Defender 应用程序控制 (WDAC) 包括一个名为 托管安装程序 的选项,可帮助在强制实施应用程序控制策略时平衡安全性和可管理性。 此选项允许自动允许由指定的软件分发解决方案安装的应用程序,例如 Microsoft Configuration Manager (MEMCM) 或 Microsoft Intune。

托管安装程序如何工作?

托管安装程序使用 AppLocker 中的特殊规则集合将组织信任的二进制文件指定为应用程序安装的授权源。 当其中一个受信任的二进制文件运行时,Windows 会监视二进制文件的进程 (以及它启动的任何子进程) 并监视写入磁盘的文件。 写入文件时,它们被标记为源自托管安装程序。

然后,可以通过将“Enabled:Managed Installer”选项添加到 WDAC 策略,将 WDAC 配置为信任托管安装程序安装的文件。 设置该选项后,WDAC 将在确定是否允许运行二进制文件时检查托管安装程序源信息。 只要二进制文件没有拒绝规则,WDAC 就会允许它完全基于其托管安装程序源运行。

托管安装程序的安全注意事项

由于托管安装程序是基于启发式的机制,因此它不提供与显式允许或拒绝规则相同的安全保障。 托管安装程序最适合用户作为标准用户运行,以及所有软件都由软件分发解决方案(如 MEMCM)部署和安装的情况。

当允许托管安装程序选项时,具有管理员权限的用户或以管理员用户身份在系统上运行的恶意软件,或许能够绕过 WDAC 策略的意图。

如果托管安装程序进程在具有标准特权的用户上下文中运行,则作为标准用户运行的标准用户或恶意软件可能能够绕过 WDAC 策略的意图。

某些应用程序安装程序可能会在安装过程结束时自动运行应用程序。 如果应用程序自动运行,并且安装程序由托管安装程序运行,则托管安装程序的启发式跟踪和授权将扩展到首次运行应用程序期间创建的所有文件。 此扩展可能会导致可执行文件的意外授权。 若要避免这种情况,请确保用作托管安装程序的应用程序部署方法限制在安装过程中运行应用程序。

托管安装程序的已知限制

  • 基于托管安装程序的应用程序控制不支持自我更新的应用程序。 如果托管安装程序部署的应用程序稍后会自行更新,则更新的应用程序文件将不包括托管安装程序中的源信息,并且它们可能无法运行。 依赖托管安装程序时,必须使用托管安装程序部署和安装所有应用程序更新,或者包括规则以在 WDAC 策略中授权应用。 在某些情况下,还可以将执行自我更新的应用程序二进制文件指定为托管安装程序。 应首先对应用程序执行适当的功能和安全性审查,然后再使用此方法。

  • 某些应用程序或安装程序可能会提取、下载或生成二进制文件,并立即尝试运行它们。 托管安装程序试探法可能不允许此类进程运行的文件。 在某些情况下,还可能将执行此操作的应用程序二进制指定为托管安装程序。 应首先对应用程序执行适当的功能和安全性审查,然后再使用此方法。

  • 托管安装程序启发式不会授权内核驱动程序。 WDAC 策略必须采用规则来允许运行必要的驱动程序。

使用 AppLocker 和 WDAC 配置托管安装程序跟踪

若要启用托管安装程序跟踪,必须:

  • 创建并部署一个 AppLocker 策略,该策略定义托管安装程序规则,并为可执行文件和 DLL 启用服务强制实施。
  • 启用 AppLocker 的应用程序标识和 AppLockerFltr 服务。

注意

下面的托管安装程序 AppLocker 策略旨在安全地与任何预先存在的 AppLocker 策略合并,并且不会更改这些策略的行为。 但是,如果在当前没有任何 AppLocker 策略的设备上应用,你将看到 AppLocker - EXE 和 DLL 事件日志中生成的警告事件大大增加。 如果使用事件转发和收集服务(如 LogAnalytics),可能需要调整该事件日志的配置,以仅收集错误事件或完全停止从该日志收集事件。

注意

如果部署了其中一个收件箱 WDAC 策略,MEMCM 会自动将自身配置为托管安装程序,并启用所需的 AppLocker 组件。 如果使用任何其他方法将 MEMCM 配置为托管安装程序,则需要进行其他设置。 在 ccmsetup.exe 设置中使用 ManagedInstaller cmdline 开关。 或者,可以将其中一个 MEMCM 收件箱审核模式策略与自定义策略一起部署。

创建和部署 AppLocker 策略,该策略定义托管安装程序规则,并为可执行文件和 DLL 启用服务强制

GPO 编辑器和 AppLocker PowerShell cmdlet 中的 AppLocker 策略创建 UI 不能直接用于为托管安装程序规则集合创建规则。 但是,可以使用 XML 或文本编辑器将 EXE 规则集合策略转换为 ManagedInstaller 规则集合。

注意

只能将 EXE 文件类型指定为托管安装程序。

  1. 使用 New-AppLockerPolicy 为指定为托管安装程序的文件制定 EXE 规则。 此示例使用发布服务器规则类型为 Microsoft 的 Intune 管理扩展创建规则,但可以使用任何 AppLocker 规则类型。 可能需要重新格式化输出,以确保可读性。

    Get-ChildItem ${env:ProgramFiles(x86)}'\Microsoft Intune Management Extension\Microsoft.Management.Services.IntuneWindowsAgent.exe' | Get-AppLockerFileInformation | New-AppLockerPolicy -RuleType Publisher -User Everyone -Xml > AppLocker_MI_PS_ISE.xml
    
  2. 手动将规则集合 Type 从“Exe”更改为“ManagedInstaller”并将 EnforcementMode 设置为“AuditOnly”

    改变:

    <RuleCollection Type="Exe" EnforcementMode="NotConfigured">
    

    收件人:

    <RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
    
  3. 手动编辑 AppLocker 策略,并添加 EXE 和 DLL 规则集合,每个集合至少有一个规则。 为了确保策略可以安全地应用于可能已有活动 AppLocker 策略的系统,我们建议使用良性 DENY 规则来阻止假二进制文件,并将规则集合的 EnforcementMode 设置为 AuditOnly。 此外,由于许多安装过程依赖于服务,你需要为每个规则集合启用服务跟踪。 以下示例演示了部分 AppLocker 策略,其中配置了建议的 EXE 和 DLL 规则集合。

    <RuleCollection Type="Dll" EnforcementMode="AuditOnly" >
      <FilePathRule Id="86f235ad-3f7b-4121-bc95-ea8bde3a5db5" Name="Benign DENY Rule" Description="" UserOrGroupSid="S-1-1-0" Action="Deny">
        <Conditions>
          <FilePathCondition Path="%OSDRIVE%\ThisWillBeBlocked.dll" />
        </Conditions>
      </FilePathRule>
      <RuleCollectionExtensions>
        <ThresholdExtensions>
          <Services EnforcementMode="Enabled" />
        </ThresholdExtensions>
        <RedstoneExtensions>
          <SystemApps Allow="Enabled"/>
        </RedstoneExtensions>
      </RuleCollectionExtensions>
    </RuleCollection>
    <RuleCollection Type="Exe" EnforcementMode="AuditOnly">
      <FilePathRule Id="9420c496-046d-45ab-bd0e-455b2649e41e" Name="Benign DENY Rule" Description="" UserOrGroupSid="S-1-1-0" Action="Deny">
        <Conditions>
          <FilePathCondition Path="%OSDRIVE%\ThisWillBeBlocked.exe" />
        </Conditions>
      </FilePathRule>
      <RuleCollectionExtensions>
        <ThresholdExtensions>
          <Services EnforcementMode="Enabled" />
        </ThresholdExtensions>
        <RedstoneExtensions>
          <SystemApps Allow="Enabled"/>
        </RedstoneExtensions>
      </RuleCollectionExtensions>
    </RuleCollection>
    
  4. 验证 AppLocker 策略。 以下示例演示将 Configuration Manager 和 Microsoft Intune 设置为托管安装程序的完整 AppLocker 策略。 最终 XML 中仅包括定义了实际规则的 AppLocker 规则集合。 这种基于条件的包含可确保策略在可能已有 AppLocker 策略的设备上成功合并。

    <AppLockerPolicy Version="1">
      <RuleCollection Type="Dll" EnforcementMode="AuditOnly" >
        <FilePathRule Id="86f235ad-3f7b-4121-bc95-ea8bde3a5db5" Name="Benign DENY Rule" Description="" UserOrGroupSid="S-1-1-0" Action="Deny">
          <Conditions>
            <FilePathCondition Path="%OSDRIVE%\ThisWillBeBlocked.dll" />
          </Conditions>
        </FilePathRule>
        <RuleCollectionExtensions>
          <ThresholdExtensions>
            <Services EnforcementMode="Enabled" />
          </ThresholdExtensions>
          <RedstoneExtensions>
            <SystemApps Allow="Enabled"/>
          </RedstoneExtensions>
        </RuleCollectionExtensions>
      </RuleCollection>
      <RuleCollection Type="Exe" EnforcementMode="AuditOnly">
        <FilePathRule Id="9420c496-046d-45ab-bd0e-455b2649e41e" Name="Benign DENY Rule" Description="" UserOrGroupSid="S-1-1-0" Action="Deny">
          <Conditions>
            <FilePathCondition Path="%OSDRIVE%\ThisWillBeBlocked.exe" />
          </Conditions>
        </FilePathRule>
        <RuleCollectionExtensions>
          <ThresholdExtensions>
            <Services EnforcementMode="Enabled" />
          </ThresholdExtensions>
          <RedstoneExtensions>
            <SystemApps Allow="Enabled"/>
          </RedstoneExtensions>
        </RuleCollectionExtensions>
      </RuleCollection>
      <RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
        <FilePublisherRule Id="55932f09-04b8-44ec-8e2d-3fc736500c56" Name="MICROSOFT.MANAGEMENT.SERVICES.INTUNEWINDOWSAGENT.EXE version 1.39.200.2 or greater in MICROSOFT&reg; INTUNE&trade; from O=MICROSOFT CORPORATION, L=REDMOND, S=WASHINGTON, C=US" Description="" UserOrGroupSid="S-1-1-0" Action="Allow">
          <Conditions>
              <FilePublisherCondition PublisherName="O=MICROSOFT CORPORATION, L=REDMOND, S=WASHINGTON, C=US" ProductName="*" BinaryName="MICROSOFT.MANAGEMENT.SERVICES.INTUNEWINDOWSAGENT.EXE">
                <BinaryVersionRange LowSection="1.39.200.2" HighSection="*" />
              </FilePublisherCondition>
        </Conditions>
        </FilePublisherRule>
        <FilePublisherRule Id="6ead5a35-5bac-4fe4-a0a4-be8885012f87" Name="CMM - CCMEXEC.EXE, 5.0.0.0+, Microsoft signed" Description="" UserOrGroupSid="S-1-1-0" Action="Allow">
          <Conditions>
            <FilePublisherCondition PublisherName="O=MICROSOFT CORPORATION, L=REDMOND, S=WASHINGTON, C=US" ProductName="*" BinaryName="CCMEXEC.EXE">
              <BinaryVersionRange LowSection="5.0.0.0" HighSection="*" />
            </FilePublisherCondition>
          </Conditions>
        </FilePublisherRule>
        <FilePublisherRule Id="8e23170d-e0b7-4711-b6d0-d208c960f30e" Name="CCM - CCMSETUP.EXE, 5.0.0.0+, Microsoft signed" Description="" UserOrGroupSid="S-1-1-0" Action="Allow">
          <Conditions>
            <FilePublisherCondition PublisherName="O=MICROSOFT CORPORATION, L=REDMOND, S=WASHINGTON, C=US" ProductName="*" BinaryName="CCMSETUP.EXE">
              <BinaryVersionRange LowSection="5.0.0.0" HighSection="*" />
              </FilePublisherCondition>
            </Conditions>
          </FilePublisherRule>
        </RuleCollection>
      </AppLockerPolicy>
    
  5. 部署 AppLocker 托管安装程序配置策略。 可以导入 AppLocker 策略并使用组策略进行部署,或使用脚本通过 Set-AppLockerPolicy cmdlet 部署策略,如以下 PowerShell 命令所示。

    Set-AppLockerPolicy -XmlPolicy <AppLocker XML FilePath> -Merge -ErrorAction SilentlyContinue
    
  6. 如果通过脚本部署 AppLocker 策略,请使用 appidtel.exe 配置 AppLocker 应用程序标识服务和 AppLocker 筛选器驱动程序。

    appidtel.exe start [-mionly]
    

    如果不打算使用智能安全图 (ISG) ,请指定“-mionly”。

注意

托管安装程序跟踪将在下次运行与托管安装程序规则匹配的进程时启动。 如果预期进程已在运行,则必须重启它。

在 WDAC 策略中启用托管安装程序选项

若要为托管安装程序设置的二进制文件启用信任,必须在 WDAC 策略中指定“已启用:托管安装程序”选项。 可以通过将 Set-RuleOption cmdlet 与选项 13 结合使用来定义此设置。

下面是创建 WDAC 策略的步骤,该策略允许 Windows 启动并启用托管安装程序选项。

  1. 将DefaultWindows_Audit策略从“C:\Windows\schemas\CodeIntegrity\ExamplePolicies\DefaultWindows_Audit.xml”复制到工作文件夹中

  2. 重置策略 ID 以确保它采用多策略格式,并为其提供与示例策略不同的 GUID。 此外,为它指定一个友好名称以帮助识别。

    例如:

    Set-CIPolicyIdInfo -FilePath <XML filepath> -PolicyName "<friendly name>" -ResetPolicyID
    
  3. 设置选项 13 (Enabled:Managed Installer) 。

    Set-RuleOption -FilePath <XML filepath> -Option 13
    
  4. 部署 WDAC 策略。 请参阅 部署 Windows Defender 应用程序控制 (WDAC) 策略

注意

WDAC 策略必须包含所有系统/启动组件、内核驱动程序以及无法通过托管安装程序部署的任何其他授权应用程序的规则。

删除托管安装程序功能

若要从设备中删除托管安装程序功能,需要按照删除 AppLocker 规则:清除单个系统或远程系统上的 AppLocker 策略中的说明从设备中删除托管安装程序 AppLocker 策略。