PowerScan
KO

안티디텍트 브라우저의 작동 원리: 완전한 기술 설명

안티디텍트 브라우저 · 읽는 데 11분 · 작성자 PowerOps

사진: Unsplash

핑거프린트 표면, 일관된 신원 생성, 디스크 위의 스토리지 격리, 프로필별 라우팅, 그리고 이 접근법의 솔직한 한계를 다룹니다.

안티디텍트 브라우저는 네 가지 일을 합니다. 프로필마다 브라우징 데이터를 따로 저장하고, 각 프로필이 보고하는 기기 신원을 제어하며, 각 프로필의 트래픽을 독립적으로 라우팅하고, 이 세 가지를 시간이 지나도 일관되게 유지합니다. 이 글에서는 각 일이 어떻게 이루어지는지를 메커니즘 수준에서 살펴보고, 이 접근법이 할 수 없는 일로 마무리합니다.

핑거프린트 표면

먼저 페이지가 무엇을 읽을 수 있는지부터 보겠습니다. 나머지는 모두 그에 대한 대응이기 때문입니다. 어느 웹사이트의 스크립트든 브라우저에 질문을 던질 수 있고, 그 답은 기기를 설명합니다. 표면은 자연스럽게 묶입니다.

표면페이지가 읽는 것
Navigator브라우저 이름과 버전, 플랫폼, 언어 목록, 보고된 프로세서 수와 메모리, 터치 지원
화면너비, 높이, 사용 가능한 작업 영역, 색 심도, 기기 픽셀 비율
Canvas화면 밖에서 텍스트와 도형을 그려 얻은 정확한 픽셀을 해시하여 만든 안정적인 값
WebGL그래픽 벤더와 렌더러 문자열, 그리고 렌더링된 장면의 해시
오디오오디오 처리 그래프를 통과한 오실레이터의 출력으로, 스택마다 다릅니다
글꼴텍스트 측정값으로 추론한 설치된 서체 목록
시간대와 시계보고된 시간대와 오프셋을 트래픽이 도착하는 위치와 비교한 값
네트워크주소 자체, WebRTC가 보는 연결 후보, 그리고 TLS 핸드셰이크의 형태

한 행만으로 기기를 식별할 수는 없습니다. 식별하는 것은 조합이며, 거짓말이 들통나는 곳도 조합입니다. 실제 한 대의 기기에는 있을 수 없는 값들의 조합은 어떤 단일 값보다 훨씬 큰 신호입니다.

수집은 저렴하고 조용합니다. 표의 모든 값은 문서화된 API를 통해 어떤 페이지든 읽을 수 있으며, 권한 요청 창도 없고 대부분은 방문 후 첫 1초 안에 도착합니다. 이 관행에 대해 어떤 입장을 취하든, 이는 현대 웹의 상시적 사실이며 안티디텍트 브라우저가 맞서도록 설계된 기준선입니다.

일관된 신원은 어떻게 생성되는가

순진한 접근은 각 질문을 가로채 답을 무작위로 바꾸는 것입니다. 이는 구조적인 이유로 실패합니다. 답들은 한 대의 기기를 설명하므로 서로 상관관계가 있고, 독립적으로 무작위화된 답은 그 상관관계를 깨뜨립니다. macOS에만 포함된 글꼴과 함께 나타나는 Windows 사용자 에이전트, 어떤 노트북에도 탑재된 적 없는 화면 크기, 주장하는 플랫폼과 공존한 적 없는 그래픽 문자열 등은 모두 검사기가 값싸게 확인할 수 있는 모순입니다.

그래서 제대로 작동하는 안티디텍트 브라우저는 신원을 하나의 집합으로 생성합니다. 실제로 흔한 기기 유형에서 출발하여 모든 값을 그 선택에서 도출합니다. 플랫폼이 그럴듯한 글꼴 목록, 그래픽 문자열, 터치 지원을 결정합니다. 화면은 그 유형의 기기가 실제로 출시되는 크기에서 가져옵니다. 언어와 시간대는 프로필이 의도한 지역에서 가져옵니다. 값들이 서로 일치하는 것은, 한 대의 기기에 대한 하나의 설명에서 함께 선택되었기 때문입니다.

두 번째 속성도 똑같이 중요합니다. 그 집합이 저장된다는 것입니다. 프로필이 생성될 때 프로필에 기록되고, 모든 세션이 같은 값을 보고합니다. 방문할 때마다 바뀌는 기기는 아무도 가지고 있지 않은 하드웨어를 묘사하기 때문입니다. 그럴듯함의 대부분은 안정성입니다.

디스크 위의 스토리지 격리

스토리지 작업은 가장 화려하지 않지만 가장 절대적입니다. 각 프로필은 자신의 디렉터리를 소유하며, 브라우저가 영속적으로 저장하는 모든 것이 그 안에 있습니다. 쿠키 데이터베이스, Local Storage, IndexedDB, HTTP 캐시, 서비스 워커 등록 정보, 확장 프로그램 상태, 기록, 저장된 자격 증명입니다. 두 프로필은 서로 겹치지 않는 두 디렉터리이며, 실행 중인 각 브라우저는 자기 디렉터리를 가리킵니다.

