
Burp、mitmproxy、またはChrome DevToolsのキャプチャからOAuth 2.0、OIDC、およびMicrosoft Entra IDトークンを分析・追跡します。トークンのライフサイクルを可視化し、リスクの高いスコープを検出し、インタラクティブなダッシュボードを通じてリプレイ用にトークンをエクスポートします。
キャプチャしたネットワークトラフィック全体にわたって OAuth 2.0、OIDC、および Microsoft Entra ID トークンを追跡します。Burp Suite の XML エクスポート、mitmproxy フローファイル、またはライブの Chrome DevTools Protocol ストリームを単一の SQLite データベースに取り込み、トークンのフィルタリング、交換の追跡、リスクの高いスコープの特定、リプレイ用のトークンエクスポート、トークンライフサイクルの Mermaid グラフとしての可視化を行うインタラクティブな Web ダッシュボードを提供します。
ステータス: TATS は個人利用 / エンゲージメント利用において安定しています。Microsoft 365 / Entra エコシステム (FOCI、BroCI/NAA、ESTSAUTH セッション Cookie、entrascopes.com によるエンリッチメント) に最適化されていますが、標準的な OAuth/OIDC トラフィックであれば何でも動作します。
長い Microsoft 365 または Azure セッションを Burp / mitmproxy 経由でプロキシすると、結果として得られるキャプチャは膨大になり、ほとんどのツールは次のいずれかです:
このツールは、観測されたすべての access / refresh / id トークンを抽出し、ソース間で同じトークンを相関させられるようにフィンガープリントを付与し、JWT クレームをデコードし、Microsoft のクライアント / リソース GUID を entrascopes.com に対して解決し、全体像を単一のダッシュボードとして描画します — これには FOCI のクロスアプリ交換や BroCI のネストされたアプリのトークン発行を追跡するリフレッシュトークンチェーン表示も含まれます。
このプロジェクトは主に研究および教育目的を意図していますが、コマンドプレビューやトークンエクスポート機能など、一部の攻撃的ツーリングを支援できるオプションも提供します。
ingest — Burp Suite の「Save items」XML エクスポートmitm — mitmproxy の .mitm フローファイル (HTTP および WebSocket フレーム)cdp — DevTools Protocol 経由で Chrome / Edge にライブ接続
(リアルタイムで、プロキシ CA なしで TLS 復号済みの HTTP および WebSocket フレームをキャプチャ。ブラウザレベルの自動アタッチにより、既存のすべてのタブと実行中に開かれたすべてのタブを追跡)--append を付けて実行することで既存のデータベースにマージできます。トークンはアップサートされ (使用回数 + 観測されたライフタイムが累積)、イベントと交換は追記され、行の source_tag にはそのトークンを観測したすべてのパスが記録されます。pip install mitmproxy)。access_token、refresh_token、id_token) と Cookie 名のヒューリスティックがトークンタイプを決定します。ESTSAUTH、ESTSAUTHPERSISTENT、ESTSAUTHLIGHT、SignInStateCookie`) はリフレッシュ相当のトークンとして明示的に認識されます (そうでなければ、汎用的な「auth」Cookie ヒントによって誤分類されるでしょう)。foci フィールドを介して検出されます。brk_client_id、brk_redirect_uri、および brk-<guid>:// リダイレクトスキームを介して検出されます。--enrich フラグは https://entrascopes.com/ から firstpartyscopes.json と resources.json を取得し、appid / azp / aud GUID をクリック可能なリンク付きの分かりやすい名前へと解決します。upn / preferred_username / unique_name / email / name によるトークンのバケット化。sub@iss または oid にフォールバックし、アプリ専用および不明な ID のバケットを別途表示します。各 ID 行は、そのユーザーが 2 つ以上の source_tag に現れる場合に captures バッジ (クロスキャプチャ生存、--append の主要な研究シグナル) を表示し、さらに first_seen → last_seen のスパンと、Sequence-diagram タブでそのユーザーのすべてのトークンをハイライトする timeline ボタンを表示します。appid / azp / フォームボディの client_id / brk_client_id / brk_nested_id)。FOCI / brokerable / broker / nested バッジ付き。aud クレーム。可能な場合は entrascopes のリソース名に解決されます。tid 値。scp / scope / roles を、影響度の高い Microsoft Graph アクセス許可と Azure リソーススコープの厳選されたウォッチリストに対してチェックします。aud クレームと一致しないホストで使用されたすべての (token, host) ペアにフラグを立てます (資格情報の漏洩または誤用を示唆)。amr) — pwd / mfa / pop / smartcard の分布。xms_cc=CP1)、proof-of-possession バインディング (cnf クレーム、オーディエンス間での共有 kid 検出付き)、ステップアップ認証要件 (acrs)、および acr 認証コンテキストレベルにフラグを立てます。各行はクリック可能で、そのマーカーを持つトークンのみに Tokens タブをフィルタリングします。⚠ priv バッジを付けます — FOCI / BroCI スタイルの特権拡大の研究シグナルです。source_tag ごとのトークン数。各取り込みパスから何行が来たかを確認できます。roadtx describe、roadtx auth、curl、Python requests、PowerShell Invoke-RestMethod のコピー&ペースト用スニペットを含むコマンドプレビューブロックを備えたインラインパネルが展開されます。ws-frame-sent / ws-frame-received、ソース ws[body_json[<key>]]、および 1 つの WebSocket 接続内のすべてのフレームをグループ化する ws_session_id を持つイベントを生成します。データベースは、観測されたすべてのトークンの SHA-256 フィンガープリント (先頭 12 桁の 16 進文字) と 12 文字のプレフィックスを保存します。完全なトークン文字列が入力ファイルから外に出ることはありません。
デコードされた JWT クレームの内容 (ヘッダー + ペイロード、oid、sub、upn、email、tid、スコープリストなどを含む) は、分析のまさに目的であるため、デフォルトでそのまま保存されます。JWT が存在する場合は常に、データベースおよび共有されたダッシュボード URL を機密として扱ってください。
--redact-claims (ingest、mitm、および cdp で利用可能) は、データベースに到達する前に、リストされたクレーム値を安定したハッシュプレースホルダーに置き換えます。デフォルトのフィールドリストは sub、oid、upn、email、name、unique_name、preferred_username、emails、mail、ipaddr、given_name、family_name をカバーします。明示的なカンマ区切りリスト (例: --redact-claims sub,upn,oid) を渡してデフォルトを上書きします。同じ入力は常に同じプレースホルダーにマッピングされるため、ダッシュボードの Users / Tenants のグループ化はユーザーを明かすことなく機能し続けます。
--store-tokens (ingest、mitm、および cdp で利用可能、デフォルトではオフ) は、ダッシュボードが以下を提供できるように、完全なトークン文字列をデータベースに書き込むことを選択します:
.roadtools_auth にドロップすると、任意の roadtx サブコマンドがそれを拾い上げます)。roadtx describe、roadtx auth、curl、Python requests、PowerShell Invoke-RestMethod — を、トークンの実際の tid、appid、および aud クレームを使用して事前入力します。/api/export?fps=... は、下流のツーリング用に最大 200 個のトークン (raw、claims、events、exchanges) を 1 つの JSON バンドルで返します。これを有効にすると、データベースはまるごと資格情報になります — キャプチャされた任意のセッションをリプレイするために必要なすべてのバイトがそこに含まれます。--redact-claims と組み合わせてデコードされた JWT ビューをスクラブできますが、生のトークンには依然としてその内部にエンコードされた未編集のクレームが含まれていることに注意してください。フラグがオフの場合でも、ダッシュボードのコマンドプレビューブロックはレンダリングされますが、<TOKEN> がプレースホルダーとして使用されるため、構文リファレンスとして機能します。エクスポートボタンは再取り込みを促すヒントを表示します。
dataclasses を使用)。3.12 でテスト済み。python -m tats を直接実行します。| 必要なもの | インストール |
|---|---|
mitm サブコマンド | pip install mitmproxy |
| Chrome / Edge からのライブキャプチャ | なし — stdlib の WebSocket クライアントを使用 |
--enrich (entrascopes.com) | なし — urllib.request を使用 |