Windows 的经过身份验证的扫描

适用于:

重要

此功能将于 2025 年 11 月底弃用,超过该日期后将不受支持。 有关此更改的详细信息,请参阅 Windows 身份验证扫描弃用常见问题解答

通过 Windows 的身份验证扫描可以在非托管 Windows 设备上运行扫描。 你可以通过 IP 范围或主机名远程定位,并通过提供Microsoft Defender 漏洞管理凭据来远程访问设备来扫描 Windows 服务。 配置后,将定期扫描目标非托管设备是否存在软件漏洞。 默认情况下,扫描将每四小时运行一次,其中包含更改此间隔的选项或仅运行一次。

注意

若要使用此功能,需要Microsoft Defender 漏洞管理独立版,或者如果你已经是计划 2 Microsoft Defender for Endpoint 客户,Defender 漏洞管理加载项。

然后,安全管理员可以在Microsoft Defender门户中查看最新安全建议并查看最近发现的目标设备的漏洞。

提示

你知道可以免费试用Microsoft Defender 漏洞管理中的所有功能吗? 了解如何 注册免费试用版

扫描程序安装

网络设备 经过身份验证的扫描类似,需要安装扫描程序的扫描设备。 如果尚未安装扫描程序,请参阅 安装扫描程序 ,了解如何下载和安装扫描程序。

注意

预先存在的已安装扫描程序无需更改。

先决条件

以下部分列出了配置对 Windows 使用经过身份验证的扫描所需的先决条件。

扫描帐户

需要扫描帐户才能远程访问设备。 这必须是 组托管服务帐户 (gMsa)

注意

建议 gMSA 帐户是仅具有所需扫描权限的最小特权帐户,并且设置为定期循环使用密码。

若要创建 gMsa 帐户,请执行以下操作:

  1. 在 PowerShell 窗口中的域控制器上,运行:

    New-ADServiceAccount -Name gmsa1 -PrincipalsAllowedToRetrieveManagedPassword scanner-win11-i$ -KerberosEncryptionType RC4, AES128, AES256 -Verbose
    
    • gmsa1 代表要创建的帐户的名称,scanner-win11-I$ 代表运行扫描程序代理的计算机名称。 只有这台计算机才能检索帐户密码。 可以提供以逗号分隔的计算机列表。
    • 可以使用 Get-ADServiceAccountSet-ADServiceAccount 修改现有帐户
  2. 若要安装 AD 服务帐户,请在扫描程序代理将使用提升的 PowerShell 窗口运行的计算机上运行:

    Install-ADServiceAccount -Identity gmsa1
    

如果 PowerShell 无法识别这些命令,则可能意味着缺少所需的 PowerShell 模块。 有关如何安装模块的说明因操作系统而异。 有关详细信息,请参阅使用组托管服务帐户入门

要扫描的设备

使用下表获取有关所需配置的指导,以及扫描帐户在要扫描的每台设备上所需的权限:

注意

以下步骤只是在每台设备上配置要扫描的权限并使用“性能监视器用户组”的建议方法之一。 还可以通过以下方式配置权限:

  • 将帐户添加到另一个用户组,并授予该组所需的所有权限。
  • 向扫描帐户显式授予这些权限。

若要配置权限并将其应用于使用组策略扫描的一组设备,请参阅 使用组策略配置一组设备

要扫描的设备要求 说明
已启用 Windows Management Instrumentation (WMI) 若要启用远程 Windows Management Instrumentation (WMI) :
  • 验证 Windows Management Instrumentation 服务是否正在运行。
  • 转到>控制面板所有控制面板项>Windows Defender 防火墙>允许的应用程序,并确保 Windows Management Instrumentation (WMI) 允许通过 Windows 防火墙。