점검해야 할 속성은 완전한 분리입니다. 부분적인 격리는 조용히 실패하기 때문입니다. 쿠키는 분리하기 쉽습니다. 캐시는 보관한 리소스를 통해 재방문한 브라우저를 식별할 수 있습니다. 서비스 워커는 식별자를 가진 채 방문 사이에도 계속 실행될 수 있습니다. IndexedDB는 현대 애플리케이션이 실제로 신뢰하는 레코드를 보관하는 곳입니다. 유명한 저장소만 격리하고 나머지 중 하나라도 공유하는 격리는 문제의 눈에 보이는 부분만 격리한 것입니다.

영속성은 나머지 절반입니다. 세션은 가치를 축적합니다. 통과한 보안 점검, 확립된 로그인 이력, 재방문자의 형태입니다. 프로필은 세션 사이에 자기 디렉터리를 유지하며, 이것이 계정 작업을 가능하게 하는 바탕입니다. 닫을 때의 기록(write-out)이 디렉터리를 내구성 있게 만들기 때문에, 세션 도중에 프로필 프로세스를 강제 종료하면 방금 확립한 세션을 잃을 수 있습니다.

네트워크 라우팅

각 프로필은 브라우저가 시작될 때 적용되는 자신만의 경로를 가지므로, 트래픽은 시스템 설정이나 다른 프로필의 경로를 건드리지 않고 그 프로필의 프록시를 통해 나갑니다.

경로는 제3자에게서 구매하는 구성 요소이므로 독립적으로 검증할 가치가 가장 큰 부분이기도 합니다. 할당하기 전에 엔드포인트를 테스트하고, 광고된 주소가 아니라 관찰된 주소를 확인하면, 문제가 계정 문제가 되기 전에 설정 문제일 때 잡아낼 수 있습니다.

브라우저 자체가 바꾸는 것

도구가 페이지가 받는 답을 바꿀 수 있는 곳은 두 군데이며, 둘 사이의 차이가 이 주제에서 가장 기술적인 갈림길입니다.

접근법작동 방식약점
스크립트 주입확장 프로그램이나 주입된 스크립트가 페이지가 호출하는 함수를 덮어써서, canvas 읽기와 navigator 조회가 대체된 값을 반환합니다덮어쓰기 자체가 눈에 띕니다. 패치된 함수는 패치되었다는 것이 인식될 수 있고, 주입기가 빠뜨린 표면은 여전히 실제 값으로 답합니다
브라우저 자체 코드 내부브라우저의 구현이 실제 값이 만들어지는 코드 경로에서 프로필에 저장된 값으로 답합니다만들고 유지하는 데 훨씬 많은 작업이 필요하며, 이것이 전용 도구를 확장 프로그램과 구별해 줍니다

주입 방식은 이 범주가 시작된 곳이며, 그 한계는 잘 알려져 있습니다. 페이지는 네이티브 함수가 여전히 네이티브처럼 보이는지 확인할 수 있고, 주입이 덮지 못한 다른 경로로 같은 표면에 접근할 수 있습니다. 그래서 전용 안티디텍트 브라우저는 변경을 브라우저 내부에서 수행하며, 저장된 신원이 그것을 읽는 모든 경로를 통해 보고되도록 합니다.

프로필을 열면 실제로 일어나는 일

  1. 저장된 신원이 로드됩니다. 지난번과 같은, 하나의 일관된 기기 값 집합입니다.
  2. 브라우저가 프로필 자체의 디렉터리를 대상으로 시작되므로 모든 영속 저장소가 그 프로필의 것입니다.
  3. 경로가 적용됩니다. 프록시, 그것을 통한 이름 확인, 그리고 그에 맞게 제한된 WebRTC입니다.
  4. 세션이 실행되면서 디렉터리 안에 상태가 쌓입니다.
  5. 닫을 때 상태가 기록되어, 다음에 열면 같은 기기, 같은 스토리지, 같은 경로가 이어집니다.

이 목록의 모든 부분은 외부에서 확인할 수 있습니다. 핑거프린트 테스트 페이지를 두 번 열어 값을 비교해 보십시오. 디스크에서 프로필 디렉터리를 살펴보십시오. 관찰된 주소를 읽어 보십시오. 이 범주의 도구는 그런 확인을 환영해야 합니다. 메커니즘이 곧 제품이기 때문입니다.

솔직한 한계

이 접근법에는 한계가 있으며, 그것을 아는 것도 능숙하게 사용하는 일의 일부입니다.

한계를 실망이 아니라 정의로 읽으십시오. 안티디텍트 브라우저는 일관성을 위한 도구입니다. 분리된 스토리지, 안정적이고 그럴듯한 신원, 그에 맞는 경로를 프로필 단위로 묶어 열 때마다 동일하게 반복하는 것입니다. 이것이 메커니즘의 전부이며, 이 범주에 대해 쓰인 다른 모든 이야기는 그 변형입니다.

모든 글 · 스캔 실행