组托管服务账户(GMSAs)
在Windows Server 2012时代引入的组托管服务账户(GMSAs),为传统服务账户提供了一种更优的管理方式。传统服务账户的密码很少更改,而GMSA则由Active Directory管理并自动轮换密码。这意味着,必须明确委派安全主体才能访问GMSA的明文密码。与LAPS等其他需要委派控制的领域类似,确定谁应被委派访问权限需要仔细考量。
组托管服务账户(GMSAs)的关键要点
- GMSA的密码由AD管理。
- 托管GMSA服务账户的计算机会从Active Directory请求当前密码以启动相关服务。
- 需将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。我们来深入了解一下。
该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密码的计算机账户,那么我们就可以从该计算机转储密码。
有关攻击GMSAs的更多信息,请阅读ADSecurity文章《攻击Active Directory组托管服务账户(GMSAs)》。