肖文棣:Windows AD的红队实践

2024-01-30 14:24 肖文棣

作者简介:肖文棣,OWASP中国广东分会负责人、网安加社区特聘专家,现任某外企安全架构师,负责应用安全设计、管理和评审等工作。


众所周知,Windows AD是攻击者最喜欢攻击的对象,我对这个话题一直非常感兴趣,但是一直没有机会深入探讨。最近对Windows AD进行了一些研究和探索,并且利用靶场环境进行了测试,现在就和大家分享一下自己的实践。


Windows AD简介


微软的Windows AD在企业环境中,特别是Windows的企业环境中非常重要。Windows AD可以简化企业环境中设备和用户管理。比如现在企业有几百台电脑,分布在十个办公室,然后有1000个用户使用这些设备,那么我们不可能手工登录每台设备进行手工管理,这个时候我们需要将这些设备和人员都加入到Windows域中,在这个Windows域中,有个服务器叫做域控制器DC,然后所有的配置信息都存储到一个称为AD(Active Directory)的存储库中进行集中管理,这个就是Windows AD,如下图:

图片


在使用Windows AD时,所有的凭据都存储在DC中,如果用户需要使用域凭据对服务进行身份认证的时候,服务都会调用DC验证是否有效。Windows AD中主要使用两种协议进行身份认证:一种是Kerberos,是默认的协议,比较安全;另一种是NetNTLM,是出于兼容性目的而保留的旧身份协议,这个协议不是非常安全。但是两种协议都可以被利用。


靶场环境中的红队实践


上面简单介绍了Windows AD,接着我们来探讨一下Windows AD的红队实践。这里我们建立一个靶场环境。

图片


参考Kill-Chain模型:

图片


初步侦察和利用漏洞与其他红队实践一样,这里不详细描述。本次实践主要关注建立立足点、提权、内网侦察、横向移动和建立稳固连接几个过程。其中提权、内网侦察、横向移动和建立稳固连接是一个循环过程,代表攻击的不断深入,也代表攻击是分层次的。


建立立足点


利用漏洞,建立立足点,这里就是要使用各种方法攻破AD的防御,获取第一个可用的AD用户访问权限,包括使用开源情报OSINT)和网络钓鱼。这里就不重点讲述。


这里主要介绍另外两种方法:LDAP回传攻击和NetNTLM协议拦截。


(1)LDAP回传攻击


下图是LDAP协议认证的过程:

图片


所谓LDAP的回传攻击实际上就是伪造一个LDAP服务器,拦截发往正常LDAP服务器的消息。


