深入解析Kerberoasting攻击:从Meterpreter到离线破解

本文详细介绍了如何通过Meterpreter会话远程执行Kerberoasting攻击,利用Impacket工具获取Kerberos票据,并通过Hashcat进行离线密码破解。涵盖攻击原理、实际操作步骤及防御建议,适用于红队演练和渗透测试人员。

向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上使其变得容易。

1
#git clone https://github.com/CoreSecurity/impacket

接下来,我们需要安装和配置proxychains。安装后,唯一的配置更改是所需的端口(例如8080)。

1
#apt-get install proxychains

现在我们需要一个已建立的meterpreter会话。在渗透测试中有许多方法可以实现这一点,不同的方法可能因情况而异,因此我们假设已建立的活动会话。

接下来,我们在Metasploit中设置一个路由,覆盖包含域控制器IP地址的内部子网。

我们现在需要一种方法通过meterpreter连接将外部工具路由到Metasploit。为此,Metasploit有一个名为socks4a的模块,使用内置路由来中继连接。将SRVPORT选项设置为与配置proxychains时使用的端口值相同。

我通常是一个偏执的人,既然socks代理端口现在是一个通过内部网络路由的开放套接字,我建议使用IP表限制对8080端口的连接到本地主机。一些主张“裸奔”黑客的人可能认为这是过度杀伤,但有时我认为穿着防火墙是合适的——这就是其中之一。我使用的IP表规则文件在这里。

将IP表规则文件放在/etc/iptables.rules中并运行:

1
#/sbin/iptables-restore < /etc/iptables.rules

现在,我们都可以使用一个Impacket示例脚本和一个有效的无特权域账户,通过meterpreter会话上的proxychains收集通过SPN广告的Kerberos票据。

1
#proxychains GetUserSPNs.py -request -dc-ip 192.168.2.160 lab.local/zuul

GetUserSPNs脚本收集的任何Kerberos票据都可以直接用Hashcat破解,无需任何额外转换(哈希类型在版本3.0中添加)。在我的Windows桌面上,使用单个Radeon R280,使用Crackstation单词列表在三分钟内破解了服务账户的密码。

1
hashcat -m 13100 -a 0 sqladmin_kerberos.txt crackstation.txt

更进一步,一旦获得域管理员权限,可以使用相同的通过meterpreter代理工具的方法,使用另一个名为secretsdump.py的Impacket示例脚本从域控制器转储域账户哈希。

在我的实验室示例中,我有一个SQL管理员服务账户,密码弱,并且是Domain Admins组的成员。你可能认为这有点做作,但事实并非如此。在过去的几个月里,特别是在多年来有机增长的老旧Active Directory环境中,我直接使用Kerberoasting和破解Domain Admins组成员密码获得了域管理员账户。我随后多次通过进一步 pivoting 提升到域管理员。

1
#proxychains secretsdump.py -just-dc-ntlm LAB/[email protected]

目前的修复方法是确保环境中的所有服务账户都有非常长的密码。多长取决于你认为潜在攻击者有哪些资源可用于破解密码。我目前的建议(基于潜在的密码破解工具限制)是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

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计