토큰 랜덤성 평가
예측 가능한 세션 쿠키, CSRF 토큰, 리셋 코드는 공격자가 위조하거나 추측할 수 있는 것입니다. Sequencer는 그런 토큰을 수백 개 수집해 각각이 실제로 지닌 예측 불가능성을 채점합니다. 이 플레이북은 등급 하나를 처음부터 끝까지 — 겨냥하고, 수집하고, 읽고, 내보내기 — 약 10분에 실행합니다. 대부분은 서버가 샘플을 내주기를 기다리는 시간입니다.
시작하기 전에. 먼저 엔게이지먼트 준비로 대상에 스코프를 잡으세요 — Sequencer는 라이브 요청을 여러 번 재전송하며, 스코프 밖에서는 발동하지 않습니다. 등급을 매길 토큰을 응답에서 설정하는 플로우가 하나 필요합니다(세션이나 CSRF 토큰의
Set-Cookie). 토큰은 권한이 있는 대상에서만 수집하세요. 샘플 하나하나가 갓 발급된 실제 자격 증명입니다.
1. Sequencer를 토큰에 겨냥하기 {#1-point-the-sequencer-at-a-token}
Sequencer 탭은 기본적으로 숨겨져 있습니다 — 매일 쓰는 루프의 일부가 아니라 가끔 꺼내 쓰는 워크벤치입니다. 탭 바 ⋯ 메뉴나 Ctrl-P → Go to Sequencer로 드러냅니다.
캡처한 플로우로 먹입니다. History에서 응답이 토큰을 설정하는 플로우를 선택한 뒤 Space → Send to Sequencer를 누릅니다. gori가 유력한 세션 쿠키를 자동 감지하고 CONFIG 패널에 데려다 놓습니다. 추측이 틀렸다면 c로 토큰 위치를 다시 설정하세요 — Cookie, Header, Regex, Position, JSONPath 중 하나를 고릅니다.
추출은 토큰의 변하는 영역만 겨냥하세요. 실제 토큰은 골격을 지닙니다 — sess_v1_ 접두사, 버전 바이트, 패딩 — 이는 샘플 전체에서 변하지 않습니다. 그 고정 구조를 랜덤인 양 세면 등급이 끌려 내려가고 비트 단위 테스트가 어긋날 수 있으므로, 토큰 서술자는 실제로 움직이는 부분만 덮어야 합니다.
체크포인트. CONFIG 패널에 소스 플로우와 방금 고른 토큰 위치가 표시되고, SAMPLES 패널은 아직 비어 있습니다.
2. 샘플 수집하기 {#2-collect-samples}
Ctrl-R을 눌러 수집합니다. gori는 소스 요청을 몇 번이고 재전송하며 각 응답에서 토큰을 뽑아내, 목표 개수에 이를 때까지 반복합니다. Ctrl-X로 일찍 멈춥니다. 수집은 기본적으로 동시성 1로 돌아갑니다. 세션 토큰은 흔히 상태를 가지기 때문입니다 — 요청마다 서버 측 카운터가 전진합니다 — 병렬로 쏘면 테스트가 의존하는 순서가 뒤섞입니다. 엔드포인트가 무상태일 때만 올리세요.
같은 수집을 헤드리스로 — 플로우 42를 재전송하고, SESSIONID 쿠키를 추출하고, 토큰 500개를 모읍니다:
gori run sequence 42 --cookie SESSIONID --count 500
체크포인트. 재전송이 들어오면서 SAMPLES 개수가 목표를 향해 올라갑니다.
3. 등급 읽기 {#3-read-the-grade}
ANALYSIS 패널은 유효 엔트로피(effective entropy)를 비트로 앞세웁니다 — 토큰당 실제 예측 불가능성의 보수적 추정치입니다 — 그리고 거기서 따라 나오는 등급을 보여 줍니다: Secure(≥ 88비트), Moderate(≥ 60), Weak(≥ 30), Critical(30 미만). 그 아래에는 gori가 토큰 비트스트림에 돌린 통계 테스트 묶음(monobit, runs, chi-square, 직렬 상관, 압축 등)이 놓입니다.
이렇게 읽습니다. 엔트로피 수치가 높고 모든 행이 통과하면, 토큰이 gori가 가진 모든 테스트에 랜덤하게 보인다는 뜻입니다 — 위조할 지름길이 나오지 않았습니다. 다만 중복이나 연속 토큰이 하나라도 있으면 엔트로피가 아무리 높게 읽혀도 판정이 곧장 Critical로 떨어집니다. 두 번 본 토큰은 예측할 수 있는 토큰이기 때문입니다. 작은 샘플(쓸 만한 토큰 약 20개 미만)은 강한 실패를 경고로 완화하고 등급에 상한을 씌우므로, 깨끗한 등급을 믿기 전에 더 모으세요.
체크포인트. ANALYSIS 패널에 전체 등급 하나와 그 뒤의 테스트별 표가 표시됩니다.
4. 판정 내보내기 {#4-export-the-verdict}
수집한 토큰은 살아 있는 자격 증명이므로 gori는 그것을 디스크에 절대 쓰지 않습니다 — 세션과 함께 사라집니다. 판정은 그래서는 안 됩니다. ⇧E로 원하는 경로에 Markdown 리포트를 내보내거나(팔레트는 같은 리포트를 JSON으로 제공합니다), Space → i로 Issue로 정리합니다. 이때 Critical은 critical, Weak는 high, Moderate는 medium, Secure는 info로 매핑됩니다. 둘 중 어느 것도 토큰 값을 담지 않습니다. 리포트는 빈도표와 판정으로 만들어지므로, 새어 나갈 샘플이 그 안에 없습니다.
체크포인트. 저장된 등급 — 리포트든 Issue든 — 을 손에 넣었고, 뒤에 남은 원본 토큰은 하나도 없습니다.
다음 단계
- OAST로 블라인드 취약점 확인: 응답에 드러나지 않는 버그를 위한 다음 워크벤치
- Sequencer: 토큰 위치, 테스트 묶음, 구조 감지의 전체 레퍼런스
- CLI Reference: 붙여넣은 목록을 위한
--tokens를 포함한 모든gori run sequence플래그