扫描帐户是性能监视器用户组的成员 扫描帐户必须是要扫描的设备上性能监视器用户组的成员。
性能监视器用户组对根/CIMV2 WMI 命名空间具有“启用帐户”和“远程启用”权限 若要验证或启用这些权限,请执行以下操作:
  • 运行 wmimgmt.msc。
  • 右键单击“ WMI 控件 (本地) 并选择 ”属性”。
  • 转到“安全性”选项卡。
  • 选择相关的 WMI 命名空间,然后选择“ 安全性”。
  • 添加指定的组,然后选择 以允许特定权限。
  • 选择“ 高级”,选择指定的条目,然后选择 “编辑”。
  • “应用于 ”设置为“此命名空间和子空间”。
性能监视器用户组应具有 DCOM 操作的权限 若要验证或启用这些权限,请执行以下操作:
  • 运行 dcomcnfg。
  • 导航到 “组件服务>计算机>”“我的计算机”。
  • 右键单击“我的计算机”,然后选择 “属性”。
  • 转到“COM 安全性”选项卡。
  • 转到 “启动和激活权限” ,然后选择 “编辑限制”。
  • 添加指定的组,然后选择 以允许 远程激活

使用组策略配置一组设备

使用组策略,可将所需的配置以及扫描帐户所需的权限批量应用于要扫描的一组设备。

在域控制器上执行以下步骤,同时配置一组设备:

步骤 说明
创建新的组策略对象
  • 在域控制器上打开组策略管理控制台。
  • 按照以下步骤创建组策略对象
  • 创建组策略对象 (GPO) 后,右键单击 GPO 并选择“编辑”以打开组策略管理编辑器控制台并完成以下步骤。
启用 Windows Management Instrumentation (WMI) 若要启用远程 Windows Management Instrumentation (WMI) :
  • 转到“计算机配置>策略>”“Windows 设置”“>安全设置”“>系统服务”。
  • 右键单击“ Windows Management Instrumentation”。
  • 选择 “定义此策略设置 ”框,然后选择“ 自动”。
允许 WMI 通过防火墙 若要允许 Windows Management Instrumentation (WMI) 通过防火墙,
  • 转到 “计算机配置>策略>”“Windows 设置>”“安全设置>”“Windows Defender 防火墙和高级安全>入站规则”。
  • 右键单击并选择“ 新建规则”。
  • 选择 “预定义 ”,然后从列表中选择“ Windows Management Instrumentation (WMI) ”。 然后选择“下一步”。
  • 选中“ Windows Management Instrumentation (WMI-In) ”复选框。 然后选择“下一步”。
  • 选择“允许连接”。 然后选择“ 完成”。
  • 右键单击新添加的规则,然后选择 “属性”。
  • 转到“ 高级 ”选项卡并取消选中 “专用 ”和“ 公共 ”选项,因为只有 “域 ”是必需的。
授予执行 DCOM 操作的权限 若要授予执行 DCOM 操作的权限,请执行以下操作:
  • 转到“计算机配置>策略>”“Windows 设置”“>安全设置”“>本地策略>”“安全操作”。
  • 右键单击“ DCOM:安全描述符定义语言中的计算机启动限制 (SDDL) 语法 ”,然后选择“ 属性”。
  • 选择“ 定义此策略设置 ”框,然后选择 “编辑安全性”。
  • 添加要向其授予权限的用户或组,然后选择“ 远程激活”。
通过组策略运行 PowerShell 脚本,向 Root\CIMV2 WMI 命名空间授予权限:
  • 创建 PowerShell 脚本。 有关可根据需要修改的建议脚本,请参阅本文后面的 示例 PowerShell 脚本。
  • 转到 计算机配置>策略>Windows 设置>脚本 (启动/关闭) >启动
  • 转到“ PowerShell 脚本 ”选项卡。
  • 选择“ 显示文件” ,并将创建的脚本复制到此文件夹
  • 返回到脚本配置窗口,然后选择“ 添加”。
  • 输入脚本名称。

PowerShell 脚本示例

使用以下 PowerShell 脚本作为起点,通过组策略向 Root\CIMV2 WMI 命名空间授予权限:

Param ()

