ChatGPT, 봇 감지를 위해 React 앱 상태까지 확인한다!
ChatGPT는 Cloudflare Turnstile을 사용하여 사용자 브라우저 환경(Browser Environment)을 정밀하게 분석하여 봇을 감지함
Turnstile은 브라우저 지문(Browser Fingerprint)뿐 아니라 React 애플리케이션의 실행 여부(Execution Status)를 확인하는 방식으로 작동함
봇 감지를 위해 다양한 브라우저 속성(Browser Properties), 네트워크 정보(Network Information), React 내부 상태(React Internal State)를 수집함
커뮤니티에서는 과도한 봇 감지 시스템으로 인한 사용자 경험 저하(User Experience Degradation)에 대한 불만을 제기함
Cloudflare Turnstile의 작동 방식
분석에 따르면 ChatGPT는 Cloudflare Turnstile을 사용하여 봇을 감지한다. Turnstile은 브라우저 지문(Browser Fingerprint), 네트워크 정보(Network Information), 그리고 React 애플리케이션의 상태(React Application State)를 포함한 55가지 속성을 수집한다. 특히, React 애플리케이션이 완전히 로드되고 실행되었는지 확인하기 위해 `__reactRouterContext`, `loaderData`, `clientBootstrap`과 같은 내부 상태를 검사한다. 이는 봇이 실제 React 애플리케이션을 실행하지 않고서는 통과할 수 없도록 설계되었다.
Turnstile의 암호화 및 복호화 과정
Turnstile은 암호화된 바이트코드(Encrypted Bytecode)를 사용하여 봇 감지를 수행한다. 서버는 각 요청마다 변경되는 `turnstile.dx` 필드를 전송하며, 이 값은 `p` 토큰과 XOR 연산을 통해 복호화된다. 복호화된 바이트코드 내에는 19KB 크기의 또 다른 암호화된 블롭이 존재하며, 이 블롭은 서버에서 생성된 부동 소수점 값(Server-Generated Float)을 키로 사용하여 복호화된다. 이러한 이중 암호화는 봇 분석을 어렵게 만들지만, 분석가는 HTTP 요청과 응답만으로도 복호화할 수 있다.
수집되는 55가지 속성 분석
Turnstile은 브라우저, Cloudflare 네트워크, 그리고 React 애플리케이션의 세 계층에서 55가지 속성을 수집한다. 브라우저 지문에는 WebGL, 화면, 하드웨어, 폰트 측정, DOM 프로빙, 스토리지 관련 정보가 포함된다. Cloudflare 네트워크 정보는 IP 주소, 지역 정보 등을 포함하며, React 애플리케이션 상태는 `__reactRouterContext`, `loaderData`, `clientBootstrap`과 같은 React 내부 데이터를 활용한다. 이러한 다양한 데이터 수집(Data Collection)은 봇의 정교한 위장을 탐지하기 위한 것이다.
Sentinel의 추가적인 봇 감지 메커니즘
Turnstile 외에도 ChatGPT는 Signal Orchestrator와 Proof of Work (PoW) 메커니즘을 사용한다. Signal Orchestrator는 키 입력, 마우스 움직임, 스크롤, 붙여넣기 등의 사용자 행동을 감지하며, PoW는 25개의 지문 필드와 SHA-256 해시를 사용하여 계산 비용을 추가한다. 이러한 다중 레이어 방어(Multi-Layer Defense)는 봇의 접근을 더욱 어렵게 만들지만, 사용자 경험에 부정적인 영향을 미칠 수 있다는 지적이 제기된다.
커뮤니티의 반응 및 논쟁
커뮤니티에서는 ChatGPT의 봇 감지 시스템이 사용자 경험(User Experience)을 저해한다는 불만이 제기되었다. 특히, Cloudflare의 과도한 봇 감지 정책으로 인해 Firefox 사용자들이 캡차(Captcha)에 자주 직면하는 문제가 발생했다. 또한, ChatGPT의 긴 대화 시 속도 저하 문제와 관련하여, 프런트엔드 최적화(Frontend Optimization)의 필요성이 제기되었다. 일부 사용자는 이러한 봇 감지 시스템이 ChatGPT의 무료 API 사용을 막기 위한 것이라고 추측했다.