블로그로 돌아가기

브라우저 핑거프린트 노출 점검: 일관성을 확인하는 6가지 항목

핑거프린트 테스트 페이지에는 웹사이트가 원래 읽을 수 있는 많은 값이 표시됩니다. 여기서는 브라우저, 시스템, 지역, 네트워크, 렌더링 정보의 모순을 찾는 6가지 점검 방법을 설명합니다. 하나의 특이한 값보다 서로 충돌하는 여러 신호가 더 눈에 띄기 때문입니다.

브라우저 핑거프린트 테스트 페이지를 열면 UA, 화면, 시간대, 글꼴, Canvas 렌더링 결과, 하드웨어 정보 등 긴 항목 목록을 볼 수 있습니다. 많은 사람이 먼저 “고유성”을 확인하지만, 실제로는 그 항목이 가장 중요하지 않습니다. 더 중요한 것은 각 정보가 서로 자연스럽게 맞아떨어지는지입니다.

浏览器指纹暴露自查:六项核对与自洽判断的关键步骤与判断维度示意图

웹사이트가 원래 읽을 수 있는 정보

핑거프린트는 Cookie처럼 저장되는 정보가 아닙니다. Cookie는 삭제하거나 차단할 수 있고 비공개 모드로 피할 수도 있지만, 핑거프린트는 브라우저와 기기 자체의 설정에서 만들어집니다. UA에는 브라우저 종류와 버전, 운영체제와 버전이 포함됩니다. 이 밖에도 설치된 플러그인, 화면 해상도와 색 심도, 글꼴 목록, 시간대와 선호 언어, CPU 종류, GPU 모델과 메모리 크기, IP 주소, ISP와 연결 유형, Canvas와 WebGL 같은 HTML5 인터페이스가 반환하는 렌더링 결과가 포함됩니다. 이런 항목을 조합하면 하나의 식별자가 되며, IP를 바꾸거나 Cookie를 지우거나 비공개 모드를 사용해도 대체로 그대로 유지됩니다. 플랫폼이 계정 간 연관성을 판단할 때도 같은 원리가 사용됩니다.

먼저 시스템과 대조할 3가지 항목

User Agent를 먼저 보는 것이 좋습니다. 브라우저가 스스로를 설명하는 정보이기 때문입니다. 테스트 페이지에서 UA를 복사한 뒤 브라우저 설정에서 버전을 확인하고, 시스템 설정에서 운영체제 버전을 확인합니다. UA가 말하는 시스템 또는 커널 버전이 실제 기기와 일치하지 않거나 일반적으로 쓰이는 현재 버전보다 눈에 띄게 오래됐다면 쉽게 드러나는 불일치입니다.

시간대는 네트워크 출구 지역과 맞아야 합니다. 테스트 페이지는 보통 현재 시간대를 직접 표시하며, 간단한 시간대 조회 스크립트로도 같은 값을 얻을 수 있습니다. 별도의 IP 조회 페이지에서 출구 IP가 어느 지역에 속하는지도 확인합니다. 두 정보가 서로 다른 지역을 가리키면 그 불일치를 처리해야 합니다.

언어와 지역은 각각 보면 약한 신호지만 함께 보면 유용합니다. navigator.language와 navigator.languages가 반환하는 목록을 확인하고 출구 지역에서 일반적으로 쓰이는 언어와 비교합니다. 시간대는 미국인데 언어는 중국어이고 출구는 유럽이라면, 어느 한 항목만 다른 경우보다 더 눈에 띕니다.

화면, 네트워크 출구, 렌더링 특성

화면과 하드웨어 정보에서는 두 가지를 봅니다. 값이 흔한지, 그리고 UA가 선언한 기기 유형과 맞는지입니다. 해상도, 픽셀 비율, 사용 가능한 화면 영역, CPU 코어 수, 메모리를 함께 확인할 수 있습니다. 스마트폰 크기의 해상도에 데스크톱 UA가 붙는 것은 전형적인 모순입니다.

