简述
原文:https://blog.zsec.uk/path2da-pt1/ 作者:ANDY GILL 标题:Build, Attack, Defend, Fix – Paving the way to DA 发布日期:2020年4月10日
虽然我们大多数攻防安全领域的人在做评估的时候,都喜欢弄域名管理员(DA)。有多少人知道这个问题是如何发生的,如何防御,如何正确补救? 虽然我们大多数攻防安全领域的人在做评估的时候,都喜欢弄域名管理员(DA)。有多少人知道这个问题是如何发生的,如何防御,如何正确补救?好吧,这个博客系列就是为你准备的;计划是看看这五种常见的技术中的每一种,对每一种技术进行深入的研究,看看创造漏洞,然后利用它,在里面添加一些防御的检测和响应,然后最后对解决上述的问题! 大多数内部约定的主要目标是证明访问权,有时还利用这种访问权来获得进一步的收益。有时,根据环境设置,这可能是一条具有挑战性的道路,因此接下来的这些技术值得寻找,以帮助你模拟攻击者。 这些技术是: · Passwords in SYSVOL also known as GPP Passwords · Kerberoasting/ASREP Roasting · Golden Ticket/Pass the hash/Pass the ticket · LLMNR Spoofing · Passwords inside files 虽然这并不是域管理方式的明确列表,但它们有时是最常见的路径。并不是所有的都会出现在一个交战中,但是它们经常会被连锁!
因此,在这个系列中的所有这些攻击,计划是讨论如何将问题引入环境,向你展示如何重新创建它并解释为什么它是一个问题。然后转向攻击它,然后防御/修复它。
这个环境的实验室设置将包括:
- STREAM-DC = Windows Server 2008 R2
- WS04 = Windows 7 Enterprise 域名:purplehaze.offense
如果你不知道从哪里开始建立实验室,可以看看我的朋友myexploit2600的博文。
第一部分: SYSVOL中的密码
在组策略首选项的工作方式中,有一个记录良好的缺陷,可以实现对本地管理员和其他分布式账户的访问。 这是Windows组策略的一个功能,可以用来在机器上创建本地用户,通过设计,Groups.xml将存储本地管理员账户用户和密码哈希。
密码经过AES 256加密后,再经过Base64编码后,才会被添加到Groups.xml文件中。 然而,微软决定公布解密这个哈希值所需的密钥,这意味着无论复杂程度如何,揭示这个文件中存储的任何密码都是微不足道的。
32字节的AES密钥如下:
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8 f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b
值得注意的是,由于这个问题会影响到2008 R2及以下版本的服务器,所以域的基线需要支持,否则很可能这个问题已经打了补丁(这对防御者来说是件好事!)。
学会先建后破
我们稍后再来讨论这个关键,首先让我们构建环境,并展示如何引入这个问题。
我们将使用组策略首选项来设置本地用户账户的密码,下面的步骤可以让你引入同样的问题进行测试。 在域控制器上导航到 开始 - 所有程序 - 管理工具 - 组策略管理。
- 创建或编辑组策略对象
- 展开计算机配置--首选项--控制面板设置
- 右键单击 "本地用户和组"-新建-本地用户。
- 确保操作是Update并输入新密码,如上所示为红色 然后在连接的域上导航到一个端点并运行。
从cmd或powershell中执行: gpupdate /force 通过运行这个程序,DC将强制更新到工作站,从而应用新创建的密码。现在进入有趣的部分,我们可以利用这个问题了
构建是很酷......但hax plz!
所有的攻击方法,往往有多种方式。在这里我将解释攻击的工作原理,然后讲解如何在windows和Linux中执行。值得注意的是,这两种方法都有可能触发端点检测和响应解决方案,而这篇文章将触及可以遵循的防御策略,应该理解并假设没有一个适合所有的解决方案。
PowerShell攻击
有多个用PowerShell编写的工具可以进行这种攻击,我最喜欢的是PowerSploit中包含的Get-GPPPassword。它需要在域的上下文中运行,因此可以通过两种方式之一,通过runas或通过域连接的机器来完成:
Metasploit
在你没有通过上述方法访问域,但你已经成功获得一组凭证的情况下,有一个metasploit模块用于枚举GPP。
auxiliary/scanner/smb/smb\_enum\_gpp
只需设置RHOSTS、SMBDomain、SMBUser和SMBPass,然后运行该模块,它将在主域控制器的sysvol中获取任何XML文件,如下图所示: 所有的攻击路径都有多种其他的方法,CrackMapExec也有一个叫做GPP_Password的模块可以进行这种攻击,它的工作原理类似于metasploit,然而我发现在实验室环境中,当metasploit和powershell如期工作时,它就不那么可靠了
防御和修复
这个问题的防御和修复是相当简单的,有两个选择来正确保护和监控这个问题。第一个主要的修复方法是防止未来发生这种类型的漏洞,即应用MS14-025或安装KB2962486。
现在应用这个补丁后,你将防止未来的错误,但要纠正当前的错误,首先要做的是删除SYSVOL中的groups.xml文件。一个简单的命令可以找到它们:
findstr /S /I cpassword \\<FQDN>\sysvol\<FQDN>\policies\*.xml
_
将
findstr /S /I cpassword \\\\purplehaze.offense\\sysvol\\purplehaze.offense\\policies\*.xml
一旦你找到了它们,你就可以删除来解决现有的问题。从防御的角度来看,我们可以创建一个蜜罐文件,在各自的路径中放置一个空的Groups.xml文件,并将权限改为拒绝,然后在事件查看器中设置警报,为失败的尝试访问这个文件。
要改变权限,只需创建Groups.xml,然后导航到属性->安全->编辑->添加->每个人->检查名称。
然后选择拒绝访问所有,这将拒绝对文件的访问,现在当攻击者试图访问文件时,他们将被拒绝。 一旦设置了这一点,文件现在已经被限制了,现在是时候看看如何监控日志,针对我们新创建的蜜罐的潜在访问拒绝。
用部署本地管理员密码管理(LAPS)取代GPP。
现在有些人可能会想,如果你不能通过GPP部署本地管理员'那我到底要怎么部署本地管理员账号并进行管理呢!',那么LAPS可能是你的解决方案。 首先,我们需要从微软下载软件包,可以从这里下载。 https://www.microsoft.com/en-us/download/details.aspx?id=46899 很多企业会在整个企业中使用同一个本地管理员密码,这是个坏主意,原因很多。在简单的层面上,如果这个密码被发现,它允许任何人以管理员的身份安装软件--在更高的层面上,它为进一步的机器攻击提供了便利,如传递哈希(我将在以后的博客文章中介绍),mimikatz(可用于从内存中提取密码)和针对你的域的一般枚举。 LAPS解决方案的功能包括
- 每台机器设置一个唯一的随机生成的密码,这就缓解了GPP Passwords产生的问题。
- 每隔X天自动更改本地管理员密码。
- 密码在AD中由AD ACL保护,因此可以轻松实现细粒度的安全模型。
- 将本地管理员密码存储为Active Directory中计算机对象的属性。
- 密码在传输过程中通过Kerberos加密进行保护(更多信息将在后面的文章中介绍) 现在,我们有一点背景,到有趣的(是)部分,实际部署它。与其重新发明轮子,还不如看看这个部署指南,我发现它的内容很广泛,是一个很好的指南。
如果你觉得这篇文章很有用,希望能与其他人分享,这样他们就可以学习构建突破和解决同样的问题。请继续关注第二部分,这将是所有关于kerberoastin和 ASREP roasting!