3.1 KiB
Raw Blame History

TimeRoasting

timeRoasting主要原因是微软在其对NTP服务器的扩展中留下的过时身份验证机制称为MS-SNTP。在该机制中客户端可以直接使用任何计算机帐户的相对标识符RID域控制器将使用计算机帐户的NTLM哈希由MD4生成作为生成响应数据包的**消息认证码MAC**的密钥。

攻击者可以利用该机制在不进行身份验证的情况下获取任意计算机帐户的等效哈希值。显然我们可以使用像Hashcat这样的工具进行暴力破解。

具体机制可以在官方Windows文档的MS-SNTP协议的3.1.5.1节“身份验证请求行为”中查看。

在文档中3.1.5.1节涵盖了身份验证请求行为。 可以看出当ExtendedAuthenticatorSupported ADM元素设置为false原始Markdown格式得以保留。

原文引用:

如果ExtendedAuthenticatorSupported ADM元素为false客户端必须构造一个客户端NTP请求消息。客户端NTP请求消息的长度为68字节。客户端按照2.2.1节的描述设置客户端NTP请求消息的认证字段将RID值的最低有效31位写入认证的密钥标识符子字段的最低有效31位然后将密钥选择器值写入密钥标识符子字段的最高有效位。

在文档的第4节协议示例第3点

原文引用:

  1. 在接收到请求后服务器验证接收到的消息大小为68字节。如果不是服务器要么丢弃请求如果消息大小不等于48字节要么将其视为未认证请求如果消息大小为48字节。假设接收到的消息大小为68字节服务器从接收到的消息中提取RID。服务器使用它调用NetrLogonComputeServerDigest方法如[MS-NRPC]第3.5.4.8.2节所规定来计算加密校验和并根据接收到的消息中密钥标识符子字段的最高有效位选择加密校验和如3.2.5节所规定。然后服务器向客户端发送响应将密钥标识符字段设置为0将加密校验和字段设置为计算出的加密校验和。

根据上述微软官方文档的描述用户不需要任何身份验证他们只需填写RID以发起请求然后就可以获得加密校验和。加密校验和在文档的3.2.5.1.1节中进行了说明。

原文引用:

服务器从客户端NTP请求消息的认证字段的密钥标识符子字段的最低有效31位中检索RID。服务器使用NetrLogonComputeServerDigest方法如[MS-NRPC]第3.5.4.8.2节所规定)计算加密校验和,输入参数如下:

加密校验和使用MD5计算具体过程可以参考文档内容。这为我们执行烤制攻击提供了机会。

how to attack

引用至 https://swisskyrepo.github.io/InternalAllTheThings/active-directory/ad-roasting-timeroasting/

SecuraBV/Timeroast - Tom Tervoort的Timeroasting脚本

sudo ./timeroast.py 10.0.0.42 | tee ntp-hashes.txt
hashcat -m 31300 ntp-hashes.txt