说明:
- AS-REP Roasting是一种对用户账户进行离线爆破的攻击方式。但是该攻击方式使用比较受限,因为其需要用户账户设置“不要求Kerberos预身份验证”选项,而该选项默是没有勾选的。
- Kerberos 预身份验证发生在Kerberos身份验证的第一阶段(AS_REQ&AS REP),它的主要作用是防止密码离线爆破。
- 如果当前主机在域内会自动搜索不需要预认证的用户进行AS-REP Roasting攻击,并将该用户加密的。
攻击过程
AS-REP Roasting 攻击的前提条件如下:
- 域用户勾选“不要求Kerberos预身份验证”选项
- 需要一台可与KDC88端口进行通信的主机。
用户test勾选了“不要求Kerberos预身份验证”选项。
AS-REP Roasting 攻击主要分为两步:
1)获取AS-REP响应包中用户Hash加密的Login Session Key,后面统称为Hash。
2)对上一步获得的Hash进行解密。
- 获取Hash
- 获取AS-REP包中用户Hash加密的Login Session Key,也就是AS-REP响应包中最外层ecp-part中的cipher部分。获取该Hash的工具有很多,下面介绍几个工具的用法。
- Rubeus
- 如果当前主机在域内,可以通过执行如下命令运行Rubeus,该工具会自动搜索域内勾选了,不要求Kerberos预身份验证”选项的用户,并以该用户身份发起AS-REQ。
- 由于不需要预身份验证,所以KDC会直接返回AS-REP包。然后该工具会将AS-REP包中返回的用户Hash加密的 Login Session Key 以John工具能破解的格式保存为 hash.txt文件。
- John工具 kali上有这个多种加密破解工具 这个具体自行百度查阅
- Rubeus.exe asreproast /format:john /outfile:hash.txt
- 非域内机器
- 对于非域内的机器,就无法通过上面两种方式来获取 Hash 了。
- 要想获取域内勾选了“不需要 Kerberos 预身份验证”选项的账户、可以使用 Adfind 执行如下命令来进行过滤查询,前提是拥有一个有效的域账户和密码。查询出符合条件的域账户之后。
- 再使用 Impacket 下的 GetNPUsers.py 脚本获取针对指定用户的用户 Hash 加密的 Login Session Key。
- AdFind.exe -h 192.168.1.89:389 -u xie\Administrator -up 123@qq.com -f "userAccountControl:1.2.840.113556.1.4.803:=4194304" -dn
- 过滤出test用户-不需要Kerberos 预身份验证账号。
- 然后使用 Impacket 下的 GetNPUsers.py 脚本把上一步过滤出来的域账户写入 user.txt 文件中。
- 运行如下命令获取针对指定用户的用户 Hash 加密的 Login Session Key,该格式可以被 John 直接爆破。
- python GetNPusers.py -dc-ip 192.168.1.89 -usersfile user.txt -format john xie.com/
- 运行如下命令获取针对指定用户的用户 Hash 加密的 Login Session Key,该格式可以被 John 直接爆破。
- 盲爆破
- 不需要有效的域账户和密码,这个情况适用于攻击者在域外且没有一个有效的域账户和密码。
- 将大量的用户名写入到user.txt 获取这些用户验证是否开启Kerberos预身份验证。
- python GetNPusers.py -dc-ip 192.168.1.89 -usersfile user1.txt -format john xie.com/
- 爆破hash
- john --wordlist=<密码字典路径> <hash值>
- 爆破出来的密码是123@qq.com
AS-REP Roasting 攻击防御
- 检测域中是否存在设置了,不要求Kerberos预身份验证,属性的用户如果存在,将该属性取消勾选。
- 如果想在日志层面上进行检测,重点关注的事件ID是4768且预身份验证类型为0的日志。