简介
近期Tom Tervoort发表了白皮书《TIMEROASTING, TRUSTROASTING AND COMPUTER SPRAYING》并在Github发布了名为Timeroast的工具包,其中介绍了几种新的攻击思路TimeRoasting、Trustroasting和计算机账户密码喷洒,本篇文章主要对TimeRoasting和Trustroasting两种攻击进行分析和复现。
01 离线破解计算机账户密码的意义
两种技术针对的是AD域中计算机账户,在过去的时间里计算机账户的密码攻击很少受到关注。因此在介绍技术前需要简短地介绍一下针对计算机账户密码的攻击意义,毕竟一个只适用于理想环境的攻击技术是没有意义的。
在Windows环境中部分账户不需要用户手动输入密码登陆,这些账户的账户名往往以$结尾,其中就包括计算机账户。在以往的概念中破解计算机账户Hash对应的明文是不可能的。其一是因为计算机账户的Hash是系统随机生成的,其对应的明文密码是未知的。其二是计算机账户的密码虽然是能够修改的,但是一般用户很少会更改计算机账户的密码,相比下向DC申请重置一个随机的密码更加安全方便。但是在实际环境中,包括计算机账户在内的$结尾账户会由于种种原因,会出现类似用户账户的弱密码:
在Windows NT4时代,计算机名用默认密码初始化,该密码与计算机名的前14个字符匹配,小写不带美元符号。Net Computer命令创建的密码也是如此。
在创建计算机账户时,如果指定“将此计算机帐户指定为Windows 2000之前的计算机”,则会生成一个基于新计算机名称的密码。
域中可能存在某些测试账户设置了弱密码,但是未使用或者被禁用密码重置。
在非Windows域中配置信任账户时需要手动配置密码,导致弱密码的产生。
……
在获取计算机账户的密码后,可以利用该账户进行横向移动或者申请票据,或者转储当前计算机账户所代表的计算机中登录过的账户Hash。如果当前计算机账户还拥有某些特权或者委派权限,则拥有更高的利用价值。因此一个计算机账户价值不亚于一个用户账户,针对AD域中计算机账户密码进行破解攻击有一定的可行性和价值。
02 Timeroasting
Timeroasting攻击主要是利用了微软时间同步数据包使用NTLM加密的特性。在AD域中一般网络时间协议(Network Time Protocol,NTP)服务器部署在DC,域内的计算机在同步时钟时会将计算机账户的RID包含在NTP请求中,服务器返回使用NTLM加密的消息认证码(Message Authentication Code,MAC)。服务器回复请求时不验证计算机账户的身份,可以利用此机制来遍历所有域内主机的计算机账户Hash,并对返回的MAC批量进行离线破解,其原理类似AS-REP Roasting攻击。
由于本次案例所涉及的场景比较难找,因此可以使用以下Powershell命令修改计算机账户密码用于验证技术可行性:
import-module ActiveDirectory
Set-ADAccountPassword -Identity <计算机名> -Reset -NewPassword (ConvertTo-SecureString -AsPlainText <密码> -Force) -Server dc
使用工具包中的timeroast脚本指定DC地址,程序会遍历域中的所有计算机账户RID并返回可破解的Hash数据。将程序输出的信息保存到文件中可用于离线破解,目前Hashcat的测试版已经支持该类型的Hash。
图:运行timeroast脚本遍历Hash
通过Wireshark抓包可以看到NTP包中使用字段Key ID来表示RID。
图:Wireshark抓去ntp数据包
但是这个数字并非是RID的十六进制,而是将RID和keyflag进行异或运算,得到的结果按照小端字节序打包成字节串,其计算和还原的Python代码如下:
图:RID的编码和解码
最后使用timeroast.py脚本能够对该类型的Hash进行离线破解,成功破解密码。
图:离线破解密码
03 Trustroasting
在域森林中可以请求信任票据,如果Domain B信任Domain A,B中的用户可以申请Domain A中SPN的票据,最后返回一个信任票据。目前借助Rubeus工具可以申请一个信任票据,命令如下:
Rubeus asktgt /user:<用户名> /password:<密码>
Rubeus asktgs /service:host/<Doamin A的DC> /ticket:<上一步申请的TGT>
本次文章复现选择的是一对父子域,父子域默认拥有双向信任关系,从父域查看信任关系如下:
图:域信任关系
信任票据实际就是一种TGS,因此第一步在子域tw.m01n.lab中使用该域中的账户trust申请TGT。
图:申请TGT
在获取到TGT后,使用账户trust的TGT去向父域m01n.lab申请信任票据,该票据的类型与普通的TGS格式一致。
图:申请信任票据
最后使用工具包中的kirbi_to_hashcat可将票据转化为hashcat可识别的类型进行离线破解,hash类型与正常的TGS同为13100。此处的信任账户为dc1.m01n.lab的计算机账户,DC账户出现弱密码的情况很不现实,正常情况下此Hash是无法进行破解的。
图:将票据转化为Hashcat可识别格式
04 结论
总的来说,这两种攻击方式从计算机账户的密码入手,想法具有突破性。但是计算机账户相对于用户账户出现弱密码的条件更加苛刻,因此在实际攻防对抗中的意义不大。其中Timeroasting在大型AD域中有望破解一些计算机账户密码,但是Trustroasting针对的信任账户一般都是DC主机,能够离线破解的机会十分渺茫。对于攻击者来说,多一种攻击方式就是多一份机会,因此两种攻击技术仍具有一定价值。
绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。
研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。
M01N Team公众号
聚焦高级攻防对抗热点技术
绿盟科技蓝军技术研究战队
官方攻防交流群
网络安全一手资讯
攻防技术答疑解惑
扫码加好友即可拉群