Active Directory安全指南:组托管服务账户(GMSA)深度解析

本文深入探讨Active Directory中组托管服务账户(GMSA)的安全机制,包括密码管理、权限委派和攻击面分析。通过PowerShell实战演示如何识别GMSA配置风险,并提供防御建议。

组托管服务账户(GMSAs)

用作服务账户的用户账户很少更改密码。组托管服务账户(GMSAs)提供了一种更好的方法(从Windows 2012开始)。密码由AD管理并自动更改。这意味着必须明确委派安全主体才能访问GMSA的明文密码。与委派控制访问的其他领域(如LAPS)类似,需要仔细考虑应该委派谁具有访问权限。

组托管服务账户(GMSAs)的关键要点

  • GMSA密码由AD管理
  • 托管GMSA服务账户的计算机会从Active Directory请求当前密码以启动相关服务
  • 配置GMSA以允许计算机账户访问GMSA密码
  • 如果攻击者入侵任何使用GMSA托管服务的计算机,GMSA即被入侵
  • 如果攻击者入侵具有请求GMSA密码权限的账户,GMSA即被入侵

GMSA属性

组托管服务账户具有对象类"msDS-GroupManagedServiceAccount"和特定于GMSA的相关属性。这些属性包括:

  • msDS-GroupMSAMembership (PrincipalsAllowedToRetrieveManagedPassword) - 存储可以访问GMSA密码的安全主体
  • msds-ManagedPassword - 此属性包含组托管服务账户的密码信息BLOB
  • msDS-ManagedPasswordId - 此构造属性包含组MSA当前托管密码数据的密钥标识符
  • msDS-ManagedPasswordInterval - 此属性用于检索组MSA自动更改托管密码之前的天数

实验示例

为了识别Active Directory域中的GMSA,我们可以使用Active Directory PowerShell cmdlet “Get-ADServiceAccount”。

1
get-adserviceaccount -filter * -prop * | Select Name,DNSHostName,MemberOf,Created,LastLogonDate,PasswordLastSet,msDS-ManagedPasswordInterval,PrincipalsallowedtoDelegateToAccount,PrincipalsAllowedToRetrieveManagedPassword,msDS-ManagedPassword,ServicePrincipalName | Sort Name

在我的实验环境(模拟真实世界AD环境)中,我们注意到域管理员中有一个GMSA。让我们深入研究这个GMSA。

Citrix GMSA配置为允许组"Citrix04"获取GMSA密码(属性"PrincipalsAllowedToRetrieveManagedPassword")。现在,让我们查看该组的成员资格。

该组中有一个用户账户,这意味着该用户账户(AdminJackson)的入侵将导致Citrix GMSA密码的泄露,进而导致Active Directory的入侵,因为GMSA是域管理员成员。

为了让获取此信息更容易,我编写了一个名为Get-GMSADetail的PowerShell脚本,使用Active Directory PowerShell模块捕获此信息。这添加了一个名为"PasswordAccessPrincipalString"的新属性,该属性是具有提取密码权限的主体列表。

结果显示在此处:

结论

作为此实验室练习的一部分,我们了解到如果GMSA是特权组(如域管理员)的成员,入侵具有提取GMSA明文密码权限(属性"PrincipalsAllowedToRetrieveManagedPassword")的账户可以利用GMSA权限(如入侵Active Directory)。此外,如果我们入侵了具有提取GMSA密码能力的计算机账户之一,那么我们可以从计算机中转储密码。

有关攻击GMSA的更多信息,请阅读ADSecurity文章"攻击Active Directory组托管服务账户(GMSAs)"。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计