본문으로 건너뛰기
피드

ChatGPT의 Cloudflare Turnstile 분석: React 내부 상태까지 검사하는 봇 탐지

security 약 6분
vote
0
댓글
북마크

Cloudflare Turnstile이 ChatGPT에서 377개 프로그램을 복호화한 결과, 브라우저 핑거프린팅을 넘어 React 내부 상태(__reactRouterContext 등)까지 검증하는 애플리케이션 레벨 봇 탐지를 수행하고 있었음. XOR 암호화 키가 동일 페이로드에 포함되어 분석 자체는 방지하지 못하는 구조임.

  • 1

    377개 Turnstile 프로그램 100% 복호화 성공

  • 2

    3계층 55개 속성 검사: 브라우저 핑거프린트, Cloudflare 네트워크, React 앱 상태

  • 3

    React Router 내부 상태 검증 — SPA를 실제 렌더링하지 않는 봇은 차단됨

  • 4

    XOR 암호화 키가 같은 데이터 스트림에 포함 — 난독화 수준

  • 5

    Signal Orchestrator로 키 입력 타이밍·마우스 속도 등 행동 생체인식도 수행

ChatGPT의 Cloudflare Turnstile 봇 탐지 — React 내부 상태까지 검사함

  • ChatGPT 메시지를 보낼 때마다 Cloudflare Turnstile 프로그램이 브라우저에서 조용히 실행됨
    • 네트워크 트래픽에서 377개 프로그램을 복호화해 분석한 결과
    • 표준 브라우저 핑거프린팅을 넘어서는 수준이었음

3계층 55개 속성 검사

  • Layer 1 — 브라우저 핑거프린트 (38개 속성)
    • WebGL 8개: UNMASKED_VENDOR/RENDERER, debug_renderer_info 등
    • 화면 8개: colorDepth, pixelDepth, width/height, availWidth/Height 등
    • 하드웨어 5개: hardwareConcurrency, deviceMemory, maxTouchPoints 등
    • 폰트 측정 4개: 숨겨진 div 생성 → 폰트 렌더링 크기 측정 → 제거
    • DOM 프로빙 8개, 스토리지 5개 (localStorage에 핑거프린트 영구 저장)
  • Layer 2 — Cloudflare 네트워크 (5개 속성)
    • cfIpCity, cfIpLatitude/Longitude, cfConnectingIp, userRegion
    • Cloudflare Edge를 거치지 않으면 값이 없거나 불일치
  • Layer 3 — 애플리케이션 상태 (3개 속성) ← 핵심 발견
    • __reactRouterContext, loaderData, clientBootstrap
    • React Router v6+가 DOM에 부착하는 내부 구조체
    • ChatGPT React 앱이 완전히 렌더링·hydration 되어야만 존재
    • 브라우저 API만 스텁하고 React를 실행하지 않는 봇은 실패함

중요

> Turnstile은 브라우저 계층이 아닌 애플리케이션 계층에서 봇 탐지를 수행함. 브라우저 핑거프린트를 완벽히 위조해도 ChatGPT SPA를 실제로 렌더링하지 않으면 차단됨.

암호화 구조 — 키가 페이로드 안에 있음

  • Turnstile 바이트코드는 암호화되어 도착함
    • 외부 레이어: turnstile.dx (매 요청 28,000자 base64)를 prepare 요청의 p 토큰으로 XOR → 89개 VM 명령어
    • 내부 레이어: 19KB 암호화 blob, XOR 키는 바이트코드 내 float 리터럴로 포함됨
    • 50개 요청 검증 결과 50/50 성공 — 키가 같은 데이터 스트림에 존재
  • 복호화에 HTTP 요청/응답 외에 아무것도 필요 없음
    • 캐주얼한 검사는 방지하지만, 분석은 방지하지 못함

추가 방어 레이어

  • Signal Orchestrator (271개 명령어): 행동 생체인식 레이어
    • keydown, pointermove, click, scroll, paste, wheel 이벤트 리스너
    • 36개 window.__oai_so_* 속성으로 키 입력 타이밍, 마우스 속도, 스크롤 패턴, 유휴 시간 추적
  • Proof of Work (25개 필드 핑거프린트 + SHA-256 hashcash)
    • 난이도 400K~500K, 72%가 5ms 이내 solve
    • 7개 바이너리 탐지 플래그 (ai, createPRNG, cache, solana 등) — 100개 샘플 전부 0

