Microsoft Defender for Identity 目录服务帐户

本文章介绍了 Microsoft Defender for Identity 如何使用目录服务帐户 (DSA)。

虽然 DSA 在某些应用场景下是可选的,但我们建议你为 Defender for Identity 配置 DSA 以实现完全的安全覆盖。

例如,配置 DSA 时,DSA 用于在启动时连接到域控制器。 DSA 还可用于向域控制器查询网络流量、监视的事件和监视的 ETW 活动中看到的实体的数据

以下特性和功能都需要 DSA:

  • 使用安装在 AD FS/AD CS 服务器上的传感器时。

  • 通过对设备的 SAM-R 调用,从网络流量、事件和 ETW 活动中看到的设备请求本地管理员组的成员列表。 收集的数据可用于计算潜在的横向移动路径。

  • 访问 DeletedObjects 容器以收集有关已删除用户和计算机的信息。

  • 域和信任映射,在传感器启动时进行,然后每 10 分钟进行一次。

  • 当检测到来自其他域中实体的活动时,通过 LDAP 查询另一个域以获取详细信息。

使用单个 DSA 时,DSA 必须具有 林中所有域的读取 权限。 在不受信任的多林环境中,每个林都需要一个 DSA 帐户。

每个域中的一个传感器定义为 域同步器,负责跟踪对域中实体的更改。 例如,更改可能包括创建的对象、Defender for Identity 跟踪的实体属性等。

注意

默认情况下,Defender for Identity 最多支持 30 个凭证。 若要添加更多凭证,请联系 Defender for Identity 支持。

支持的 DSA 帐户选项

Defender for Identity 支持以下 DSA 选项:

选项 描述 配置
组托管服务帐户 gMSA(建议使用) 提供更安全的部署和密码管理。 Active Directory 管理帐户密码的创建和轮换,就像计算机帐户的密码一样,你可以控制帐户密码的更改频率。 有关更多信息,请参阅使用 gMSA 为 Defender for Identity 配置目录服务帐户
常规用户帐户 入门时易于使用,在受信任的林之间配置 读取 权限更简单,但需要额外的密码管理开销。

常规用户帐户不太安全,因为它会要求你创建和管理密码,如果密码过期并且没有为用户和 DSA 更新,则可能导致停机。
在 Active Directory 中创建一个新帐户,以用作对所有对象具有读取权限的 DSA,包括对 DeletedObjects 容器的权限。 有关详细信息,请参阅授予所需的 DSA 权限

DSA 项使用情况

本节介绍了如何使用 DSA 项,以及传感器如何在任何给定应用场景中选择 DSA 项。 传感器尝试不同,具体取决于 DSA 项的类型:

类型 描述
gMSA 帐户 传感器尝试从 Active Directory 检索 gMSA 帐户密码,然后登录到域。
常规用户帐户 传感器尝试使用配置的用户名和密码登录域。

应用以下逻辑:

  1. 传感器查找与目标域的域名完全匹配的项。 如果发现完全匹配的项,传感器将尝试使用该项中的凭证进行身份验证。

  2. 如果没有完全匹配,或者身份验证失败,传感器会使用 DNS FQDN 在列表中搜索父域的项,并尝试使用父项中的凭证进行身份验证。

  3. 如果没有父域的条目,或者身份验证失败,传感器将使用 DNS FQDN 搜索列表以获取同级域条目,并尝试使用同级条目中的凭据进行身份验证。

  4. 如果没有同辈域的项,或者身份验证失败,传感器会再次检查列表,并尝试对每个项再次进行身份验证,直到成功为止。 DSA gMSA 项的优先级高于常规 DSA 项。

DSA 的示例逻辑

本节提供了一个示例,说明当你有多个帐户(包含 gMSA 帐户和常规帐户)时,传感器会如何尝试 DSA 项。

