用于在 Active Directory 环境中发现基于资源的约束委派攻击路径的工具
几乎完全基于两篇精彩的博客文章:"Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory"(作者 Elad Shamir)和 "A Case Study in Wagging the Dog: Computer Takeover"(作者 harmj0y)。请阅读这两篇博客文章以真正理解这里发生的一切。说实话,我自己也只是一知半解(这已经很慷慨了)。
我不太懂 C#,因此通过阅读 SharpSploit 和 SharpView 的源代码,学会了如何在 C# 中与域通信。
Get-RBCD-Threat 会查询当前域中的所有 Active Directory 用户、组(排除特权组如 "Domain Admins" 和 "BUILTIN\Administrators")以及计算机对象,并编译出它们的 SID 列表。然后 Get-RBCD-Threaded 会查询域中计算机对象上的所有 DACL。对于 DACL 中的每个 ACE,会检查用户/组/计算机 SID 是否拥有对计算机对象的 "GenericAll"、"GenericWrite"、"WriteOwner" 或 "WriteDacl" 权限,或者是否拥有对 ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity 属性(GUID:3f78c3e5-f79a-46bd-a0b8-9d18116ddc79)的 "WriteProp" 权限。如果拥有,那么恭喜,你已经在迈向基于资源的约束委派攻击的路上了!
在 Visual Studio 中编译。该工具使用 Parallel.ForEach 加速搜索 DACL 对象,因此需要 .NET v4 或更高版本。
-u|-username=,要验证的用户名 -p|-password=,用户的密码 -d|-domain=,要验证的完全限定域名 -s|-searchforest,通过信任关系发现域和森林。枚举所有域和森林 -pwdlastset=,根据 pwdLastSet 过滤计算机,移除过时的计算机对象。如果设置为 90,将过滤掉 pwdLastSet 日期超过 90 天的计算机对象 -i|-insecure,如果 LDAPS 导致连接问题,强制使用不安全的 LDAP 连接 -o|-outputfile=,输出到 CSV 文件。提供文件的完整路径和文件名 -h|-?|-help,显示帮助选项
现在可以指定要验证的用户名、密码和域。如果 u/p/d 选项为空,Get-RBCD-Threaded 将尝试使用当前用户上下文验证到域。
-o 将输出到 CSV 文件。提供文件完整路径和文件名以保存输出。
默认搜索使用端口 636 强制使用 LDAPS。这可能会导致问题。如果收到关于服务器不可用或类似的错误,请尝试使用 "-i" 标志从连接字符串中移除 636 端口。
已添加 "pwdLastSet" 作为过滤选项。在大型环境中,可能会有大量过时的计算机对象,这些对象不再作为 ACL 中的 "目标" 对象存在,并且(至少据我所知)无法用于 RBCD 攻击。将 pwdLastSet 设置为天数。例如:"-pwdlastset=90" 会从结果中过滤掉 pwdLastSet 日期早于或等于当前日期 90 天的计算机对象。
在包含 2 万多个用户、组和计算机(总计超过 6 万个对象)的环境中测试。Get-RBCD-Thread 大约需要 60 秒完成。相比之下,我拼凑的 PowerView 命令(见这个 gist)执行类似搜索需要数小时且从未完成。
该工具不会为您执行委派攻击。您需要阅读 Elad Shamir 和 harmj0y 的博客来了解如何做到这一点。该工具仅帮助您发现可能用于 RBCD 攻击的目标。
来自我的 AD 实验环境的用法示例:

该工具仅使用 LDAP 查询来查询 Active Directory,这可能不易被检测。网络流量可能用于检测大量 LDAP 查询/到一个系统的流量。
另一种可能的检测方法是使用蜜罐账户。思路是创建一个某些用户/组具有写入权限的计算机对象。RBCD 攻击依赖于修改计算机对象,然后将 Kerberos 票证委派给它。蜜罐计算机对象的可能检测点包括:
我制作这个工具是为了在渗透测试中帮助自己。然而,防御者/蓝队/系统管理员可以轻松地使用它来发现环境中的弱点,并(希望)采取措施加以修复。