freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

AD域离线破解新思路:Trustroasting和TimeRoasting
绿盟科技 2023-04-10 16:46:45 227308
所属地 北京

简介

近期Tom Tervoort发表了白皮书《TIMEROASTING, TRUSTROASTING AND COMPUTER SPRAYING》并在Github发布了名为Timeroast的工具包,其中介绍了几种新的攻击思路TimeRoasting、Trustroasting和计算机账户密码喷洒,本篇文章主要对TimeRoasting和Trustroasting两种攻击进行分析和复现。

离线破解计算机账户密码的意义

两种技术针对的是AD域中计算机账户,在过去的时间里计算机账户的密码攻击很少受到关注。因此在介绍技术前需要简短地介绍一下针对计算机账户密码的攻击意义,毕竟一个只适用于理想环境的攻击技术是没有意义的。

在Windows环境中部分账户不需要用户手动输入密码登陆,这些账户的账户名往往以$结尾,其中就包括计算机账户。在以往的概念中破解计算机账户Hash对应的明文是不可能的。其一是因为计算机账户的Hash是系统随机生成的,其对应的明文密码是未知的。其二是计算机账户的密码虽然是能够修改的,但是一般用户很少会更改计算机账户的密码,相比下向DC申请重置一个随机的密码更加安全方便。但是在实际环境中,包括计算机账户在内的$结尾账户会由于种种原因,会出现类似用户账户的弱密码:

  • 在Windows NT4时代,计算机名用默认密码初始化,该密码与计算机名的前14个字符匹配,小写不带美元符号。Net Computer命令创建的密码也是如此。
  • 在创建计算机账户时,如果指定“将此计算机帐户指定为Windows 2000之前的计算机”,则会生成一个基于新计算机名称的密码。
  • 域中可能存在某些测试账户设置了弱密码,但是未使用或者被禁用密码重置。
  • 在非Windows域中配置信任账户时需要手动配置密码,导致弱密码的产生。
  • ……

在获取计算机账户的密码后,可以利用该账户进行横向移动或者申请票据,或者转储当前计算机账户所代表的计算机中登录过的账户Hash。如果当前计算机账户还拥有某些特权或者委派权限,则拥有更高的利用价值。因此一个计算机账户价值不亚于一个用户账户,针对AD域中计算机账户密码进行破解攻击有一定的可行性和价值。

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进行离线破解,成功破解密码

离线破解密码

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可识别格式

结论

总的来说,这两种攻击方式从计算机账户的密码入手,想法具有突破性。但是计算机账户相对于用户账户出现弱密码的条件更加苛刻,因此在实际攻防对抗中的意义不大。其中Timeroasting在大型AD域中有望破解一些计算机账户密码,但是Trustroasting针对的信任账户一般都是DC主机,能够离线破解的机会十分渺茫。对于攻击者来说,多一种攻击方式就是多一份机会,因此两种攻击技术仍具有一定价值。

# 蓝军 # AD安全
本文为 绿盟科技 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
M01N Team
绿盟科技 LV.10
绿盟科技官方账号
  • 1638 文章数
  • 335 关注者
《高级威胁研究报告(2025版)》发布
2025-04-03
《网络安全2025:冲刺“十四五”》发布
2025-04-01
《2025网络安全趋势报告》发布
2025-04-01
文章目录