브라우저 핑거프린팅: 사이트가 실제로 읽는 것

캔버스와 WebGL부터 오디오, 글꼴, 화면, 시간대까지 웹사이트가 수집하는 값을 항목별로 살펴보고, 무작위 신원보다 일관된 신원이 나은 이유를 설명합니다.
브라우저 핑거프린팅은 브라우저가 저장한 것이 아니라 브라우저가 보고하는 값으로 브라우저를 식별하는 방법입니다. 쿠키가 필요 없습니다. 브라우저는 어떤 웹 페이지든 물어볼 수 있는 질문에 답할 뿐이고, 그 답을 모으면 다시 알아볼 수 있을 만큼 고유해집니다.
수집되는 값
대부분의 핑거프린팅 스크립트는 같은 몇 가지 영역에서 값을 읽습니다.
눈에 띄는 것들
- User-Agent에는 브라우저 이름, 버전, 플랫폼이 담기며 모든 요청과 함께 전송됩니다.
- 화면은 너비, 높이, 색 심도, 픽셀 비율, 사용 가능한 작업 영역을 보고합니다.
- 언어와 시간대는 브라우저가 보고하는 로케일과 계산한 오프셋을 가리킵니다.
- 하드웨어 힌트는 보고된 프로세서 수와, 일부 브라우저에서는 대략적인 메모리 용량을 알려 줍니다.
렌더링 관련 값
핑거프린팅이라고 하면 사람들이 떠올리는 값이 이것들입니다. 간접적이기 때문입니다. 페이지가 브라우저에 무언가를 그리게 한 다음, 실제로 그려진 결과를 그대로 읽어 옵니다.
- 캔버스 작업은 화면 밖 캔버스에 텍스트와 도형을 렌더링해서 해시합니다. 결과는 그래픽 스택, 글꼴, 안티앨리어싱에 따라 달라집니다.
- WebGL은 그래픽 어댑터의 벤더와 렌더러 문자열, 그리고 렌더링된 장면의 해시를 노출합니다.
- 오디오는 오실레이터를 오디오 처리 그래프에 통과시키고 출력을 해시합니다. 부동소수점 동작은 스택마다 미세하게 다릅니다.
- 글꼴 감지는 후보 글꼴로 텍스트를 측정하고, 어떤 측정값이 다른지를 보고 설치된 글꼴을 추론합니다.
네트워크 관련 값
- 요청이 도착한 주소와, 지오로케이션 데이터베이스가 그 주소에 대해 말해 주는 내용.
- 연결이 평소라면 노출하지 않을 주소까지 드러낼 수 있는 WebRTC.
- 클라이언트마다 다른 TLS 및 HTTP 핸드셰이크 필드의 순서와 내용.
모든 필드를 무작위로 바꾸는 것이 잘못된 본능인 이유
직관적인 방어책은 방문할 때마다 모든 것을 바꾸는 것입니다. 하지만 이는 두 가지 이유로 역효과를 냅니다.
첫째는 모순입니다. 무작위로 바뀐 필드들은 서로를 알지 못합니다. Windows라고 주장하는 User-Agent 옆에 Apple 하드웨어에서만 출시되는 WebGL 렌더러 문자열이 있으면, 어느 한 값만 있을 때보다 훨씬 강한 신호가 됩니다. 실제 기기는 내부적으로 일관되며, 합성된 기기만 스스로와 모순됩니다.
둘째는 불안정성입니다. 방문할 때마다 다른 기기를 보고하는 계정은 어느 실제 사람도 가지고 있지 않은 무언가를 묘사하고 있는 것입니다. 시간이 지나도 일관되다는 것이 평범한 사용자의 모습입니다.
프로필 신원이 다루는 범위
| 영역 | 처리 방식 |
|---|---|
| User-Agent와 플랫폼 | 함께 생성되므로 주장하는 플랫폼이 주변 값과 일치함 |
| 화면과 픽셀 비율 | 프로필별로 고정되며 실제 디스플레이가 보고하는 크기에서 선택됨 |
| 시간대와 로케일 | 프로필별로 설정되며 사용하는 네트워크 경로와 대조됨 |
| 캔버스, WebGL, 오디오 | 프로필별로 안정적인 처리를 적용하여 열 때마다 동일함 |
| 글꼴 | 프로필이 주장하는 플랫폼과 일관된 프로필별 글꼴 집합 |
| WebRTC | 프로필의 네트워크 경로와 모순되지 않도록 제한됨 |
내 작업 확인하기
프로필을 열고 핑거프린팅 테스트 페이지를 방문해 보세요. 여러 곳이 읽은 값을 무료로 공개합니다. 확인할 가치가 있는 두 가지는 예상과 다를 수 있습니다.
- 값들이 서로 일치하는가? 플랫폼, 글꼴, 그래픽 문자열, 시간대가 하나의 그럴듯한 기기를 설명해야 합니다.
- 지난번과 같은가? 프로필을 닫고 다시 열어 테스트를 새로고침하세요. 열 때마다 값이 바뀌는 프로필은 안정적이지 않으며, 중요한 것은 바로 안정성입니다.
테스트 페이지의 희소성 점수는 그중 가장 쓸모없는 숫자입니다. 그 페이지의 방문자와 비교한 수치인데, 방문자 대다수가 안티디텍트 브라우저를 테스트하는 사람들이기 때문입니다.


