开发者社区> 玄学酱> 正文

Kerberoast攻击的另一种姿势

简介: 本文讲的是Kerberoast攻击的另一种姿势,大约在两年前,Tim Medin提出了一种新的攻击技术,他称之为“Kerberoasting”。尽管在这种攻击技术发布时我们还没有意识到其全部的含义,但这种攻击技术已经改变了我们的交战游戏。
+关注继续查看
本文讲的是Kerberoast攻击的另一种姿势大约在两年前,Tim Medin提出了一种新的攻击技术,他称之为“Kerberoasting”。尽管在这种攻击技术发布时我们还没有意识到其全部的含义,但这种攻击技术已经改变了我们的交战游戏。最近,Kerberoasting受到越来越多的关注,@mubix发布了以Kerberoasting为主题的三篇连载系列的博文,Sean Metcalf也发表过一些文章,另外@leonjza也做了一个不错的write-up。

@machosec 在 PowerView 中pull了一个很强大的更新请求,使得使用纯PowerShell进行Kerberoasting要比以往任何时候更加容易。我想在本文中简要介绍这种技术及其背景,包括我们最近使用这种攻击技术的一些情况,以及一些很棒的新发现。

Kerberoasting背景介绍

我第一次听到Kerberoasting,是在2014年的SANS HackFest 上Tim演示了“攻击Kerberos:踢爆守卫者的狗头”的演讲(他还在发布了Kerberoasting工具包)。我将简要地说明这种攻击姿势的一些技术细节,但我强烈建议你阅读Tim的PPT或Sean的一些解释以获取更多详细信息。还有一个微软发布的很不错的文档,标题为“Windows 上的 Kerberos技术补充”,这个文档最终很好的解释清楚了攻击过程中涉及的几个让我感到迷惑的点。

我制作了一个kerberos工作过程的图解,如下图所示:

Kerberoast攻击的另一种姿势

下面是我对Kerberoasting在这个过程中的理解(如果我的理解有误,请让我知道!):在用户认证到密钥分发中心后(在Windows域中KDC就是域控制器),他们会收到一个票证授予票(TGT),此票证使用域的krbtgt帐户进行了签名,证明他们是谁。然后TGT被用于请求域中的特定资源或服务的服务票证(TGS)。部分服务票证使用了目标服务实例的NTLM哈希进行加密。那么KDC如何确定在加密这些服务票证时使用什么密钥?

Windows实现的Kerberos协议使用服务主体名称(SPN)来确定使用哪个服务帐户的哈希来加密服务票证。在Active Directory中有两种“类型”的服务主体名称:链接到域计算机帐户的“基于主机”的SPN和通常(但不总是)链接到域用户帐户的“任意”的SPN。

微软解释说,“当在Active Directory中创建新的计算机帐户时,将自动为内置服务生成基于主机的SPN …实际上,仅为HOST服务创建了SPN,并且所有内置服务都使用HOST SPN ”。换句话说,“HOST服务代表了托管计算机。 HOST SPN用于访问托管计算机帐户,长期密钥由Kerberos协议在创建服务票据时使用。以下是我测试的域中的默认计算机帐户示例:

Kerberoast攻击的另一种姿势

你可以看到HOST/WINDOWS1 和WINDOWS1$计算机账户的SPN——HOST/ WINDOWS1.testlab.local。当域用户请求访问 WINDOWS1.testlab.local  C $时,KDC会将此请求映射到HOST/WINDOWS1.testlab.local 这个SPN,这表示WINDOWS1$ 的计算机帐户的NTLM 哈希(存储在WINDOWS1本地和DC/KDC上的NTDS.dit Active Directory数据库中)被用于加密服务器部分的服务票证。然后将签名或加密的票证提供给WINDOWS1.testlab.local,WINDOWS1.testlab.local负责确定请求用户是否应该被授予访问权限。

从Kerberoasting的角度来看,我们通常不关心基于主机的SPN,因为计算机的机器帐户密码默认是随机的,每30天更换一次。但是,请记住,可以为域用户帐户注册任意的SPN。一个常见的例子就是一个服务账户管理着多个MSSQL实例;此用户帐户注册的每个MSSQL实例都有一个<MSSQLSvc/HOST:PORT> 这样的SPN,这个SPN存储在用户的serviceprincipalname属性里(Sean保持的SPN更新列表可以在这里找到)。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

“为什么这是重要的?”

由于Kerberos的工作原理,任何用户都可以请求在Active Directory中的用户或计算机帐户中具有已注册SPN(HOST或任意)的任何服务的TGS。请记住,只是请求此票证并不会授予对请求用户的访问权限,因为服务器或服务才会最终确定是否应授予用户访问资源的权限。 Tim认识到,由于这一点,并且因为请求SPN实例的TGS的一部分是用服务帐户的明文密码的NTLM哈希进行了加密,所以任何用户都可以请求这些TGS票证,然后离线破解服务帐户的明文密码,而不用担心帐户被锁定的风险!

要重申的是,任何具有服务主体名称的域用户帐户都可以被该域中任何用户请求该SPN的TGS,从而允许攻击者离线破解服务帐户的明文密码!这显然取决于一个可破解的服务帐户明文密码的复杂度,但幸运的是,对我们来说,服务帐户往往设置了简单的密码并且很少更改。

Tim在他演示的PPT的第18页提到了如下内容:

Kerberoast攻击的另一种姿势

“老套的”Kerberoasting攻击姿势

Tim给出的利用方法或工具包是使用工具集的组合来请求票证,并从内存中提取(使用Mimikatz)票证,然后将它们转换为可破解的格式。一般来说,整个过程如下:

1. 使用Tim的GetUserSPNS.ps1脚本或者Sean的Find-PSServiceAccounts.ps1脚本或PowerView的“Get-NetUser -SPN”来枚举域帐户的SPN。

2. 请求这些特定的SPN的 TGS可以使用Windows内置的工具setspn.exe或者在PowerShell中调用.NET的

 System.IdentityModel.Tokens.KerberosRequestorSecurityToken类。

3. 使用Mimikatz的kerberos::list/export命令从内存中提取这些票证,并设置可选的base64导出格式。然后下载票据,或者将base64编码的票证拖到攻击者的机器上进行解码。

4. 使用Tim的tgsrepcrack.py开始离线破解密码,或者使用John the Ripper的kirbi2john.py从原始票证中提取可破解的哈希格式。

5. xan7r给 Tim的工具集增加了一个分支,他添加了一个autokerberoast.ps1脚本,自动化了上述攻击过程。此外,@ tifkin_写了一个Go语言版本的TGS爆破器,比原来的Python版本要快一些。

Kerberoasting攻击的“新姿势”

最近出现了一些东西,简化了我们使用Kerberoasting攻击的过程。首先,Michael Kramer在2015年9月将KRB5TGS格式添加到了John the Ripper中。其次,@ Fist0urs在2016年2月向Hashcat提交了相同的算法,为破解这些票证打开了基于GPU破解的大门。这对我们来说真是一个分水岭,因为它极大地扩展了我们可以破解的服务帐户密码的范围。最后,Matan Hart(@machosec)对PowerView的一个pull请求删除了对Mimikatz的需求。

因为,@machosec意识到在之前使用的.NET类KerberosRequestorSecurityToken中也有一个GetRequest()的方法,它返回Kerberos服务票证的原始字节流。使用位字符串操作,Matan能够轻松地提取加密的TGS(即可破解的哈希)。我们现在可以不再依赖Mimikatz提取票证了!

我最近将一些必要的功能转换成了一个单独的,自包含的脚本文件,其中包含来自PowerView的一些必要组件(这也会在Empire中更新)。我们目前正在重构PowerSploit的一些大型组件,并且更新的功能将会在更改后发布。这个自定义脚本包括Invoke-Kerberoast函数,该函数包装了Get-NetUser -SPN(枚举servicePrincipalName属性值为非null的用户帐户)的逻辑和Get-SPNTicket,以请求关联的TGS票证并输出John the Ripper和Hashcat的可破解字符串。脚本的输出如下图所示:

Kerberoast攻击的另一种姿势

它也适用于跨域请求!

Kerberoast攻击的另一种姿势

默认情况下,输出John the Ripper的格式,可以使用-OutputFormat Hashcat输出Hashcat支持的格式。 请注意,-AdminCount参数只有Kerberoasts帐户的AdminCount属性为 1才有意义,这意味着这个账户是受保护的用户帐户,因此,这样的账户几乎总是高权限账户:

Kerberoast攻击的另一种姿势

下面是更新的Empire模块:

Kerberoast攻击的另一种姿势

请注意,对于非Empire的用法,当输出PSObject时,你需要将结果传递到Format-List或ConvertTo-Csv -NoTypeInformation,以保留你想要显示的信息。 然后你就可以利用@mubix在他的第三篇文章中所描述的破解方法破解这些票证了。




原文发布时间为:2017年3月9日
本文作者:李白
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
网络安全-SSRF漏洞原理、攻击与防御
网络安全-SSRF漏洞原理、攻击与防御
119 0
解密常见的社会工程学攻击
社会工程学的手段日渐成熟,其技术含量也越来越高。社会工程学在实施之前必须掌握「心理学」、「人际关系」、「行为学」等知识与技能,以便收集和掌握实施进攻行为所需的资料和信息。不了解社会工程学的小伙伴可以点击链接: 什么是社会工程学 。
158 0
服务器攻击日常
服务器为什么会被攻击呢一、服务器漏洞服务器存在漏洞和服务器处理配备由差错的时候可能被被黑客攻击二、桌面漏洞桌面漏洞有很多,例如我们平时用的浏览器,如果不常常下载更新补就存在被黑客攻击的风险。他们不需要通过同意就能够自动下载非法软件代码,这种也被叫做隐藏式下载。
675 0
使用高防后,服务器还是会受到攻击这是为什么?
近期听墨者安全的客服人员说有些受了DDOS攻击的用户反映,曾使用了某些公司的高防产品,服务器还是会受到攻击,说DDOS攻击防御防不住,为此对DDOS攻击防御产生了质疑。下面咱就分析下接入高防后,服务器还是会受到攻击这是为什么?
1658 0
如何防御SQL注入攻击
【51CTO.com快译】随着技术的进步,Web应用技术在得以快速发展的同时,其自身的漏洞和伴随的风险也在不断迭代与增加着。自2003年以来,SQL注入攻击已持续位列OWASP应用安全风险Top 10之中,并值得各类公司持续予以严防死守。
959 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
数据泄露时代的 网络边界防御实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载