在靶场环境中,我们通过OpenLDAP(https://www.openldap.org/)这个工具来假冒LDAP。该LDAP要进行特殊配置,使用最低的安全配置,使用明文密码登录。

图片


我们在安装OpenLDAP的攻击机器上使用Tcpdump或者Wirsharp等工具监听389的端口,就可以捕获到明文的密码。


(2)NetNTLM协议拦截


在Windows网络中,有大量服务互相通信,其中SMB负责管理网络文件共享等相关服务。如果你在网络中使用了NetNTLM协议进行认证,那么我们可以使用Responser(https: //github.com/lgandx/Responder)对NetNTLM的报文进行拦截,以获取认证中的NTLMv2-SSP的哈希值,然后利用Hashcat工具进行字典(https://github.com/kkrypt0nn/wordlists)破解。


Hashcat支持多种哈希格式,哪种哈希格式使用什么模式,具体参考https://hashcat.net/wiki/doku.php?id=example_hashes。


下图是NetNTLM协议拦截的示意图:

图片


内网侦察


建立立足点后,我们下一步是基于立足点进行内网侦察,即进行AD枚举。我们有多种方式进行AD枚举,比如使用Windows自带的管理控制台、CMD的Net命令、Powershell脚本等。这里推荐一个叫BloodHound的工具(https://github.com/BloodHoundAD/BloodHound)。


BloodHound是一个离线分析工具,它需要和Sharphound(https://github.com/BloodHoundAD/SharpHound)联合使用,我们需要先使用Sharphound导出所有的域信息,这里特别注意是Sharphound有个参数—ExcludeDCs,用于过滤掉DC的信息,降低引发告警的风险。导出的信息是ZIP压缩包,可以导入到BloodHound进行分析。


BloodHound以图形格式展示整个AD环境,如下图:

图片


通过BloodHound,我们很容易就可以发现一些隐藏的漏洞。比如用户T0_TINUS.GREEN是Tier 0 ADMINS组的成员,然后Tier 0 ADMINS组又是DOMAIN ADMINS组中的成员,也就是说用户T0_TINUS.GREEN具有域管理员权限,这是不是很惊喜,很意外。


很多人会问,攻击者是怎么从跳板机开始攻击进行横向移动的呢?这里有个BloodHound的示意图:

图片


通过分析发现,Tier 1的管理员T1_HENRY.MILLER访问了这个跳板机,并且在里面留有会话信息,也就是说获取了这个会话信息,就获取了Tier 1的管理员权限,实现提权。


从上面的分析可以看到BloodHound给了我们一个大局观,可以从AD关系网中分析出可能的横向移动路径和攻击路径,这对攻击者来说简直就是神器。


横向移动和提权


有了BloodHound的指路后,我们就可以进行横向移动和提权。下面我们进行具体实践。


我们能横向移动进行提权并最终获得DC权限是因为AD的配置有漏洞,比如不遵守最小权限原则,进行错误的权限委托。


错误的权限委托有很多种,比较典型的如下:

  • ForceChangePassword:我们能够在不知道用户当前密码的情况下设置用户的当前密码。

  • AddMembers:我们能够将用户(包括我们自己的帐户)、组或计算机添加到目标组。

  • GenericAll:我们对对象拥有完全的控制权,包括更改用户密码、注册SPN或将AD对象添加到目标组的能力。

  • GenericWrite:我们可以更新目标对象的任何不受保护的参数。例如,这可以让我们更新ScriptPath参数,这将导致用户下次登录时执行脚本。

  • WriteOwner:我们有能力更新目标对象的所有者。我们可以让自己成为所有者,从而获得对该对象的额外权限。

  • WriteDACL:我们能够将新的ACE写入目标对象的DACL。例如,我们可以编写一个ACE来授予我们的帐户对目标对象的完全控制权。

  • AllExtendedRights:我们有能力对目标对象执行与扩展AD权限相关的任何操作。例如,这包括强制更改用户密码的能力。


下面就简单介绍ForceChangePassword的例子,看BloodHound的分析:

图片


Domain Users这个用户组的用户可以有权限加入到IT Support用户组,然后IT Support用户组的用户可以强制更改T2管理员组用户的密码,也就是说我通过在跳板机中将普通用户加入到IT Support的用户组后,就可以更改T2 Admin用户的密码,从而获取了一个T2 Admin的用户账号。这个过程就是提权。


利用这个T2 Admin的用户账号,可以访问IIS服务器,然后进行进一步的移动。如果有更高级的权限的用户在这些服务器上留有会话记录,就可以利用Minikatz(https://github.com/gentilkiwi/mimikatz/)工具破解更高级用户的会话记录,并伪造该用户进行进一步访问。这就是一个循环迭代逐步深入的过程,最终获取DC的权限。因为DC的权限就可以控制整个AD,攻击者就可以为所欲为了。


建立稳固连接


进行横向移动并提权后,我们就需要建立稳固连接,这个过程也叫持久化连接。这里介绍常见的方式:

  • 黄金凭据或者白银凭据:使用Mimikatz,我们可以生成黄金凭据或者白银凭据。Mimikatz创建了一个适用于域中任何帐户的默认密码。此默认密码可用于模拟域中的任何帐户。

  • 目录服务还原模式(DSRM):DC有一个称为DSRM帐户的内部管理员帐户。该密码是在服务器升级为DC时设置的,很少更改。该密码用于在紧急情况下恢复DC。攻击者可以使用 Mimikatz提取此密码,并使用此密码获得对环境中DC的持久管理访问权限。

  • 恶意安全支持提供程序(SSP):利用SSP接口,可以添加新的SSP。我们可以添加 Mimikatz的Mimilib作为SSP,它将所有身份验证尝试的凭据记录到文件中。我们可以指定用于日志记录的网络位置,这将允许Mimilib在用户向受感染主机进行身份验证时向我们发送凭据,从而提供持久性。

  • 给特定帐户更多权限:我们还可以授予特定计算机帐户对其他计算机的管理访问权限。这在AD中通常是正常行为,因此可能逃避检测。


总结


整个Windows AD的攻击过程博大精深,涉及很多工具,值得大家进一步思考。我们研究Windows AD的红队实践,是希望蓝队能够做得更好,下面有一些建议:

1. 用户意识培训很重要,用户是最薄弱一环,要让用户不要信任可疑电子邮件,从而减少这种攻击面。

2. 限制在线的AD服务和应用程序的外网暴露,不是什么都要经过内网,通过VPN或者零信任的保护,可以很好地缩小暴露面。

3. 遵循最小权限原则,警惕权限委托操作,蓝队也可以使用BloodHound对自己的AD进行定期体检,看看是否有意外发现。

4. 密码,特别是弱密码,很容易被字典攻击,所以多因素认证非常重要,重要操作应该使用多因素认证,不要依赖密码。