允许在Intune管理的 S 模式设备上使用业务线 Win32 应用

注意

Windows Defender应用程序控制 (WDAC) 的某些功能仅在特定的 Windows 版本上可用。 有关详细信息,请参阅Windows Defender应用程序控制功能可用性

可以使用Microsoft Intune在 S 模式设备Intune管理的Windows 10上部署和运行通常在 S 模式下阻止的关键 Win32 应用程序和 Windows 组件。 例如,PowerShell.exe。

使用 Intune,可以使用Windows Defender应用程序控制 (WDAC 配置托管 S 模式设备) 补充策略,该策略扩展 S 模式基本策略以授权组织使用的应用。 此功能将 S 模式安全态势从“Microsoft 已验证每个应用”更改为“Microsoft 或你的组织已验证每个应用”。

有关此功能的概述和简要演示,请参阅此视频:

策略授权过程

策略授权流的基本示意图。

在 S 模式设备上扩展Intune托管Windows 10上的 S 模式基本策略的常规步骤是生成补充策略、对该策略签名、将签名的策略上传到Intune,并将其分配给用户或设备组。 由于需要访问 PowerShell cmdlet 才能生成补充策略,因此应在非 S 模式设备上创建和管理策略。 将策略上传到Intune后,在更广泛地部署策略之前,将其分配给 S 模式设备的单个测试Windows 10,以验证预期功能。

  1. 使用 WDAC 工具生成补充策略。

    此策略扩展了 S 模式基本策略,以授权更多应用程序。 允许运行 S 模式基本策略或补充策略授权的任何内容。 补充策略可以指定文件路径规则、受信任的发布者等。

    有关创建补充策略的详细信息,请参阅 部署多个 WDAC 策略。 有关要为策略创建的正确规则类型的详细信息,请参阅 部署 WDAC 策略规则和文件规则

    以下说明是创建 S 模式补充策略的基本集:

    • 使用 New-CIPolicy 创建新的基本策略。

      New-CIPolicy -MultiplePolicyFormat -ScanPath <path> -UserPEs -FilePath "<path>\SupplementalPolicy.xml" -Level FilePublisher -Fallback SignedVersion,Publisher,Hash
      
    • 使用 Set-CIPolicyIdInfo 将其更改为补充策略。

      Set-CIPolicyIdInfo -SupplementsBasePolicyID 5951A96A-E0B5-4D3D-8FB8-3E5B61030784 -FilePath "<path>\SupplementalPolicy.xml"
      

      对于补充 S 模式基本策略的策略,请使用 -SupplementsBasePolicyID 5951A96A-E0B5-4D3D-8FB8-3E5B61030784。 此 ID 是 S 模式策略 ID。

    • 使用 Set-RuleOption 将策略置于强制模式。

      Set-RuleOption -FilePath "<path>\SupplementalPolicy.xml>" -Option 3 -Delete
      

      此命令删除“审核模式”限定符。

    • 由于要对策略进行签名,必须授权用于对策略进行签名的签名证书。 (可选)还可以授权一个或多个额外的签名者,这些签名者可用于将来对策略的更新进行签名。 整个流程的下一步是 签署策略,并对其进行更详细的描述。

      若要将签名证书添加到 WDAC 策略,请使用 Add-SignerRule

      Add-SignerRule -FilePath <policypath> -CertificatePath <certpath> -User -Update
      
    • .bin使用 ConvertFrom-CIPolicy 转换为 。

      ConvertFrom-CIPolicy -XmlFilePath "<path>\SupplementalPolicy.xml" -BinaryFilePath "<path>\SupplementalPolicy.bin>
      
  2. 对策略进行签名。

    补充 S 模式策略必须经过数字签名。 若要对策略进行签名,请使用组织的自定义公钥基础结构 (PKI) 。 有关使用内部 CA 进行签名的详细信息,请参阅 为 WDAC 创建代码签名证书

    签名后,将策略重命名为 {PolicyID}.p7b。 从补充策略 XML 获取 PolicyID

  3. 使用 Microsoft Intune 部署已签名的补充策略。

    转到Microsoft Intune门户,转到“客户端应用”页,然后选择“S 模式补充策略”。 将已签名的策略上传到Intune,并将其分配给用户或设备组。 Intune为租户和特定设备生成授权令牌。 然后,Intune将相应的授权令牌和补充策略部署到分配的组中的每个设备。 这些令牌和策略共同扩展了设备上的 S 模式基础策略。

注意