WebRTC는 실제 네트워크 정보를 노출할 수 있으므로 별도로 확인해야 합니다. 테스트 페이지에서는 보통 독립된 항목으로 표시됩니다. 192.168 또는 10으로 시작하는 로컬 네트워크 주소가 반환되는지, 아니면 실제 공인 출구 주소가 그대로 보이는지 확인합니다. 프록시를 켰는데도 실제 주소가 나타난다면 해당 트래픽은 프록시를 거치지 않는 것입니다. 이 항목이 최우선입니다.

Canvas와 WebGL은 반환 결과가 안정적인지, 그리고 선언된 GPU 모델과 일치하는지를 봅니다. 한 가지 세부 사항이 중요합니다. 같은 컴퓨터에서 여러 환경을 동시에 열었는데 완전히 같은 렌더링 값을 반환한다면, 어느 정도 변동이나 노이즈가 있는 경우보다 서로 연결하기 쉽습니다.

덜 현실적인 값보다 서로 모순되는 값이 더 눈에 띈다

플랫폼은 모든 기기가 완전히 고유해야 한다고 요구하지 않습니다. 전체 정보가 정상적인 기기에서 나온 것처럼 보이는지를 판단합니다. 예를 들어 흔하지 않은 해상도처럼 하나의 값이 충분히 “현실적”이지 않더라도 보통은 약한 신호에 불과합니다. 하지만 여러 항목이 서로 충돌하면 판단하기가 훨씬 쉬워집니다. UA는 Windows라고 하는데 글꼴 목록은 macOS처럼 보이거나, 시간대는 미국인데 언어는 중국어이고 출구는 유럽이거나, 해상도는 스마트폰 크기인데 UA는 데스크톱 브라우저인 경우가 그렇습니다. 이런 조합 하나만 있어도 다른 값을 세밀하게 조정한 효과가 크게 줄어듭니다. 따라서 자체 점검에서는 먼저 명확한 모순을 찾고, 그다음 세부 파라미터를 다듬는 것이 순서입니다.

세 가지만 고친다면 우선순위

첫째는 WebRTC 누출입니다. 실제 네트워크 정보를 드러내기 때문입니다. 둘째는 시간대와 언어를 출구 지역에 맞추는 것입니다. 이런 불일치가 쌓이면 비정상적인 프로필로 보이기 쉽습니다. 셋째는 Canvas와 WebGL 처리로, 같은 기기의 안정적이고 고유한 렌더링 값을 직접 노출하지 않도록 하는 것입니다.

실용적인 한계도 있습니다. JavaScript를 비활성화하거나 제한하면 일부 수집을 막을 수 있지만 웹사이트 사용성이 눈에 띄게 떨어집니다. 프라이버시 중심 브라우저는 일부 보호 기능을 기본 제공하며 일상적인 브라우징에는 충분한 경우가 많지만, 서로 관련 없는 여러 신원을 장기간 유지해야 할 때는 유연성이 부족할 수 있습니다.

여러 환경을 유지하는 방법

매번 완전히 무작위 핑거프린트로 바꾸는 것이 핵심은 아닙니다. 각 환경 내부에서는 값이 안정적으로 유지되고, 환경끼리는 서로 달라야 합니다. PurpleMark에서 계정마다 독립된 브라우저 환경을 만들고 Canvas 같은 파라미터를 별도로 처리한 다음, 테스트 페이지를 사용해 각 환경의 내부 일관성을 확인합니다. 이 점검을 통과한 환경이 장기적으로 유지할 가치가 있습니다.

결국 핑거프린트 테스트의 목적은 두 가지뿐입니다. 자신이 무엇을 노출하는지 확인하고, 그 정보가 서로 일관되는지 확인하는 것입니다. 고유성은 가장 걱정할 필요가 적은 항목입니다.