분석 결과 수치

  • 복호화 프로그램: 377/377 (100%)
  • 관찰된 고유 사용자: 32명
  • 프로그램당 속성: 55개 (전 샘플 동일)
  • 프로그램당 명령어: 417~580개 (평균 480)
  • 고유 XOR 키 (50개 샘플): 41개
  • SO 행동 속성: 36개
  • PoW 핑거프린트 필드: 25개

기술 맥락

Cloudflare Turnstile이 단순 CAPTCHA 대체를 넘어 애플리케이션 레벨 봇 탐지로 진화한 사례임. React 내부 상태(__reactRouterContext 등)를 검증한다는 것은 headless 브라우저나 API 직접 호출 방식의 봇이 근본적으로 차단된다는 의미임. XOR 암호화의 키가 동일 스트림에 포함되어 있어 보안보다는 난독화에 가까운 구조이지만, 운영 목적(정적 분석 방지, 요청별 고유 토큰 생성, 체크 항목 은닉)에는 충분히 효과적임.

봇 탐지가 브라우저 레벨에서 애플리케이션 레벨로 진화한 중요한 사례임. SPA 기반 서비스 개발 시 프레임워크 내부 상태가 보안 시그널로 활용될 수 있다는 점을 인지해야 함.

댓글

댓글

댓글을 불러오는 중...

security

엘에이 경찰, 사생활 침해 논란 끝에 플록 번호판 감시 계약 종료

엘에이 경찰이 번호판 인식 카메라 업체 플록 세이프티와의 3년 계약을 연장하지 않기로 했어. 시민권, 프라이버시, 데이터 보관과 공유 문제를 해결하지 못했다는 게 핵심 이유야. 플록은 미국 전역에 최소 8만 대 카메라망을 깔아 경찰과 연방기관이 차량을 추적할 수 있게 해왔고, 오탐·보안 사고·이민 단속 악용 의혹까지 겹치며 압박이 커졌어.

security

크로미움 148부터 Math.tanh 한 번으로 운영체제 지문이 새는 문제

크로미움 148 이후 V8이 Math.tanh 계산을 자체 구현 대신 운영체제의 수학 라이브러리에 맡기면서, 같은 입력값도 리눅스·맥·윈도우에서 마지막 비트가 달라지는 지문 신호가 생겼다. 이 차이는 User-Agent로 맥이라고 주장하면서 리눅스 수학 결과를 내는 식의 위장을 바로 들키게 만든다. CSS 삼각함수와 웹 오디오까지 보면 브라우저 수학 경로가 꽤 복잡하게 갈라지고, 제대로 흉내 내려면 실제 운영체제 라이브러리의 비트 단위 동작까지 맞춰야 한다.

security

출입통제도 클라우드 구독제로 간다…제로트러스트·AI 분석이 승부처

기업 출입보안이 사업장별 서버를 두는 방식에서 클라우드 기반 서비스형 출입통제(ACaaS)로 옮겨가고 있다. 시장은 2026년 17억8000만 달러에서 2030년 31억9000만 달러로 커질 전망이고, 제로트러스트·모바일 인증·AI 출입 분석·스마트빌딩 통합이 핵심 경쟁 포인트로 꼽힌다.

security

AWS·구글 클라우드, 양자컴퓨터 대비해 암호 체계 갈아엎는 중

AWS와 구글 클라우드가 양자컴퓨터 시대를 대비해 기존 공개키 암호와 양자내성암호를 함께 쓰는 하이브리드 전환을 시작했다. 핵심 배경은 지금 훔친 암호문을 나중에 양자컴퓨터로 푸는 ‘선수집·후해독’ 공격이고, 국내도 통신·금융·국방 등 5개 분야에 45억원을 투입해 실증에 들어간다.

security

보안 점검 맡긴 AI 에이전트가 악성코드를 직접 실행할 수 있다는 경고

AI 보안 에이전트가 저장소를 검사하다가 README 같은 문서에 숨은 프롬프트 인젝션에 속아 악성 바이너리를 실행할 수 있다는 연구가 나왔다. 클로드 코드와 코덱스의 자동 모드처럼 승인 없이 명령을 수행하는 구성에서 문제가 재현됐고, 여러 모델과 공급업체를 가로질러 같은 패턴이 통했다는 점이 핵심이다.