01 简介
由于DES早已被证实密钥可被破解,因此默认的DES加密算法很少再被使用,目前在AD域中的Kerberos协议虽然仍支持DES加密,但是已不再默认启用。由于DES的可被破解特性,特定条件下可在AD域中通过构造DES加密的票据申请流程以获取Hashcat可破解的DES Hash,破解成功后得到的DES密钥可以像NTLM Hash一样用于身份认证。
DES破解原理
在AD域中,Kerberos协议支持DES_CBC_CRC和DES_CBC_MD5两种DES加密模式,本文所述的情况均是基于DES_CBC_MD5模式。下图为DES CBC模式下的加密流程,可以看到在第一轮加密时,明文分组P1与初始化向量进行异或运算,然后使用密钥加密得到密文分组1;下一轮继续该过程,区别是把上一轮得到的密文分组作为本次的初始化向量。如果使用暴力破解的方式计算DES的密钥,则只需要知道明文分组P1、初始化向量和密文分组C1。
DES CBC模式加密流程
在TGS-REP数据包中能够得到初始化向量IV为校验和后密文的前8字节,IV后的8字节为密文分组1。其中的关键是如何获取第一个明文分组,下图是解密后的TGS-REP包中的enc_part,高亮部分未第一个明文分组。其中第一部分是APPLICATION tag与enc_part内容部分的长度,第二部分为SEQUENCE tag与SEQUENCE部分数据的长度。其中APPLICATION tag和SEQUENCE tag分别是固定值63 82和30 82。需要确定的分别是enc_part与SEQUENCE部分数据的长度。
Enc_part中主要包含3块数据,其中服务器会话密钥加密类型由客户端指定,客户端中的用户名在TGT中已经限定,PAC部分由用户属性和加密类型决定。可以通过申请用户到用户本身的U2U票据,这样的票据上述字段都是已知,且用户自身可解密以获得第一个明文分组。
解密后的enc_part的第一部分
02 破解流程
由于目前DES加密默认已经不启用,因此破解DES需要有两个前置条件,首先做认证服务端即DC需要允许DES_CBC_MD5类型加密。其中DC可以在注册表键HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\parameters\的值SupportedEncryptionTypes中修改或在组策略中配置。
组策略中的Kerberos加密类型配置
其次进行认证的AD域账户需要在useraccountcontrol中配置USE_DES_ONLY。
设置了USE_DES_ONLY的域账户
目前Rebues已经添加了对DES破解攻击流程的支持,第一步需要申请DES加密的TGT,在申请TGT时需要指定suppenctype为DES。
申请DES加密的TGT
第二步需要使用第一步获得的TGT申请TGS,需要通过enctype参数指定DES类型加密。
申请DES加密的ST
第三步需要申请U2U类型的TGS,这一步可以获取到本次DES加密的第1段明文分组。
获得第一组明文
第四步使用describe功能提取出能够使用hashcat破解的DES hash格式,格式为 “密文分组1:初始化向量异或第一段明文分组”。
获得可破解DES Hash
最后,使用hashcat可以破解得到des,由于本次试验所使用的环境算力有限,因此选择破解密钥的部分比特位。但是需要注意的是破解出的密钥并不一定与AD数据库中的相同,因为DES在每个字节都有一个奇偶校验位,导致实际有16个可用密钥。
命令为:hashcat.exe --force -a 3 -m 14000 8143D6EC556F2E1C:167B60707CACC6FE -1 charsets/DES_full.hcchr --hex-charset bab3c4f104d351?1
使用Hashcat破解DES密钥结果
在获取到des密钥后,可以使用该密钥申请TGT。
使用DES密钥申请TGT
破解DES密钥的利用
目前该攻击的方式利用主要包含以下几种方式:
降级DC为workstation并申请DES加密票据破解。
中继攻击获取加密TGT,破解DES加密的TGT会话密钥,最后使用会话密钥解密TGT。
使用类似AS-REP roast的攻击方法,遍历所有域账户找到使用DES加密且不需要预身份验证的账户并输出密钥的hashcat可破解形式。
其中前两种方式的实现条件较为苛刻,第三种方式相对容易实现且成功率会高很多。下面是三种方法的介绍。
通过降级DC获得DC账户DES加密的TGT
目前AD域中有三种账户无法获得DES加密的ST:krbtgt、信任账户(INTERDOMAIN_TRUST_ACCOUNT)和DC帐户(SERVER_TRUST_ACCOUNT)。但是DC账户可以通过降级到WORKSTATION_TRUST_ACCOUNT解除此限制。下图是两个主机的useraccountcontrol的对比,其中name为DC1的主机为实际的DC,而client1是一个普通的机器账户且没有被授予任何DC的委派。
DC账户与非DC账户对比
使用以下命令可以将DC降级,但是此操作会导致DC脱域影响AD域的正常运行,因此不建议在实际环境中实施。此种利用方式要求拥有对应DC机器账户的useraccountcontrol的写权限,如对DC机器账户的Generic Write权限或是WriteDACL等权限,总的来说要求的权限较高。
降级DC到workstation
通过中继攻击破解获得DES加密会话密钥
该种攻击方式的关键是通过中间人攻击修改原有的加密方式,将AS-REQ中原有的加密类型更改为DES_MD5_CBC以获得可破解的TGT会话密钥,攻击的步骤如下:
为User1请求有效的TGT。
使用 User1 的TGT作为身份验证票据和附加票据申请U2U,以获得明文分组1。
执行中间人攻击。
捕获Computer1的AS-REQ。
AS-REQ中的etype修改为DES-CBC-MD5。
将AS-REQ转发到支持DES的DC。
从AS-REP中提取Computer1的TGT。
再次申请U2U,使用User1的TGT作为身份验证票据,Computer1的TGT作为附加票证,以获取使用 Computer1的TGT会话密钥加密的ST。
从使用Computer1的TGT会话密钥加密的U2U ST获得可破解的DES Hash。
根据Computer1的TGT和已知信息创建缺少会话密钥的KERB_CRED。
破解DES Hash获得TGT会话密钥。
将TGT会话密钥插入KERB_CRED以构建Computer1的完整TGT。
使用TGT作为Computer1进行身份验证。
此种攻击方式不算稳定,其一是因为中间人攻击在实际AD域内网中较难实施,其二是中继到的账户较为随机。
将会话密钥填充到KERB_CRED中
DES AS-REP Roasting
此种攻击方式相较于前两种攻击方式不论是实施简单程度还是效果都更为优秀。DES AS-REP roast类似于AS-REP roast,只不过第一步是检查账户是否可以在不进行预身份验证的情况下请求DES加密的TGT。在检索到符合条件的账户后,需要返回该账户可破解的DES hash,其中的关键是获得第一组明文。第一组明文即enc-part中的第一部分,其中包含APPLICATION tag 、SEQUENCE tag和CONTEXT SPECIFIC,格式为”79 81 XX 30 81 XX ZZ ZZ”。下图为enc-part的结构,其中APPLICATION tag值为“79 81 XX ”,SEQUENCE tag为“30 81 YY“,最后ZZ是CONTEXT SPECIFIC为固定值A0 13。XX为APPLICATION tag的长度等于193+(域名所占字节)。YY为APPLICATION tag的长度-3。
未开启预认证账户的解密enc-part结构
在能够确定第一组明文块后,即可获得可以获得的DES Hash。最后将所有可以破解的DES hash导出进行批量破解,能够相比破解单一DES速度更快成功率更高。目前Rubeus已经增加了该功能,默认会遍历AD域的所有用户然后输出未开启预认证用户的可破解DES hash。
使用Rubeus进行DES AS-REP Roasting
03 总结
本次介绍的攻击方法看起来较难利用,其一是因为DES加密在AD域中默认不启用,其二是因为即使DES可破解但对于一般性能的电脑仍然是一种考验。相对于普通的口令破解应用范围更广,因为不论是用户和计算机都拥有16位hex格式的DES密钥。实际AD域环境往往都是持续运营数年的,为了兼容性一些陈旧的服务或设备难免会开启类似支持DES加密的脆弱配置,因此该攻击方法在实际环境中可能有奇效。该方法利用的是正常的身份认证流程,并将Hash导出进行离线破解,因此很难检测。如果在AD域外的其他环境中也开启了DES加密,且给与攻击者可以获得加密材料的机会也会带来类似的风险。
绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。
研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。
M01N Team公众号
聚焦高级攻防对抗热点技术
绿盟科技蓝军技术研究战队
官方攻防交流群
网络安全一手资讯
攻防技术答疑解惑
扫码加好友即可拉群