更新补充策略时,请确保新版本号严格大于上一个版本号。 Intune不允许使用相同的版本号。 有关设置版本号的详细信息,请参阅 Set-CIPolicyVersion

通过 Intune 部署应用的标准过程

通过 Intune 部署应用的基本关系图。

有关打包已签名目录和应用部署的现有过程的详细信息,请参阅 Microsoft Intune 中的 Win32 应用管理

可选:使用目录部署应用的过程

使用目录部署应用的基本关系图。

补充策略可用于大幅放宽 S 模式基本策略,但这样做时必须考虑一些安全权衡。 例如,可以使用签名者规则信任外部签名者,但该规则授权由该证书签名的所有应用,其中可能包括你不希望允许的应用。

Intune具有使用已签名目录更轻松地授权现有应用程序的功能,而不是向组织外部的签名者授权。 此功能不需要重新打包或访问源代码。 当你不想信任可能共享同一签名证书的所有应用时,它适用于可能未签名甚至已签名的应用。

基本过程是使用包检查器为每个应用生成目录文件,然后使用自定义 PKI 对目录文件进行签名。 若要在补充策略中授权目录签名证书,请使用 Add-SignerRule PowerShell cmdlet,如 策略授权过程的步骤 1 前面所示。 之后,使用标准过程通过前面概述Intune部署应用。 有关生成目录的详细信息,请参阅 部署目录文件以支持 WDAC

注意

每次应用更新时,都需要部署更新的目录。 尽量避免对自动更新的应用程序使用目录文件,并指示用户不要自行更新应用程序。

示例策略

以下策略是允许内核调试程序、PowerShell ISE 和注册表编辑器的示例。 它还演示如何指定组织的代码签名和策略签名证书。

<?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy" PolicyType="Supplemental Policy">
  <VersionEx>10.0.0.0</VersionEx>
  <PlatformID>{2E07F7E4-194C-4D20-B7C9-6F44A6C5A234}</PlatformID>
  <!--Standard S mode GUID-->
  <BasePolicyID>{5951A96A-E0B5-4D3D-8FB8-3E5B61030784}</BasePolicyID>
  <!--Unique policy GUID-->
  <PolicyID>{52671094-ACC6-43CF-AAF1-096DC69C1345}</PolicyID>
  <!--EKUS-->
  <EKUs />
  <!--File Rules-->
  <FileRules>
    <!--Allow kernel debuggers-->
    <Allow ID="ID_ALLOW_CBD_0" FriendlyName="cdb.exe" FileName="CDB.Exe" />
    <Allow ID="ID_ALLOW_KD_0" FriendlyName="kd.exe" FileName="kd.Exe" />
    <Allow ID="ID_ALLOW_WINDBG_0" FriendlyName="windbg.exe" FileName="windbg.Exe" />
    <Allow ID="ID_ALLOW_MSBUILD_0" FriendlyName="MSBuild.exe" FileName="MSBuild.Exe" />
    <Allow ID="ID_ALLOW_NTSD_0" FriendlyName="ntsd.exe" FileName="ntsd.Exe" />
    <!--Allow PowerShell ISE and Registry Editor-->
    <Allow ID="ID_ALLOW_POWERSHELLISE_0" FriendlyName="powershell_ise.exe" FileName="powershell_ise.exe" />
    <Allow ID="ID_ALLOW_REGEDIT_0" FriendlyName="regedit.exe" FileName="regedit.exe" />
  </FileRules>
  <!--Signers-->
  <Signers>
    <!--info of the certificate you will use to do any code/catalog signing-->
    <Signer ID="EXAMPLE_ID_SIGNER_CODE" Name="Example Code Signing Certificate Friendly Name">
      <CertRoot Type="TBS" Value="<value>" />
    </Signer>
    
    <!--info of the certificate you will use to sign your policy-->
    <Signer ID="EXAMPLE_ID_SIGNER_POLICY" Name="Example Policy Signing Certificate Friendly Name">
      <CertRoot Type="TBS" Value="<value>" />
    </Signer>
  </Signers>
  <!--Driver Signing Scenarios-->
  <SigningScenarios>
    <SigningScenario Value="131" ID="ID_SIGNINGSCENARIO_KMCI" FriendlyName="Example Name">
      <ProductSigners />
    </SigningScenario>
    <SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_UMCI" FriendlyName="Example Name">
      <ProductSigners>
        <AllowedSigners>
          <AllowedSigner SignerId="EXAMPLE_ID_SIGNER_CODE" />
        </AllowedSigners>
        <FileRulesRef>
          <FileRuleRef RuleID="ID_ALLOW_CBD_0" />
          <FileRuleRef RuleID="ID_ALLOW_KD_0" />
          <FileRuleRef RuleID="ID_ALLOW_WINDBG_0" />
          <FileRuleRef RuleID="ID_ALLOW_MSBUILD_0" />
          <FileRuleRef RuleID="ID_ALLOW_NTSD_0" />
          <FileRuleRef RuleID="ID_ALLOW_POWERSHELLISE_0" />
          <FileRuleRef RuleID="ID_ALLOW_REGEDIT_0" />
        </FileRulesRef>
      </ProductSigners>
    </SigningScenario>
  </SigningScenarios>
  <!--Specify one or more certificates that can be used to sign updated policy-->
  <UpdatePolicySigners>
    <UpdatePolicySigner SignerId="EXAMPLE_ID_SIGNER_POLICY" />
  </UpdatePolicySigners>
  <!--Specify one or more codesigning certificates to trust-->
  <CiSigners>
    <CiSigner SignerId="EXAMPLE_ID_SIGNER_CODE" />
  </CiSigners>
  <!-- example remove core isolation a.k.a. Hypervisor Enforced Code Integrity (HVCI) options, consider enabling if your system supports it-->
  <HvciOptions>0</HvciOptions>
  <Settings>
    <Setting Provider="PolicyInfo" Key="Information" ValueName="Name">
      <Value>
        <String>Example Policy Name</String>
      </Value>
    </Setting>
    <Setting Provider="PolicyInfo" Key="Information" ValueName="Id">
      <Value>
        <String>Example-Policy-10.0.0.0</String>
      </Value>
    </Setting>
  </Settings>
