
OAuth 2.0, OIDC 및 Microsoft Entra ID 토큰을 Burp, mitmproxy 또는 Chrome DevTools 캡처에서 분석하고 추적합니다. 대화형 대시보드를 통해 토큰 수명 주기를 시각화하고, 위험한 범위를 탐지하며, 재생을 위해 토큰을 내보냅니다.
캡처된 네트워크 트래픽에서 OAuth 2.0, OIDC 및 Microsoft Entra ID 토큰을 추적합니다. Burp Suite XML 내보내기, mitmproxy 플로우 파일 또는 실시간 Chrome DevTools Protocol 스트림을 단일 SQLite 데이터베이스로 수집한 다음, 토큰 필터링, 교환 흐름 추적, 위험한 범위 식별, 재생을 위한 토큰 내보내기, 그리고 토큰 수명 주기를 Mermaid 그래프로 시각화하는 대화형 웹 대시보드를 제공합니다.
상태: TATS는 개인/엔지니어링 사용에 안정적입니다. Microsoft 365 / Entra 에코시스템(FOCI, BroCI/NAA, ESTSAUTH 세션 쿠키, entrascopes.com 강화)에 최적화되어 있지만 표준적인 OAuth/OIDC 트래픽에서도 작동합니다.
Burp / mitmproxy를 통해 긴 Microsoft 365 또는 Azure 세션을 프록시하면 결과 캡처가 방대해지며 대부분의 도구는 다음 중 하나에 해당합니다:
이 도구는 관찰된 모든 액세스 / 리프레시 / ID 토큰을 추출하고, 소스 간에 동일한 토큰을 상호 연관시킬 수 있도록 지문을 생성하며, JWT 클레임을 디코딩하고, entrascopes.com에 대해 Microsoft 클라이언트 / 리소스 GUID를 확인하며, 전체 그림을 단일 대시보드로 렌더링합니다 — 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) 및
쿠키 이름 휴리스틱이 토큰 유형을 결정합니다.ESTSAUTH, ESTSAUTHPERSISTENT,
ESTSAUTHLIGHT, SignInStateCookie)는 리프레시와 동등한 토큰으로
명시적으로 인식됩니다(그렇지 않으면 일반 "auth" 쿠키 힌트로 잘못 분류됨).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에 나타날 때 캡처 배지를 표시하고(교차 캡처 생존,
핵심 --append 연구 신호) first_seen → last_seen 범위와
해당 사용자의 모든 토큰을 시퀀스 다이어그램 탭에서 강조하는
타임라인 버튼을 표시합니다.appid / azp / 폼 본문
client_id / brk_client_id / brk_nested_id)에 FOCI / 브로커 가능 /
브로커 / 중첩 배지 표시.aud 클레임을 가능한 경우 entrascopes
리소스 이름으로 확인.tid 값.scp / scope / roles를
선별된 고영향 Microsoft Graph 권한 및 Azure 리소스 범위 목록과 대조.aud 클레임과 일치하지 않는 호스트에서
사용된 모든 (토큰, 호스트) 쌍을 플래그(자격 증명 유출 또는 오용 시사).amr) — pwd / mfa / pop / smartcard 분포.xms_cc=CP1), 소유 증명 바인딩
(cnf 클레임, 대상 간 공유 kid 감지 포함), 단계 상승 인증 요구 사항
(acrs) 및 acr 인증 컨텍스트 수준을 플래그합니다. 각 행은 클릭 가능하며
해당 마커를 가진 토큰만 표시하도록 토큰 탭을 필터링합니다.⚠ 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>]] 및 하나의 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)을 전달하세요.
동일한 입력은 항상 동일한 자리 표시자로 매핑되므로 사용자를 공개하지 않고도
대시보드의 사용자 / 테넌트 그룹화가 계속 작동합니다.
--store-tokens(ingest, mitm, cdp에서 사용 가능, 기본적으로
꺼짐)은 전체 토큰 문자열을 데이터베이스에 기록하여 대시보드가 다음을
제공할 수 있게 합니다:
.roadtools_auth에
넣으면 모든 roadtx 하위 명령이 이를 인식).tid, appid 및 aud 클레임을 사용하여 가장 일반적인
재생 호출 — roadtx describe, roadtx auth, curl, Python requests,
PowerShell Invoke-RestMethod —을 미리 채우는 토큰별 명령 미리보기 블록./api/export?fps=....이 기능을 활성화하면 데이터베이스가 일괄 자격 증명이 됩니다 — 캡처된 세션을
재생하는 데 필요한 모든 바이트가 포함됩니다. --redact-claims와 결합하여
디코딩된 JWT 보기를 정리할 수 있지만 원시 토큰에는 여전히 수정되지 않은
클레임이 인코딩되어 있다는 점을 인지하세요. 플래그가 꺼져 있을 때 대시보드의
명령 미리보기 블록은 여전히 렌더링되며 <TOKEN>을 자리 표시자로 사용하여
구문 참조로 작동합니다; 내보내기 버튼은 재수집을 위한 힌트를 렌더링합니다.
dataclasses 사용).
3.12에서 테스트됨.python -m tats를 직접 실행하세요.| 필요 | 설치 |
|---|---|
mitm 하위 명령 | pip install mitmproxy |
| Chrome / Edge 실시간 캡처 | 없음 — 표준 라이브러리 WebSocket 클라이언트 사용 |
--enrich (entrascopes.com) | 없음 — urllib.request 사용 |
체크아웃에서 실행(설치 없음):```bash git clone tats cd tats python -m tats --help
대시보드의 HTML / CSS / JS는 `tats/static/`에 있으며
첫 번째 import 시 로드되므로 빌드 단계가 필요하지 않습니다. 체크아웃 디렉토리에서 모듈을 직접 실행하기만 하면 됩니다.
**패키지로 설치(`tats` 콘솔 스크립트 제공):**```bash
pip install . # core only
pip install .[mitm] # + mitmproxy flow file support
pip install .[test] # + pytest for the test suite
pip install .[all] # everything
설치 후에는 짧은 이름으로 도구를 호출할 수 있습니다:```bash tats ingest engagement.xml -o tokens.db --enrich tats serve tokens.db
Burp / CDP 경로만 필요하다면 이 파일은 Python 표준 라이브러리만으로 완전히 자급자족하므로
별도의 설치나 추가 기능이 필요하지 않습니다.
---
## 빠른 시작