组托管服务账户(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”。
|
|
在我的实验环境(模拟真实世界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)"。