回归最本质的信息安全

如何利用 SID History 创建域控权限后门?

2017年7月3日发布

15,320
1
0

导语:本文的内容描述了一种方法,通过该方法,攻击者可以在拥有域管理级别的权限的5分钟后,就可以持续的对Active Directory进行管理访问。

本文的内容描述了一种方法,通过该方法,攻击者可以在拥有域管理级别的权限的5分钟后,就可以持续的对Active Directory进行管理访问。

我在拉斯维加斯举办的DEF CON 23(2015年)峰会上介绍了这种AD权限持久的方法。

完整的活动目录权限持久的技巧文章列表

SID历史记录是支持迁移方案的属性。每个用户帐户都有一个关联的安全标识符(SID),用于跟踪安全主体和连接到资源时的帐户及访问权限。SID历史记录允许另一个帐户的访问被有效的克隆到另一个帐户。这是非常有用的,其目的是确保用户在从一个域移动(迁移)到另一个域时能保留原有的访问权限。由于在创建新帐户时用户的SID会发生更改,旧的SID需要映射到新的帐户。当域A中的用户迁移到域B时,将在DomainB中创建新的用户帐户,并将DomainA用户的SID添加到DomainB的用户帐户的SID历史记录属性中。这样就可以确保DomainB用户仍可以访问DomainA中的资源。

其中有趣的部分是SID历史在同一个域中的作用与SID在跨越多个域的同一个林中的是相同的,这意味着DomainA中的常规用户帐户可以包含DomainA 的SID,如果DomainA 的SID用于特权帐户或组,就可以授予常规用户帐户域管理员权限,而不需要成为域管理员组的成员。

注意:域中的常规用户可以在其Active Directory林中的其他域中的SID历史记录中包含企业管理员SID,从而将用户帐户的权限“升级”为域或林的管理员权限,这对林中的所有域都有效。如果你没有启用SID筛选(也称为隔离区)的林信任,则可以从另一个林中注入SID,并在进行身份验证后将其用于访问评估时将其添加到用户令牌。

Mimikatz支持SID历史注入到任何用户帐户(需要域管理员或等效的权限)。在这种情况下,攻击者创建用户帐户“bobafett”,并将该域的默认管理员帐户“ADSAdministrator”(RID 500)添加到帐户的SID历史记录属性中。

SneakyPersistence-AddSIDHistory-BobaFett-ADSADministrator.png

当bobafett帐户登录时,与该帐户相关联的所有SID都将添加到用于确定对资源的访问权限的用户令牌中。与帐户相关联的SID是用户的SID,用户是其成员的组SID(包括组成员的组)和SID历史记录中包含的SID。

使用PowerShell Active Directory cmdlet“Get-ADUser”,我们可以看到没有分配给bobafett帐户的组成员身份,尽管它在SIDHistory(ADSAdministrator帐户)中具有其SID。

SneakyPersistence-AddSIDHistory-GetUSerInfo-BobaFett.png

当bobafett登录时,将对与该帐户相关联的SID进行评估,并根据这些SID来确定访问权限。由于bobafett帐户与ADSAdministrator帐户(RID 500)相关联,因此,bobafett帐户具有ADSAdministrator帐户的所有访问权限,包括域管理员权限。

利用bobafett用户帐户和通过SID历史授予的权限,可以使用PowerShell远程处理从域控制器中提取KRBTGT帐户密码数据。

SneakyPersistence-AddSIDHistory-BobaFett-Exploit-PS-Krbtgt.png

检测方法

检测SID历史记录帐户提权的最佳方法是枚举所有具有SID历史记录属性的用户的数据,并标记包含同一域*中的SID的用户。如果用户尚未迁移,你可以使用SIDHistory属性中的数据来搜索所有用户。这就是为什么要在迁移完成后清除SID历史记录(并将用户添加到正确的组以获得所需的资源的访问权限)的原因。

PowerShell AD Cmdlet“Get-ADUser”对于检测“同一域的SID历史记录”非常有用:

# Detect Same Domain SID History Import-Module ActiveDirectory [string]$DomainSID = ( (Get-ADDomain).DomainSID.Value )
Get-ADUser -Filter “SIDHistory -Like ‘*'” -Properties SIDHistory | ` Where { $_.SIDHistory -Like “$DomainSID-*” }

下图显示了运行“相同域的SIDHistory”检测PowerShell脚本的结果。请注意,用户的SIDHistory属性中的SID以“500”结尾,默认的域管理员帐户是 Administrators, Domain Admins, Schema Admins 和Enterprise Admins这些用户组的成员。

SneakyPersistence-SIDHistory-BothanSpy-SIDHistory-PowerShell-SameDomainDetection.jpg

*注意:在多个域的林中,建议在林中的每个域以及受信任的域或林中查找管理组SID(和成员帐户SID)。

通过域控制器事件进行检测

使用以下事件ID进行日志记录可以检测出成功修改或尝试修改SIDHistory属性却失败的操作:

在帐户管理下配置子类别审核,并在域控制器上的“审核用户帐户管理”(成功)中选择以下事件ID:

·  4765:SID历史记录被添加到一个帐户。

·  4766:尝试将SID历史记录添加到帐户的失败事件。

DC-Audit-AdvancedAuditing-Config-GPO-768x853.jpg

本文翻译自:https://adsecurity.org/?p=1772,如若转载,请注明来源于嘶吼: http://www.4hou.com/penetration/5476.html

点赞 0
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

丝绸之路

丝绸之路

嘶吼认证-特约作者/译者

发私信

发表评论

    tarcisa 2017-07-05 10:55

    感觉这个类似以前的克隆管理员账户欸