← 一覧へ
フィンガープリント

WebGL 핑거프린트 — GPU 모델을 직접 알려주는 위험한 API

WebGL이 그래픽 카드 모델·드라이버 버전을 그대로 노출하는 원리와, 핑거프린트 우회 도구들이 이를 어떻게 가린지 설명합니다.

Antidetect Editorial · 公開 2026. 5. 13.

Canvas 핑거프린트가 "GPU 렌더링 결과의 미세한 차이"를 잡아낸다면, WebGL은 더 직접적으로 GPU 모델 이름 자체를 텍스트로 노출합니다.

WebGL_debug_renderer_info

const gl = canvas.getContext('webgl');
const ext = gl.getExtension('WEBGL_debug_renderer_info');
gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);   // "Google Inc. (NVIDIA)"
gl.getParameter(ext.UNMASKED_RENDERER_WEBGL); // "ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)"

위 두 값은 그래픽 카드 제조사 + 모델명 + 렌더링 백엔드를 그대로 알려줍니다. 사용자가 어떤 PC를 쓰는지 거의 정확히 파악할 수 있습니다.

왜 위험한가

  • "NVIDIA GeForce RTX 3060"은 전 세계 사용자의 약 0.5% 이하가 사용하는 카드
  • "AMD Radeon RX 7900 XTX"는 약 0.1% 이하
  • 이 정보 + 화면 해상도 + 시간대 조합만으로 사용자를 거의 unique하게 식별 가능

핵심 파라미터들

WebGL이 노출하는 정보 중 핑거프린트에 사용되는 주요 항목:

1. VENDOR / RENDERER: 위 예시

2. VERSION: WebGL 버전 + 드라이버 버전

3. SHADING_LANGUAGE_VERSION: GLSL 버전

4. Aliased line/point range: GPU별 미세한 차이

5. Max texture size: GPU 메모리 한계

6. Supported extensions: 약 50개 익스텐션, GPU마다 지원 목록 다름

이걸 다 모으면 수만 가지 unique한 조합이 만들어집니다.

우회 도구의 접근 방식

1. UNMASKED_* 값 차단

일부 안티디텍트 브라우저는 WEBGL_debug_renderer_info 익스텐션 자체를 비활성화해서 GPU 정보 노출을 막습니다. 단점: 정상 브라우저는 이 익스텐션을 모두 지원하므로, 비활성화가 곧 봇 신호가 됩니다.

2. 가짜 GPU 가장

프로필마다 고정된 가짜 GPU 정보를 반환 (예: 모든 사용자가 Intel HD Graphics 4000을 쓰는 척). 단점: 다른 사람과 똑같은 값이라 collision 위험. 그리고 화면 해상도가 4K인데 GPU는 HD 4000이면 모순.

3. 일관된 랜덤 GPU 풀

실제 시장 점유율에 비례한 GPU 풀(NVIDIA RTX 3060, AMD RX 6700, Intel UHD 770 등 수십 개)에서 프로필마다 하나씩 고정 배정. 가장 자연스러움.

4. Chromium 플래그 직접 변경

--use-angle=d3d11, --force-color-profile 같은 플래그로 렌더링 백엔드를 진짜로 바꾸는 방식. 가장 강력하지만 구현 난이도 높음.

결론

WebGL 핑거프린트는 핑거프린트 30가지 중 가장 직접적이고 강력한 식별자입니다. 안티디텍트 브라우저가 어떻게 우회하는지 보려면 BrowserLeaks/WebGL Report 같은 사이트에서 직접 확인해보세요.