</SiPolicy>

策略删除

若要将用户还原到未修改的 S 模式策略,请从接收该策略的目标Intune组中删除一个或多个用户。 此操作会触发从设备中删除策略和授权令牌。

还可以通过Intune删除补充策略。

<?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy" PolicyType="Supplemental Policy">
  <VersionEx>10.0.0.1</VersionEx>
  <PlatformID>{2E07F7E4-194C-4D20-B7C9-6F44A6C5A234}</PlatformID>
  <BasePolicyID>{5951A96A-E0B5-4D3D-8FB8-3E5B61030784}</BasePolicyID>
  <PolicyID>{52671094-ACC6-43CF-AAF1-096DC69C1345}</PolicyID>
  <Rules>
  </Rules>
  <!--EKUS-->
  <EKUs />
  <!--File Rules-->

  <!--Signers-->
  <Signers>
    <!--info of the certificate you will use to sign your policy-->
    <Signer ID="EXAMPLE_ID_SIGNER_POLICY" Name="Example Policy Signing Certificate Friendly Name">
      <CertRoot Type="TBS" Value="<value>" />
    </Signer>
  </Signers>
  <!--Driver Signing Scenarios-->
  <SigningScenarios>
    <SigningScenario Value="131" ID="ID_SIGNINGSCENARIO_KMCI" FriendlyName="KMCI">
      <ProductSigners>
      </ProductSigners>
    </SigningScenario>
    <SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_UMCI" FriendlyName="UMCI">
      <ProductSigners>
      </ProductSigners>
    </SigningScenario>
  </SigningScenarios>
  <UpdatePolicySigners>
    <UpdatePolicySigner SignerId="EXAMPLE_ID_SIGNER_POLICY" />
  </UpdatePolicySigners>
  <!-- example remove core isolation a.k.a. Hypervisor Enforced Code Integrity (HVCI) options, consider enabling if your system is supported-->
  <HvciOptions>0</HvciOptions>
  <Settings>
    <Setting Provider="PolicyInfo" Key="Information" ValueName="Name">
      <Value>
        <String>Example Policy Name - Empty</String>
      </Value>
    </Setting>
    <Setting Provider="PolicyInfo" Key="Information" ValueName="Id">
      <Value>
        <String>Example-Policy-Empty-10.0.0.1</String>
      </Value>
    </Setting>
  </Settings>
</SiPolicy>

勘误表

如果 S 模式设备中的Windows 10具有策略授权令牌和补充策略从 1909 更新回滚到 1903 内部版本,则在下次刷新策略之前,它不会还原锁定 S 模式。 若要立即更改锁定的 S 模式状态,IT 专业人员应删除 %SystemRoot%\System32\CI\Tokens\Active 中的任何令牌。