Process {
    $ErrorActionPreference = "Stop"
    $accountSID = "S-1-5-32-558" # Performance Monitor Users built-in group, please change or pass parameter as you wish
    $computerName = "."

    $remoteparams = @{ComputerName=$computerName}
    $invokeparams = @{Namespace="root\cimv2";Path="__systemsecurity=@"} + $remoteParams

    $output = Invoke-WmiMethod @invokeparams -Name GetSecurityDescriptor
    if ($output.ReturnValue -ne 0) {
        throw "GetSecurityDescriptor failed: $($output.ReturnValue)"
    }

    $acl = $output.Descriptor

    $CONTAINER_INHERIT_ACE_FLAG = 0x2
    $ACCESS_MASK = 0x21 # Enable Account + Remote Enable

    $ace = (New-Object System.Management.ManagementClass("win32_Ace")).CreateInstance()
    $ace.AccessMask = $ACCESS_MASK
    $ace.AceFlags = $CONTAINER_INHERIT_ACE_FLAG

    $trustee = (New-Object System.Management.ManagementClass("win32_Trustee")).CreateInstance()
    $trustee.SidString = $accountSID
    $ace.Trustee = $trustee

    $ACCESS_ALLOWED_ACE_TYPE = 0x0

    $ace.AceType = $ACCESS_ALLOWED_ACE_TYPE

    $acl.DACL += $ace.psobject.immediateBaseObject

    $setparams = @{Name="SetSecurityDescriptor";ArgumentList=$acl.psobject.immediateBaseObject} + $invokeParams

    $output = Invoke-WmiMethod @setparams
    if ($output.ReturnValue -ne 0) {
        throw "SetSecurityDescriptor failed: $($output.ReturnValue)"
    }
}

将 GPO 策略应用于设备后,将应用所有必需的设置,并且 gMSA 帐户将能够访问和扫描设备。

配置新的经过身份验证的扫描

若要配置新的经过身份验证的扫描,请执行以下操作:

  1. Microsoft Defender门户中转到“设置>”“设备发现>经过身份验证的扫描”。

  2. 选择 “添加新扫描 ”,然后选择“ Windows 身份验证扫描 ”,然后选择“ 下一步”。

    “添加新的经过身份验证的扫描”屏幕的屏幕截图

  3. 输入 扫描名称

  4. 选择 扫描设备: 用于扫描非托管设备的已载入设备。

  5. 输入 目标 (范围) : 要扫描的 IP 地址范围或主机名。 可以输入地址或导入 CSV 文件。 导入文件将覆盖任何手动添加的地址。

  6. 选择 “扫描间隔”: 默认情况下,扫描将每四小时运行一次,你可以通过选择“不重复”来更改扫描间隔或只运行一次。

  7. 选择 身份验证方法 - 有两个选项可供选择:

    • Kerberos (首选)
    • 谈判

    注意

    如果 Kerberos 失败,协商选项将回退到 NTLM。 不建议使用 NTLM,因为它不是安全协议。

  8. 输入Microsoft Defender 漏洞管理将用于远程访问设备的凭据:

    • 使用 azure KeyVault: 如果在 Azure KeyVault 中管理凭据,则可以输入 Azure KeyVault URL 和 Azure KeyVault 机密名称,供扫描设备访问以提供凭据
    • 对于 Azure KeyVault 机密值,请使用格式为“域”的 gMSA 帐户详细信息;用户名
  9. 选择“ 下一步 ”以运行或跳过测试扫描。 有关测试扫描的详细信息,请参阅 扫描和添加网络设备

  10. 选择“ 下一步 ”查看设置,然后选择“ 提交 ”以创建新的经过身份验证的扫描。

注意

由于经过身份验证的扫描程序当前使用的加密算法不符合 联邦信息处理标准 (FIPS) ,因此当组织强制使用符合 FIPS 的算法时,扫描程序无法运行。

若要允许不符合 FIPS 的算法,请在注册表中为运行扫描程序的设备设置以下值:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy 具有名为 Enabled 的 DWORD 值,值为 0x0

符合 FIPS 的算法仅用于美国联邦政府的部门和机构。

Windows API 的经过身份验证的扫描

可以使用 API 创建新的扫描并查看组织中所有现有配置的扫描。 有关更多信息,请参阅: