在我们的 LDAP 侦察文章中,我们探讨了攻击者如何进行侦察,以发现可在 Windows Active Directory(AD)域中作为目标的服务账户。现在,让我们来探索攻击者可以用来攻破这些账户并滥用其权限的一种方式:Kerberoasting。此技术之所以格外令人担忧,是因为它不需要在域中拥有管理员权限,执行起来非常容易,而且几乎无法被检测到。
精心挑选的相关内容:
Kerberoasting:概述
Kerberoasting 是一种攻击方式,它滥用 Kerberos 协议的功能来收集 Active Directory 用户帐户的密码哈希:任何已认证的域用户都可以通过指定帐户的 Service Principal Name(SPN)来为该帐户请求服务票据,而域控制器上的票据授予服务(TGS)将返回一张使用帐户密码的 NTLM 哈希进行加密的票据。
因此,一旦对手使用类似 LDAP reconnaissance 这样的战术发现了服务帐户的 SPN,他们就可以为所有这些帐户收集票据。通过将这些数据离线处理,他们可以执行暴力破解攻击来破解每个服务帐户的明文密码——且不会有被检测或帐户锁定的风险。
攻击者只需要几分钟就能获得对域的访问权限,收集票据并开始破解过程。之后就只剩等待了,直到他们攻陷一个或多个服务帐户。随后,他们就可以利用这些帐户窃取或加密敏感数据,或造成其他破坏。
攻击者会出于多种原因重点关注服务账户。首先,这些账户通常比其他 AD 用户账户拥有更广泛的权限,因此一旦攻破它们,攻击者就能获得更多访问权限。另外,服务账户的密码很少更改,因此攻击者很可能长期保持访问。要了解使用 Kerberoasting 能够获取的访问类型,请查看 Sean Metcalf 维护的 Active Directory SPNs 列表。
Kerberoasting:工作原理
步骤 1:获取服务账户的 SPN。
。获取这些 SPN 的方法有很多,包括:
- 使用 PowerShell 查询和 LDAP 侦察
- PowerShell 的 Active Directory 模块
- GetUserSPNs 脚本位于 Kerberoast 工具包
- Get-NetUser 命令(来自 PowerSploit
步骤 2。为服务账户 SPN 请求服务票据。
只需执行几行 PowerShell,就会返回服务票据,并将其存储到系统内存中。
Add-Type –AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken –ArgumentList ‘MSSQLSvc/jefflab-sql02.jefflab.local:1433’
第 3 步。使用 Mimikatz 提取服务票据(service tickets)。
Mimikatz 将提取本地票据(tickets),并将其保存到磁盘以供离线破解(offline cracking)。只需安装 Mimikatz 并发出一条命令即可:
第 4 步。破解票据(tickets)。
Kerberos 票据(tickets)使用与票据请求中指定的 SPN 相关联的服务账户的密码进行加密。Kerberoasting 工具提供了一个用于破解票据的 Python 脚本,并通过将密码哈希字典(dictionary)运行在票据上来获取其明文密码。为了确保你拥有运行该脚本所需的环境,可能需要进行一些配置,但 这篇博客 会介绍这些细节。
此外,你也可以使用 GetUserSPNs 脚本收集 Kerberos 票据(tickets),然后用 Hashcat 密码恢复工具进行破解。
防范 Kerberoasting 攻击
Kerberoasting 攻击的主要缓解措施是确保所有服务帐户都使用足够长且足够复杂、难以破解的密码,并定期轮换,以尽量缩短攻击者成功破解密码后可能利用该帐户的时间。使用 group managed service accounts 是为分配可自动轮换的随机复杂密码的最佳实践。
由于攻击者是在离线状态下破解票据,因此该过程不会产生任何网络流量,使攻击的这一部分难以被检测到。但你可以通过使用 solid security solution 来监控 Active Directory,从而发现攻击的更早步骤。特别是,服务帐户通常会在相同的系统上以相同的方式使用,因此请留意异常的身份验证请求。此外,还应监控服务票据请求是否出现激增。
最后,安全专家也建议禁用基于 RC4 的加密。否则,即使用户帐户支持 AES 加密,攻击者仍然可以请求 RC4 加密的票据,而这种票据比使用 AES 加密创建的票据更容易被破解。
Kerberoasting 允许持有任何标准域账户的攻击者请求服务账户的加密票据,然后在无锁定策略且域控制器不参与的离线环境中破解其密码。
什么是Kerberoasting?
它能成功攻击保护薄弱的账户,且76%的组织未能完全管理或监控包括服务账户在内的非人类身份,根据Netwrix 2026 Data and Identity Security Report。
攻击始于攻击者可以通过 LDAP reconnaissance 构建的那些账户列表。
Kerberoasting 是一种Active Directory(AD)攻击,将普通的Kerberos功能变成破解密码的机会。Kerberos允许任何经过身份验证的用户从域控制器请求服务票证,该票证使用从服务帐户密码派生的密钥进行加密。
攻击者如何使用Kerberoasting提取服务账户密码
提取分为四个步骤,Rubeus 和 Impacket 的 GetUserSPNs.py 将前三步合并为一个命令,而 Hashcat 负责第四步。
1. 查找具有SPN的账户
2. 请求SPN的服务票证
攻击者收集这些票据后,可以离线猜测密码,直到其中一个被解密。目标是具有 service principal names (SPNs) 的用户账户,包括大多数 service accounts。该攻击无需提升权限即可启动。
拥有任何域账户的攻击者可以通过LDAP查询、PowerShell查询或Active Directory模块列出带有SPN的账户。Rubeus和GetUserSPNs.py也会自行枚举kerberoastable账户,且Rubeus可以在不发送票据请求的情况下报告其统计信息。
SPN以三个部分命名服务实例,如 MSSQLSvc/jefflab-sql02.jefflab.local:1433,分别表示服务类别、主机和端口。服务类别暗示了被破解账户可以访问的内容,例如MSSQLSvc的数据库访问。
两行PowerShell请求命名的SPN票据,Windows将其存储在内存中。
Rubeus 自动请求每个kerberoastable账户,并能将结果写入文件。
Kerberos验证身份,并将授权留给服务(RFC 4120),因此域控制器在发放票据之前不会检查请求者是否可以使用该服务。因此,任何经过身份验证的用户都会收到一个使用从服务账户密码派生的密钥加密的票据。
3. 提取服务工单
Impacket's GetUserSPNs.py 使用其 -request 选项执行相同操作,该选项以 John the Ripper 和 Hashcat 可接受的格式输出票证。
当存在禁用Kerberos预认证的账户时,Rubeus的/nopreauth选项通过该账户发送AS-REQ(认证服务请求)消息来请求服务票证。
4. 破解票据
使用上述PowerShell命令请求的票证会保存在内存中,直到攻击者导出它。 Mimikatz 列出当前会话中的票证,并通过单个命令将其写入文件以供离线破解。
使用 -request 的 Rubeus 和 GetUserSPNs.py 会跳过此步骤,因为它们直接输出可破解的哈希。
为什么票据加密类型很重要
破解在攻击者自己的硬件上运行,因此不适用锁定策略,域控制器在票据请求后不会看到任何内容。Hashcat针对每个票据测试密码猜测,当猜测成功解密时,恢复明文密码。它接受GetUserSPNs.py输出的格式,并为每种加密类型提供单独的模式。
Netwrix Threat Prevention 实时阻止 Active Directory 上的 DCSync、Kerberoasting 和 Pass-the-Hash 攻击。请求演示。
RC4票据破解最快
票据的加密类型,RC4(Rivest Cipher 4)或AES(Advanced Encryption Standard),决定了攻击者猜测的速度,微软在2026年更改了默认设置。
攻击者可以请求支持AES的账户使用RC4
AES票据减缓猜测速度,但仍易受弱密码攻击
RC4票据的密钥是账户的NT LAN Manager (NTLM)哈希,即密码的无盐哈希(RFC 4757)。没有盐,同一密码为每个账户生成相同的密钥,每次猜测都需要一次哈希计算。
Rubeus 默认请求每个账户支持的最高加密类型,但其 /usetgtdeleg 选项会为支持 AES 的账户请求 RC4 凭证,/rc4opsec 选项则跳过启用 AES 的账户。
Impacket的GetUserSPNs.py默认也会请求RC4,除非设置了-no-rc4。将服务账户支持的加密类型中移除RC4可以关闭该降级路径。
这三种类型都可以被破解,因此密码的长度和随机性决定了结果。
2026年4月更新更改了域控制器的默认设置
保护服务帐户免受Kerberoasting攻击
AES密钥来自默认运行4,096次迭代的加盐密钥派生(RFC 3962),使每次猜测成本更高。Rubeus的/aes选项针对启用AES的账户并请求其AES票据,Hashcat则为每种票据加密类型提供了独立模式。
此更改不会影响通过该属性明确允许 RC4 的帐户,且明确设置的域默认值将按原文保留。这些帐户仍然可以接收 RC4 票据,因此应优先找到它们。
Microsoft 的更新 KB5073381 于 2026 年 1 月开始记录审核事件。2026 年 4 月 14 日,它更改了域控制器的默认设置,使得没有明确 msDS-SupportedEncryptionTypes 值的账户被假定仅支持 AES-SHA1,并且 2026 年 7 月及以后发布的更新不再支持允许管理员回滚更改的注册表值。
每个控制限制攻击的不同部分,且全部使用原生的Active Directory和Windows功能。
将服务帐户迁移到托管帐户
为其余部分设置长随机密码
重置密码并强制执行 AES
Netwrix关于BadSuccessor攻击,该攻击滥用dMSA进行权限提升,建议在部署前审计谁拥有组织单位上的CreateChild、WriteProperty、WriteDACL、GenericAll和WriteOwner权限。
组托管服务账户(gMSAs)使用Active Directory轮换的120字符随机密码,因此攻击者没有弱点可猜测。委派的托管服务账户(dMSAs)也由Active Directory管理凭据。
对于无法移动的账户,MITRE ATT&CK建议密码理想长度为25个字符或以上。随机生成与长度同样重要,因为破解字典是基于人们选择的密码构建的。
AES 密钥在设置或更改密码时生成,因此密码早于 AES 支持的账户在重置之前没有密钥,而仅 AES 账户没有密钥则无法接收票据。
删除账户不需要的SPN
在限制每个服务之前先进行测试,因为不支持AES的服务(包括某些非Windows设备)在移除RC4后将停止认证。
首先重置密码,然后检查帐户的 msDS-SupportedEncryptionTypes 属性中是否有明确的 RC4 设置,并将其限制为 AES128 和 AES256(值24)。
用户账户上的每个SPN都会使该账户可被请求,因此请列出所有SPN并将每个与正在运行的服务进行比较。
控制谁可以添加SPN
限制服务账户权限
记录服务工单请求
krbtgt 账户按设计出现在结果中,不应更改。对于指向已退役主机或已停用应用程序的其他 SPN,请使用 setspn -L <account> 进行检查,并使用 setspn -D <SPN> <account> 删除。
在targeted Kerberoasting中,拥有GenericAll、GenericWrite、WriteProperty或Validated Write to Service Principal Name权限的攻击者会向账户添加SPN,使该账户可被攻击。请检查服务账户的访问控制列表,并移除不管理该账户的用户的这些权限。内置的Account Operators组成员通常拥有这些权限。
在域控制器上启用Audit Kerberos Service Ticket Operations子类别,该类别将每个请求记录为事件ID 4769。MITRE建议监控使用RC4的异常请求,显示为Ticket Encryption Type 0x17,而AES票据显示为0x11或0x12。
未经预认证通过账户进行roasting时,会发送AS-REQ消息,因此这些请求会记录为事件ID 4768,并且同样的RC4检查适用于它们。
破解的密码会让攻击者获得该账户的所有权限。请将服务账户从诸如Domain Admins等特权组中移除,并仅授予服务所需的权限,遵循最小权限原则。这项工作属于更广泛的Active Directory安全加固范畴。
Microsoft的Kerberos-Crypto存储库包含一个Get-KerbEncryptionUsage.ps1脚本,该脚本读取两种事件类型,使用-Encryption RC4和-SearchScope AllKdcs运行时,会列出所有域控制器上的RC4请求。
Netwrix如何帮助防御Kerberoasting
实时阻止Kerberoasting尝试
票据加密类型 | Hashcat 模式 |
|---|---|
|
RC4 (etype 23) |
13100 |
|
AES128 (etype 17) |
19600 |
|
AES256 (etype 18) |
19700 |
Netwrix产品在Windows原生设置之外增加了三项控制:阻止攻击、检测后续行为,以及评估Active Directory中被利用的弱点。
检测基于身份的攻击
Netwrix Threat Prevention 在 Kerberoasting、DCSync 和 Pass-the-Hash 针对 Active Directory 的尝试成功之前阻止它们。这为团队提供了攻击时的执行点,这是日志审查无法提供的。
评估Active Directory安全态势
从仍允许 RC4 的账户开始
Netwrix Threat Manager识别凭据盗窃、横向移动和权限提升,这些都是基于身份的攻击,可能发生在服务账户密码被破解之后。它还会检测何时向特权账户添加SPN,这是针对性Kerberoasting的设置步骤。
Kerberoasting只需要一个弱的服务账户密码,因此防御最好按账户逐个应用。
Netwrix PingCastle 评估Active Directory安全性,识别配置错误、攻击路径和权限暴露。
无法转为托管账户的账户需要长且随机的密码,以抵御离线猜测。工单请求是防御者仍能观察到的唯一步骤,因此记录它可以覆盖密码管理无法覆盖的部分。
在微软2026年4月的默认更改后,明确允许RC4的账户,无论是在账户上还是通过明确设置的域默认,仍然可以接收RC4票据,因此它们优先。将可移动的账户迁移到托管账户,然后重置其余账户并限制为AES。
请求演示,了解 Netwrix Threat Prevention 如何在 Kerberoasting 攻击成功前阻止针对您的 Active Directory 服务帐户的尝试。
关于使用Kerberoasting提取服务账户密码的常见问题
分享到
了解更多
关于作者