作者简介:肖文迪,OWASP中国广东分公司负责人,网络安全Plus社区特聘专家,目前是一家外资公司的安全架构师,负责应用安全设计、管理和审查。众所周知,Windows AD 是攻击者最喜欢的目标,我一直对这个话题很感兴趣,但我还没有机会深入研究**。 最近,我对Windows AD做了一些研究和探索,并在射击场环境中进行了测试,所以我想和大家分享一下我自己的实践。
Microsoft 的 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的红队做法。 在这里,我们设置了一个射击场环境。
参考杀伤链模型
与其他红队做法一样,初步侦察和利用漏洞,此处不作详细描述。 这种做法主要集中在建立立足点、提升权限、内网侦察、横向移动和建立牢固连接的过程。 其中,权力升级、内网侦察、横向移动、建立稳固连接是一个循环过程,代表着攻击的不断深化,也意味着攻击是有层次的。
建立立足点
利用漏洞和建立立足点就是使用各种方法来突破 AD 的防御并访问第一个可用的 AD 用户,包括使用开源情报 (OSINT) 和网络钓鱼。 我不会在这里重点介绍它。
在这里,我们介绍另外两种方法:LDAP 回程攻击和 NetNTLM 拦截。
(1) LDAP回程攻击
下图显示了LDAP协议身份验证的过程:
所谓的LDAP回程攻击实际上是伪造的LDAP服务器,用于拦截发送到普通LDAP服务器的消息。
在范围环境中,我们使用 OpenLDAP(一种伪造 LDAP 的工具。 LDAP 需要专门配置,使用最低安全配置,并使用明文密码登录。
我们可以使用 tcpdump 或 wirsharp 等工具在安装了 OpenLDAP 的攻击机器上监听端口 389,并且可以捕获明文密码。
(2) NetNTLM协议拦截
在 Windows 网络中,有大量服务相互通信,SMB 负责管理相关服务,例如网络文件共享。 如果在网络中使用NetNTLM协议进行认证,那么我们可以使用responser(https:)拦截NetNTLM数据包,获取认证中NTLMV2-SSP的哈希值,然后使用hashcat工具进行字典(cracking.
HashCat 支持多种哈希格式,哪种哈希格式使用什么模式,详见 HashCat。
下图是 netntlm 协议拦截的示意图:
Intranet 侦察
建立立足点后,下一步就是基于立足点进行内网侦察,即进行AD枚举。 做AD枚举的方法有很多种,比如使用Windows自带的管理控制台、cmd的net命令、PowerShell脚本等。 这是一个叫做猎犬的工具(
Bloodhound 是一个离线分析工具,它需要和 SharpHound 配合使用(,我们需要先使用 SharpHound 导出所有域信息,这里需要注意的是 SharpHound 有一个参数——excludedCS,用于过滤掉 DC 信息,降低报警风险。 导出的信息是一个 zip 存档,可以导入到 Bloodhound 中进行分析。
Bloodhound 以图形格式显示整个 AD 环境,如下图所示:
使用 Bloodhound,很容易发现一些隐藏的漏洞。 例如,用户 t0 tinusGreen 是 Tier 0 Admins 组的成员,而 Tier 0 Admins 组又是 Domain Admins 组的成员,即用户 T0 TinusGreen拥有域管理员权限,这并不奇怪,非常出乎意料。
很多人会问,攻击者是如何从跳转服务器发起攻击并横向移动的? 这是 Bloodhound 的示意图:
通过分析发现,T1 Henry,Tier 1 的管理员Miller 访问了跳转服务器,并在其中留下了会话信息,即在获取到会话信息后,获得了 Tier 1 的管理员权限,实现了权限的升级。
从上面的分析可以看出,Bloodhound 给了我们一个大局,可以从 AD 网络分析可能的横向移动路径和攻击路径,这简直是攻击者的神器。
横向移动和升级
在 Bloodhound 的指导下,我们可以横向移动并提出权利。 让我们付诸实践。
我们可以横向移动提升权限,最终获得 DC 权限,因为 AD 配置存在漏洞,例如不遵守最小权限原则和错误地委派权限。
错误权限委派的类型有很多种,典型的如下:
ForceChangePassword:我们可以在不知情的情况下设置用户的当前密码。
AddMembers:我们可以将用户(包括我们自己的帐户)、组或计算机添加到目标组。
GenericAll:我们可以完全控制对象,包括更改用户密码、注册 SPN 或将 AD 对象添加到目标组的能力。
genericwrite:我们可以将任何未受保护的参数更新到目标对象。 例如,这允许我们更新 scriptpath 参数,这将导致脚本在用户下次登录时执行。
writeowner:我们可以更新目标对象的所有者。 我们可以让自己成为所有者,从而获得对对象的额外权限。
WriteDACL:我们能够将一个新的 ace 写入目标对象的 DACL。 例如,我们可以编写一个 ace 来授予我们的帐户对目标对象的完全控制权。
AllExtendedRights:我们可以对目标对象执行与扩展 AD 权限相关的任何操作。 例如,这包括强制更改用户密码的能力。
下面是 ForceChangePassword 的简短示例,请参阅 Bloodhound 的分析:
域用户组的用户可以有加入IT支持用户组的权限,然后IT支持用户组的用户可以强行修改T2管理员组中用户的密码,也就是说,我可以通过在跳转机中将普通用户添加到IT支持用户组来修改T2管理员用户的密码, 以便获得 T2 管理员用户帐户。此过程称为升级。
使用此 T2 管理员用户帐户,可以访问 IIS 服务器,然后进行进一步的移动。 如果具有更高级权限的用户在这些服务器上具有会话记录,则可以使用 minikatz 工具破解更高级用户的会话记录并伪造该用户以供进一步访问。 这是一个迭代和逐步深入推进的过程,最终获得DC的许可。 由于 DC 有权控制整个 AD,因此攻击者可以为所欲为。
建立稳固的连接
在横向移动并提升重物后,我们需要建立一个稳固的连接,这个过程称为持久连接。 以下是常见的方法:
凭证或凭证:使用 mimikatz,我们可以生成凭证或凭证。 Mimikatz 创建了一个默认密码,该密码适用于域中的任何帐户。 此默认密码可用于模拟域中的任何帐户。
目录服务还原模式 (DSRM) :d C 有一个称为 DSRM 帐户的内部管理员帐户。 此密码是在服务器升级到 DC 时设置的,很少更改。 此密码用于在紧急情况下恢复 DC。 攻击者可以使用 Mimikatz 提取此密码,并使用此密码获取对环境中 DC 的持久管理访问权限。
恶意安全支持提供程序 (SSP):SSP 接口允许您添加新的 SSP。 我们可以将 mimilib by mimikatz 添加为 ssp,它将所有身份验证尝试的凭据记录到文件中。 我们可以指定一个用于日志记录的网络位置,这将允许 mimilib 在用户向受感染的主机进行身份验证时向我们发送凭据,从而提供持久性。
为特定帐户授予更多权限:我们还可以授予特定计算机帐户对其他计算机的管理访问权限。 这通常是AD的正常行为,因此可能会逃避检测。
整个Windows AD攻击过程广泛而深刻,涉及多种工具,值得进一步思考。 我们正在研究 Windows AD 的红队做法,希望蓝队可以做得更好,这里有一些建议:
1.用户意识培训很重要,用户是最薄弱的环节,不信任用户信任可疑邮件来减少这种攻击面。
2.限制AD服务和应用对外网的暴露,不是所有的东西都要通过内网,通过VPN或零信任保护,暴露面可以很好的减少。
3.蓝队遵循最小权限原则,警惕委托权限操作,还可以使用寻血猎犬对自己的AD进行定期检查,看看是否有任何意外发现。
4.密码,尤其是弱密码,很容易被字典攻击,所以多因素认证非常重要,重要的操作应该使用多因素认证,不要依赖密码。