应用以下逻辑:

  1. 传感器查找目标域的 DNS 域名(如 emea.contoso.com)和 DSA gMSA 项(如 emea.contoso.com)之间的匹配。

  2. 传感器查找目标域的 DNS 域名(如 emea.contoso.com)和 DSA 常规项 DSA(如 emea.contoso.com)之间的匹配

  3. 传感器查找目标域的根 DNS 名称(如 emea.contoso.com)和 DSA gMSA 项域名(如 contoso.com)中的匹配。

  4. 传感器查找目标域的根 DNS 名称(如 emea.contoso.com)和 DSA 常规项域名(如 contoso.com)中的匹配。

  5. 传感器查找同辈域的目标域名(如 emea.contoso.com)和 DSA gMSA 项域名(如 apac.contoso.com)。

  6. 传感器查找同辈域的目标域名(如 emea.contoso.com)和 DSA 常规项域名(如 apac.contoso.com)。

  7. 传感器对所有 DSA gMSA 项运行循环配置。

  8. 传感器对所有 DSA 常规项运行循环配置。

通过下面的配置实现此示例中显示的逻辑:

  • DSA 项

    • DSA1.emea.contoso.com
    • DSA2.fabrikam.com
  • 传感器和首先使用的 DSA 项

    域控制器 FQDN 使用的 DSA 项
    DC01.emea.contoso.com DSA1.emea.contoso.com
    DC02.contoso.com DSA1.emea.contoso.com
    DC03.fabrikam.com DSA2.fabrikam.com
    DC04.contoso.local 轮循机制

重要

如果传感器在启动时无法通过 LDAP 成功对 Active Directory 域进行身份验证,则传感器将不会进入正在运行状态,并生成运行状况问题。 有关详细信息,请参阅 Defender for Identity 运行状况问题

授予所需的 DSA 权限

DSA 要求对 Active Directory 中的所有对象(包含已删除对象容器)具有只读权限。

已删除对象容器的只读权限允许 Defender for Identity 检测 Active Directory 中的用户删除。

使用以下代码示例可以帮助你授予已删除对象容器所需的读取权限,无论是否使用 gMSA 帐户。

提示

如果要授予权限的 DSA 是组托管服务帐户 (gMSA),则必须首先创建一个安全组,将 gMSA 添加为成员,然后将权限添加到该组。 有关更多信息,请参阅使用 gMSA 为 Defender for Identity 配置目录服务帐户

# Declare the identity that you want to add read access to the deleted objects container:
$Identity = 'mdiSvc01'

# If the identity is a gMSA, first to create a group and add the gMSA to it:
$groupName = 'mdiUsr01Group'
$groupDescription = 'Members of this group are allowed to read the objects in the Deleted Objects container in AD'
if(Get-ADServiceAccount -Identity $Identity -ErrorAction SilentlyContinue) {
    $groupParams = @{
        Name           = $groupName
        SamAccountName = $groupName
        DisplayName    = $groupName
        GroupCategory  = 'Security'
        GroupScope     = 'Universal'
        Description    = $groupDescription
    }
    $group = New-ADGroup @groupParams -PassThru
    Add-ADGroupMember -Identity $group -Members ('{0}$' -f $Identity)
    $Identity = $group.Name
}

# Get the deleted objects container's distinguished name:
$distinguishedName = ([adsi]'').distinguishedName.Value
$deletedObjectsDN = 'CN=Deleted Objects,{0}' -f $distinguishedName

# Take ownership on the deleted objects container:
$params = @("$deletedObjectsDN", '/takeOwnership')
C:\Windows\System32\dsacls.exe $params

# Grant the 'List Contents' and 'Read Property' permissions to the user or group:
$params = @("$deletedObjectsDN", '/G', ('{0}\{1}:LCRP' -f ([adsi]'').name.Value, $Identity))
C:\Windows\System32\dsacls.exe $params
  
# To remove the permissions, uncomment the next 2 lines and run them instead of the two prior ones:
# $params = @("$deletedObjectsDN", '/R', ('{0}\{1}' -f ([adsi]'').name.Value, $Identity))
# C:\Windows\System32\dsacls.exe $params

有关更多信息,请参阅更改已删除对象容器的权限

通过 PowerShell 测试 DSA 权限和委派

使用以下 PowerShell 命令验证 DSA 是否没有太多权限,例如强大的管理员权限:

Test-MDIDSA [-Identity] <String> [-Detailed] [<CommonParameters>]

例如,若要检查 mdiSvc01 帐户的权限并提供完整详细信息,请运行:

Test-MDIDSA -Identity "mdiSvc01" -Detailed

有关详细信息,请参阅 DefenderForIdentity PowerShell 参考

下一步