向Kerberoast致敬
Derek Banks //
本文将逐步介绍一种技术:通过已建立的Meterpreter会话远程运行Kerberoast攻击,目标为基于互联网的Ubuntu 16.04 C2服务器,并使用Hashcat离线破解票据。
最近,我在Active Directory域环境中使用名为Kerberoasting的攻击技术,在权限提升方面取得了很大成功。Tim Medin在2014年SANS Hackfest上介绍了这种技术,自那以后,出现了许多精彩的文章和会议演讲,详细讨论了这种攻击的细节,并编写了用于不同执行技术的工具(参考链接在文末)。
微软的Kerberos实现可能有点复杂,但攻击的要旨在于它利用了旧版Active Directory对较旧Windows客户端的支持,以及用于加密和签名Kerberos票据的加密类型和密钥材料。本质上,当域账户被配置为在环境中运行服务(如MS SQL)时,域中使用服务主体名称(SPN)将服务与登录账户关联。当用户希望使用特定资源时,他们会收到一个用运行服务的账户的NTLM哈希签名的Kerberos票据。
这确实是对过程细节的过度简化,但最终结果是任何有效的域用户都可以请求注册服务的SPN(我主要看到的是SQL和IIS),并且收到的Kerberos票据可以离线获取并破解。这很重要,因为通常服务账户至少会是其运行服务器上的管理员。
那么,我们如何实现这一点?假设C2服务器上已经安装了Metasploit,我们需要从Core Impact获取Impacket项目。这是一个用于处理网络协议的Python类集合。如果未安装Metasploit,TrustedSec的PTF框架在Ubuntu 16.04上可以轻松安装。
|
|
接下来,我们需要安装和配置proxychains。安装后,唯一的配置更改是所需的端口(例如8080)。
|
|
现在我们需要一个已建立的meterpreter会话。在渗透测试中有许多方法可以实现这一点,不同的方法可能因情况而异,因此我们假设已建立的活动会话。
接下来,我们在Metasploit中设置一个路由,覆盖包含域控制器IP地址的内部子网。
我们现在需要一种方法通过meterpreter连接外部路由到Metasploit工具。为此,Metasploit有一个名为socks4a的模块,使用内置路由来中继连接。将SRVPORT选项设置为与配置proxychains时使用的端口值相同。
我通常是个偏执的人,既然socks代理端口现在是一个通过内部网络路由的开放套接字,我建议使用IP表限制到8080的连接仅限本地主机。一些主张“裸奔”黑客的人可能认为这过分了,但有时我认为穿着防火墙是合适的——这就是其中之一。我使用的IP表规则文件在这里。
将IP表规则文件放在/etc/iptables.rules中并运行:
|
|
现在,我们已准备就绪,可以使用一个Impacket示例脚本和一个有效的非特权域账户,通过meterpreter会话上的proxychains收集通过SPN广告的Kerberos票据。
|
|
GetUserSPNs脚本收集的任何Kerberos票据都可以直接用Hashcat破解,无需任何额外转换(哈希类型在版本3.0中添加)。在我的Windows桌面上,使用单个Radeon R280,使用Crackstation单词列表在三分钟内破解了服务账户的密码。
|
|
为了更进一步,一旦获得域管理员权限,可以使用相同的通过meterpreter代理工具的方法,使用另一个名为secretsdump.py的Impacket示例脚本从域控制器转储域账户哈希。
在我的实验室示例中,SQL管理员服务账户有一个弱密码,并且也是域管理员组的成员。你可能认为这有点人为,但事实并非如此。在过去的几个月里,特别是在多年来有机增长的老旧Active Directory环境中,我直接使用Kerberoasting和破解域管理员组成员密码获得了域管理员账户。我随后通过进一步 pivoting 多次提升到域管理员。
|
|
目前的修复方法是确保环境中所有服务账户都有非常长的密码。多长取决于你认为潜在攻击者可用于破解密码的资源。我目前的建议(基于潜在的密码破解工具限制)是28个字符或更长,并每6个月轮换一次。
感谢所有花时间、研究和努力攻击Kerberos的人。一如既往,我站在巨人的肩膀上。如果我遗漏了任何参考文献,那不是故意的,如果有其他相关链接应包含,请告诉我们:
https://adsecurity.org/?p=2293 https://www.sans.org/cyber-security-summit/archives/file/summit-archive-1493862736.pdf https://room362.com/post/2016/kerberoast-pt1/ http://www.harmj0y.net/blog/powershell/kerberoasting-without-mimikatz https://github.com/nidem/kerberoast https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx