JavaScript 지문 인식 및 봇 탐지: 웹사이트가 당신을 식별하는 방법
핵심 요점
- JavaScript 지문 인식 50개 이상의 브라우저 특성을 수집해 고유 식별자를 생성하며, 쿠키보다 지속성이 높고 차단하기 어렵습니다
- 주요 지문 신호 Canvas, WebGL, AudioContext, 폰트, 화면 속성, Navigator API 데이터.
- 안티봇 시스템은 JS 지문 인식과 TLS 지문 인식(JA3/JA4) 행동 분석을 결합하여 높은 정확도의 봇 탐지를 수행합니다
- 헤드리스 브라우저(Puppeteer, Playwright)와 자동화 도구는 탐지 가능한 흔적 을 남기며, 지문 인식은 누락된 API, 동일한 출력, 타이밍 이상 현상을 노출합니다
- 지문 스푸핑은 가능하지만 점점 더 어려워지고 있습니다, 안티봇 시스템은 일관성 검사 로 스푸핑된 불일치 값을 포착합니다
목차
웹사이트를 방문할 때마다 브라우저는 수십 개의 고유한 특성을 자동으로 드러냅니다. 화면 해상도, GPU 모델, 설치된 폰트, 오디오 처리 방식, 브라우저가 캔버스 요소를 렌더링하는 방식까지 모두 말이죠. 이 모든 신호가 합쳐지면 브라우저 지문 이 만들어지는데, 이는 인간의 지문만큼 독특합니다.
이 기술은 현대의 봇 탐지 시스템, 사기 방지, 자동화 방어에 핵심입니다. 웹사이트를 봇으로부터 보호하려는 입장이든, 보안 시스템이 당신의 트래픽을 왜 차단하는지 이해하려는 입장이든 작동 원리를 알아야 합니다.
JavaScript 지문인식이란?
JavaScript 지문인식은 브라우저 측 JavaScript API를 사용하여 기기와 환경의 특성을 수집하고 각 브라우저 세션마다 고유한 식별자를 만드는 기술입니다. 쿠키(사용자가 삭제할 수 있음)나 IP 주소(변경되는)와 달리, 지문은 이런 특징을 가집니다:
- 지속성: 쿠키 삭제, 비공개 브라우징, 브라우저 재시작 후에도 유지됩니다
- 고유성: 50개 이상의 신호 조합이 수백만 개의 브라우저 중에서도 고유한 지문을 만듭니다
- 수동성: 사용자 상호작용 없이 눈에 띄지 않게 수집됩니다
- 위조 어려움: 한 가지 신호를 바꾸면 종종 다른 신호들과의 불일치가 감지됩니다
브라우저 지문인식의 작동 원리
지문인식 스크립트는 일반적으로 세 단계로 실행됩니다:
- 수집: JavaScript API가 브라우저 속성들을 조회합니다. navigator 객체, 화면 속성, 캔버스 렌더링, WebGL 기능, AudioContext 처리 등이 포함됩니다.
- 해싱: 수집된 값들을 결합하고 해싱(보통 SHA-256 또는 MurmurHash3)하여 간단한 지문 문자열로 만듭니다
- 비교: 해시값을 알려진 지문들과 비교합니다. 이전 방문자, 알려진 봇 도구, 또는 위조된 환경과 일치하는지 확인하는 것입니다.
주요 지문인식 신호
캔버스 지문인식
가장 강력한 지문인식 신호입니다. 숨겨진 <canvas> 요소가 텍스트, 도형, 그래디언트를 그립니다. 픽셀 단위의 출력은 GPU, 드라이버 버전, 폰트 렌더링 엔진, 안티앨리어싱 구현에 따라 다릅니다. 두 개의 다른 기기는 거의 동일한 캔버스 출력을 생성하지 않습니다.
WebGL 지문인식
WebGL은 GPU 정보(렌더러, 벤더)를 드러내고 고유한 렌더링 출력을 생성합니다. WEBGL_debug_renderer_info 확장 기능이 정확한 GPU 모델을 노출합니다. WebGL 렌더링 테스트와 결합하면 강력한 하드웨어 지문을 만들 수 있습니다.
AudioContext 지문인식
Web Audio API는 하드웨어와 소프트웨어 차이로 인해 각 기기에서 오디오 신호를 다르게 처리합니다. 오실레이터를 생성하고 출력을 분석함으로써 지문인식 스크립트는 고유한 오디오 처리 특성을 포착합니다.
폰트 지문인식
OS 버전, 언어 팩, 설치된 애플리케이션마다 고유한 폰트 모음을 추가합니다. 다양한 폰트에서 텍스트의 렌더링 너비/높이를 측정함으로써 스크립트는 어떤 폰트가 설치되어 있는지 판단하고, 폰트 기반 지문을 만듭니다.
Navigator 및 화면 속성
| 신호 | 나타내는 정보 | 엔트로피 |
|---|---|---|
| navigator.userAgent | 브라우저 버전, OS, 기기 유형 | 중간 수준 (쉽게 위조 가능) |
| navigator.language | 선호 언어 | 낮음-중간 |
| navigator.hardwareConcurrency | CPU 코어 수 | 낮음 |
| navigator.deviceMemory | RAM 용량 (대략값) | 낮음 |
| screen.width/height | 디스플레이 해상도 | 중간 |
| screen.colorDepth | 색상 깊이 지원 여부 | 낮음 |
| navigator.platform | OS 플랫폼 문자열 | 낮음 (지원 중단) |
| navigator.maxTouchPoints | 터치 기능 지원 여부 | 낮음 |
| Intl.DateTimeFormat().resolvedOptions().timeZone | 시간대 | 중간 |
추가 고가치 신호
- WebRTC 유출: VPN을 통해서도 로컬/공개 IP 주소를 노출할 수 있음
- Battery API: 배터리 수준 및 충전 상태 (프라이버시로 인해 대부분 브라우저에서 지원 중단)
- 권한 상태: 알림, 위치, 카메라 권한의 승인/거부 여부
- 클라이언트 힌트: Chrome의 User-Agent Client Hints는 구조화된 기기 데이터 제공
- CSS 미디어 쿼리: 다크 모드 선호도, 감소된 움직임, 명도 대비 선호도 감지
TLS 핑거프린팅 (JA3/JA4)
TLS 핑거프린팅은 연결 수준에서 작동하며, JavaScript가 실행되기 전에 동작함
JA3 핑거프린팅
Salesforce가 개발한 JA3는 TLS Client Hello 메시지 구성 요소를 해싱합니다. SSL 버전, 암호, 확장, 타원곡선, EC 포인트 형식을 모두 포함합니다. Chrome, Firefox, Python requests, Go http, curl 등 각 HTTP 클라이언트는 고유한 JA3 해시를 생성합니다. 이는 User-Agent 헤더가 위조되더라도 실제 클라이언트 소프트웨어를 식별합니다.
JA4 핑거프린팅
최신 JA4 표준은 JA3를 개선하여 더욱 읽기 쉬운 형식과 나은 버전 추적을 제공합니다. "t13d1715h2_8daaf6152771_b0da82dd1658" 같은 핑거프린트 문자열을 생성하며, 여기에는 TLS 버전, 암호 개수, 확장 개수, ALPN 값이 인코딩됩니다.
안티봇 시스템이 핑거프린팅을 활용하는 방법
Cloudflare Bot Management 같은 현대적 안티봇 솔루션은 Cloudflare Bot Management, Akamai Bot Manager, DataDome은 핑거프린팅을 다층 탐지 방식과 결합합니다:
- TLS 핑거프린트 확인: 실제 브라우저에서의 연결인지 HTTP 라이브러리인지 검증합니다
- JavaScript 실행: 핑거프린트 수집 스크립트를 실행합니다. JS를 실행할 수 없는 봇은 즉시 탐지됩니다
- 일관성 검증: JS 핑거프린트가 TLS 핑거프린트와 일치하는지 확인합니다. 예를 들어 JA3는 Chrome이라고 하는데 canvas는 headless라고 표시되면 차단합니다
- 알려진 봇 비교: 핑거프린트를 알려진 봇 도구 서명 데이터베이스와 비교합니다
- 행동 분석 추가: 핑거프린트 점수를 마우스 움직임, 클릭 타이밍, 스크롤 패턴과 결합합니다
Headless 브라우저 탐지
Headless 브라우저(Chrome headless, Puppeteer, Playwright)는 명백한 흔적을 남깁니다:
- navigator.webdriver: 자동화 브라우저에서는
true로 설정됩니다. 위조될 수 있지만 프로토타입 확인을 통해 탐지됩니다 - chrome 객체 누락:
window.chromeheadless Chrome에서는 없거나 불완전합니다 - 플러그인 개수: 실제 Chrome은 플러그인을 보고하지만, headless Chrome은 보통 0개입니다
- WebGL 공급자 불일치: Headless 환경은 소프트웨어 렌더러인 "Google Inc. (Google SwiftShader)"를 보고하는 경우가 많습니다
- 알림 권한: Headless 브라우저는 알림 권한을 요청할 수 없어, API 행동을 통해 노출됩니다
- Iframe contentWindow: Headless Chrome은 교차 출처 iframe 접근을 다르게 처리합니다
- 타이밍 이상: 자동화 브라우저는 비정상적으로 빠르거나 완벽하게 일정한 타이밍으로 JavaScript를 실행합니다
핑거프린트 위조 및 안티탐지
브라우저 핑거프린트를 수정하려는 여러 도구가 있습니다:
| 도구 | 방식 | 탐지 위험도 |
|---|---|---|
| GoLogin | 설정 가능한 핑거프린트 프로필이 있는 커스텀 Chromium | 중간 |
| Multilogin | 심화된 핑거프린트 커스터마이징이 가능한 브라우저 모방 | 중간 |
| Puppeteer Extra (Stealth) | 탐지 가능한 Puppeteer 흔적을 패치하는 플러그인 | 중상 |
| undetected-chromedriver | 일반적인 탐지를 회피하는 수정된 ChromeDriver | 중상 |
| 브라우저 확장프로그램 | Canvas 차단, WebGL 스푸핑 | 높음 (탐지 가능한 흔적 추가) |
웹사이트 소유자를 위한 방어 전략
웹사이트를 봇으로부터 보호하고 있다면 계층화된 방어의 일부로 핑거프린팅을 구현하세요.
- 관리형 솔루션 사용: Cloudflare, Akamai, DataDome은 대규모로 핑거프린팅을 처리합니다
- 속도 제한과 결합: 핑거프린팅은 봇을 식별하고, 속도 제한은 그 영향을 제약합니다
- 행동 분석 추가: 핑거프린팅 + 마우스 추적 + 클릭 타이밍 = 포괄적인 탐지
- DDoS 방어 인프라에 배포: 핑거프린팅은 애플리케이션 계층에서 실행되므로 네트워크 수준의 DDoS 방어 도 필요합니다
- 탐지를 정기적으로 업데이트: 봇 도구는 계속 진화하므로 탐지도 더 빠르게 발전해야 합니다
개인정보 보호 관련 사항
브라우저 핑거프린팅은 심각한 개인정보 보호 문제를 야기합니다. 주요 브라우저는 점점 더 핑거프린팅 기능을 제한하고 있습니다.
- Firefox: Canvas, WebGL 및 기타 출력을 정규화하는 핑거프린트 저항 모드를 제공합니다
- Safari: Canvas 읽기를 제한하고 글꼴 열거를 제한합니다
- Chrome: Client Hints와 Privacy Sandbox를 통한 사용자 에이전트 정보 축소
- GDPR/개인정보보호법: 핑거프린팅은 EU에서 동의를 요구하는 개인정보 수집에 해당할 수 있음
웹사이트를 봇 공격으로부터 보호하세요
저희 보안팀은 공격을 받고 있는 웹사이트와 애플리케이션에 대해 포괄적인 봇 탐지, 핑거프린팅, DDoS 보호, WAF 구성을 제공합니다.
Telegram: @unlednetwork → WhatsApp 문의 →
댓글
질문이나 경험이 있으신가요? 대화에 참여해 주세요. 이메일은 공개되지 않습니다.
We implemented this last month and already seeing positive signals.
Thanks for the feedback. Based on our experience across hundreds of accounts, this approach shows results within 2-4 weeks.