브라우저가 알려준 모든 정보를 보여주는 웹페이지
(sinceyouarrived.world)- 이 페이지는 방문 직후 첫 밀리초 동안 브라우저가 넘긴 데이터만으로 위치, 기기, 브라우저, 언어, GPU, 배터리, 폰트, 사용자 선호 등을 보여주며, 익스플로잇이나 해킹 없이 공개 문서화된 표준 기능만 사용함
- 모든 요청 헤더의 IP 주소를 ip-api.com · Free tier · CC-BY-SA에 보내 도시와 인터넷 제공자 이름으로 바꾸며, 조회는 저장하지 않고 화면에는 일부 옥텟만 표시하지만 나머지도 알 수 있다고 명시함
- 폰트 지문은 렌더링된 텍스트 너비로 설치 폰트를 감지하고, Electronic Frontier Foundation · Cover Your Tracks는 브라우저 고유성을 확인하는 도구를 제공하며, 2014년 Princeton 연구는 상위 100,000개 웹사이트의 5%에서 캔버스 지문을 발견함
- 페이지에서 실행하지는 않았지만, 단일 사용자 제스처로 마지막 복사 내용 읽기를 요청할 수 있는 Clipboard API, 배터리 잔량과 방전 시간으로 최대 30분 추적 가능성을 보인 “The Leaking Battery”, favicon으로 로그인 사이트를 감지하는 기법이 존재함
- 서버로 보낸 것은 도착과 완료 두 개의 익명 이벤트뿐이고
cookies,localStorage,sessionStorage,IndexedDB, 서비스 워커 캐시에 아무것도 저장하지 않으며, 탭을 닫으면 방문자를 잊는다고 명시함
브라우저가 도착 직후 넘긴 정보
- taken. 의 모든 관찰은 방문 직후 첫 밀리초 동안 방문자의 브라우저에서 나온 데이터이며, 익스플로잇·취약점·해킹 없이 공개 문서화된 표준 기능만 사용함
-
위치
- 모든 요청 헤더에 포함되는 IP 주소를 ip-api.com · Free tier · CC-BY-SA에 보내 도시와 인터넷 제공자 이름으로 변환함
- 조회는 일시적이며 양쪽 모두 저장하지 않고, 화면에는 IP의 첫 번째와 마지막 옥텟만 표시하지만 나머지도 알 수 있다고 명시함
- GDPR에서는 추적에 쓰일 때 IP 주소가 개인정보로 간주될 수 있으며, taken.은 추적·보관·로그를 하지 않음
-
브라우저 API
- 화면, 브라우저, 언어, GPU, 코어 수, 배터리, 폰트, 사용자 선호 같은 기기 관찰값은 MDN Web Docs · Mozilla · CC-BY-SA 2.5에 공개 문서화된 표준 JavaScript API로 가져옴
- 브라우저 설계대로 가능한 동작이며, “설계가 문제”라는 결론으로 이어짐
-
폰트와 캔버스 지문
- 설치된 폰트를 렌더링된 텍스트 너비로 감지하는 폰트 지문 기법은 2010년부터 문서화됐고, Electronic Frontier Foundation · Cover Your Tracks는 브라우저가 얼마나 고유한지 확인하는 도구를 제공함
- 대부분의 브라우저는 쿠키 없이도 오픈 웹에서 추적될 만큼 고유하며, 폰트 조합은 가장 강한 신호 중 하나임
- Princeton University · Web Transparency & Accountability Project의 2014년 연구는 캔버스 지문을 실제 웹에서 처음 문서화했고, 상위 100,000개 웹사이트의 5%에서 발견함
- 캔버스 지문은 방문자 브라우저에 숨은 이미지를 그리게 한 뒤 렌더링 픽셀을 식별자로 다시 읽는 방식이며, taken.은 그 기법을 실행하지 않았지만 브라우저는 지원함
-
클립보드와 배터리
- MDN · Clipboard API specification에 따르면 클릭이나 탭 같은 단일 사용자 제스처로 페이지가 마지막으로 복사한 내용 읽기를 요청할 수 있음
- 마지막 복사 내용은 비밀번호, 주소, 초안 메시지일 수 있으며, taken.은 요청하지 않았지만 기능 자체는 최신 브라우저에 존재함
- Olejnik, Englehardt, Narayanan의 2015년 논문 “The Leaking Battery”는 배터리 잔량과 방전 시간 조합만으로 쿠키나 계정 없이 최대 30분 동안 여러 웹사이트에서 방문자를 추적할 수 있음을 보였음
- Firefox는 2016년에 해당 API를 제거했지만 Chrome과 Edge는 여전히 노출함
실행하지 않은 기법과 남기지 않은 데이터
-
로그인 사이트 감지
- taken.은 실행하지 않았지만, 브라우저에 특정 서비스의 favicon URL을 로드하게 하고 성공·실패를 관찰해 어느 사이트에 로그인했는지 감지하는 기법이 문서화돼 있고 합법적이며 널리 배포돼 있음
- 로그인 상태와 로그아웃 상태에서 다른 이미지를 반환하는 차이를 이용하며, 허가 없이 Facebook, Google, X, GitHub, Reddit, LinkedIn 등 여러 서비스 로그인 여부를 알 수 있음
-
브라우저 안에서 계산한 바코드
- 카운트 아래에 표시되는 16개 선은 GPU, 폰트, 화면 크기, 언어, 시간대, 운영체제, 브라우저, 색상 깊이에서 파생된 높이로 구성됨
- 같은 데이터는 같은 바코드를 만들고, 다른 방문자는 다른 바코드를 보게 되며, 계산은 브라우저 안에서만 일어나고 전송되지 않음
- 정확히 같은 지문을 가진 사람이 있으면 같은 바를 보겠지만 그 가능성은 작음
-
문장 생성 방식
- 모든 문장은 Matt가 직접 썼고, 실행 시점에 언어 모델이 문장을 쓰거나 고치지 않음
- 코드는 브라우저가 반환한 값에 따라 미리 작성된 문장 템플릿 중 하나를 고르며, 사람이 쓴 문장으로 다룰 수 없는 조건이면 아무 말도 하지 않도록 만들어짐
-
서버로 보낸 것
- 서버로 보낸 이벤트는 도착과 완료 두 개의 익명 이벤트뿐이며, 쿠키·식별자·보관된 IP는 없음
- 서버는 각 요청의 본문을 버리고 아무것도 반환하지 않으며, 요청이 있었다는 전송 계층 기록은 호스팅 제공자의 기본 보관 기간인 보통 며칠 동안 로그에 남을 수 있음
- 대부분의 사이트는 광고업체, 지문 수집기, 세션 재생 도구, 태그 관리자에 수백 개의 추가 비컨을 보내지만, taken.은 자체 서버로 두 개만 보내고 그 사실을 알림
-
기기에 저장한 것
cookies,localStorage,sessionStorage,IndexedDB, 서비스 워커 캐시에 아무것도 저장하지 않음- 화면에 보인 데이터는 브라우저 안에서 계산됐고, IP 지리 위치 조회와 두 개의 익명 이벤트를 제외하면 기기를 떠나지 않음
- 탭을 닫으면 taken.은 방문자를 잊으며, 소스 공개와 함께 “대부분의 페이지는 그렇게 말할 수 없다”고 마무리함
-
시리즈 맥락과 제작
- Vol. I은 방문자가 머무는 동안 세계에서 일어난 일, Vol. II는 놓친 하늘, Vol. III는 발밑에 이미 있던 것, Vol. IV는 방문자 자신으로 점점 좁혀지는 구성을 가짐
- 페이지는 Matt가 Rise Up Labs에서 만들었고, 이후 에디션은 X와 Bluesky에 올라올 예정임
Hacker News 의견들
-
그 도시에 있지도 않음. 넓게 봐도 Linux 비슷한 것 위의 Chrome 비슷한 것을 돌리는 정도고, 내가 언제 일하고 언제 자는지는 아무도 추론할 수 없음. 나도 모름
최신 고급 디스플레이라는 것도 5년 전 슈퍼마켓에서 산 저가 태블릿 화면이고, 그래도 브라우저 지문 채취는 짜증남. 라이트 모드를 감지할 수 있으면 그 설정도 존중해주면 안 되나?- 이 페이지가 보여주는 지문 채취량은 실제 웹에서 벌어지는 것에 비하면 별것 아님
- 배터리 퍼센트도 틀렸고 충전 상태도 틀렸음. 라이트 모드를 감지할 수 있으면 존중해달라는 말도 맞지만, 어차피 그랬어도 저대비 쓰레기 화면이었을 듯함
- 나를 “Los Angeles에 있다”고 했지만 그냥 내 시간대가 그쪽일 뿐임. 입력 언어가 두 개라고 무슨 “잡았다” 점수를 딴 것처럼 굴지만, 그냥 두 번째 언어를 자주 쓸 뿐임
“English · Chinese”라고 하면서 브라우저 주 언어와 추가 언어가 성장지, 거주지, 동거인까지 말해준다고 하는데, 영어와 중국어 입력 언어가 있다고 해서 그런 걸 알려주지는 않음. “휴대폰으로 인터넷을 본다는 사실은 휴대폰으로 인터넷에 접속할 수 있는 사람이라는 걸 드러낸다”는 말과 비슷함. 기술은 서로 상호작용하고, 그게 기술이 작동하는 방식임. 오웰적이긴 하지만 러시아/중국/북한 같은 감시국가보다 더 오웰적인지는 별개임. 위치 공유로 휴대폰·차·기기를 찾고, 온라인 활동으로 범죄자를 찾고, 범죄나 경찰 책임 추궁이 필요한 사건을 기록할 수도 있음. 기술의 과잉 침해를 재앙처럼 보는 건 인지적 선택이지만, 우리 기술이 우리에 대해 무엇을 “아는지” 인식하는 건 좋음 - Apple Private Relay VPN을 쓰니 위치가 수백 마일 빗나갔음. 웹사이트나 서비스가 위치 정보 데이터베이스로 나를 어디 있다고 보는지 확인하는 건 늘 흥미롭고, 끄면 몇 마일 이내로 찍힘. 다행히 Apple VPN을 차단하는 곳은 거의 없어서 끌 필요가 없음
라이트 모드 얘기는 정말 공감함. 30대 중반인데 이런 다크 모드 사이트 몇몇은 나를 80대 중반처럼 느끼게 함. 이 사이트는 진짜 아무것도 안 보임 - 나도 아님. Brussels라고 나오지만 실제로는 Antwerp에 있음. 화면 해상도도 틀렸음
-
프라이버시 옹호자들이 한 번만이라도 평범하게 말해봤으면 함. 브라우저가 시간대에 접근하는 걸 사악한 일처럼 포장해봐야 아무도 설득 못 함
- “어두운 인터페이스를 선호합니다 — 운영체제가 알려줬습니다.”라니, 내 설정이 의도대로 작동했을 뿐인데 무섭다는 건가?
- 동의함. 내 언어, 다크 모드 사용 여부, 시간대 같은 정보는 더 나은 사용자 경험을 주는 데 쓰일 수 있어서 별로 신경 안 씀
- 모든 걸 극적으로 들리게 만드는 흔한 짧은 LLM 문체라서 칠판 긁는 소리 같음
- 하지만 전 세계에서 이 시간대에 있는 사람이 나뿐이라면 나를 고유하게 식별한 셈임!
-
정보가 정확한지 여부가 핵심은 아님. 쿠키 없이도 나를 식별하는 수단이 된다는 게 핵심임. 더 나은 사이트를 찾아보니 EFF 쪽이 유익했음
내 브라우저 지문은 지난 45일 방문자 중 고유하다고 나왔음: https://coveryourtracks.eff.org/- “웹 추적에 강한 보호를 갖추고 있습니다”라고 나옴. JavaScript를 끄지 않아 사이트가 동작하는 상태에서도, 고급 모드의 Firefox + uBlock Origin은 사랑할 수밖에 없음
- 저런 사이트를 여러 번 돌리면 매번 고유하지는 않아야 하는 거 아닌가?
- 적어도 유럽에서는 쿠키가 아니라 지문 채취를 쓰더라도 GDPR이 여전히 적용됨. 이 정보를 쓰려면 공개해야 하고 법에 맞게 데이터를 처리해야 함
- “공포·불확실성·의심이 정확하지 않아도 상관없다”는 건 좀 이상함
- 그래도 정보가 부정확한 편이 낫겠음. 사이트들이 무례하게 나를 추적하려 든다면, 적어도 나는 그들에게 고유한 쓰레기 데이터를 먹일 수 있음
-
JavaScript 없이 방문하면 “JavaScript가 꺼져 있으면 페이지는 브라우저가 무엇을 공개했는지 말해줄 수 없습니다. 데이터는 여전히 있습니다. 공개는 여전히 일어났습니다. 멈추는 것은 말해주는 것뿐입니다.”라고 나옴
이런 과장된 LLM 문체는 매우 거슬리지만, 덕분에 완전히 무시해도 된다는 신호를 줘서 고맙긴 함 -
내가 늙어서인지, 인터넷 소프트웨어를 거의 30년 해와서인지 모르겠지만, 이 중 아무것도 놀랍거나 걱정스럽게 보이지 않음
누군가 연결을 받는 서버를 세우고, 누군가 그 서버에 연결 요청을 보냄. 아무 합의도 없고 기대나 규칙도 정해지지 않았음. 서버가 모든 연결 요청을 받아야 하는 것도 아니고, 누군가 그 서버에 연결 요청을 해야 하는 것도 아님. 서버가 무엇을 반환하고 클라이언트가 그걸 어떻게 처리할지는 각자 마음임
이 합의, 혹은 합의의 부재는 양쪽 모두에 적용된다고 느낌. 웹사이트가 연결 요청 정보를 원하는 방식으로 쓴다고 사용자가 화낼 일은 아니라고 보지만, 웹사이트도 내가 받은 데이터를 원하는 대로 처리한다고 화내면 안 됨. 즉 웹사이트는 내 IP 주소와 요청 세부사항을 원하는 만큼 기억할 수 있고, 나는 응답으로 받은 것을 마음대로 할 수 있음. 광고를 막거나, 사이트가 지시한 후속 요청을 거부하거나, 응답을 원하는 방식으로 표시할 수 있음. 내가 데이터를 요청했고, 그쪽이 데이터를 보낸 것임
나에 대해 알리기 싫은 정보가 있으면 요청에 담아 보내지 말아야 함. 광고를 표시할 때만 데이터를 주고 싶다면 데이터를 보내기 전에 그렇게 동의하게 만들어야 함. 물론 현실에서는 대부분의 사람이 브라우저가 뭘 하는지 모르고, 브라우저가 보내는 내용에 대한 실질적 선택지도 많지 않으며, 인터넷은 더 이상 삶에서 선택 사항이 아님. DDoS 같은 것 때문에 완전한 “뭐든 가능” 구조도 비현실적임. 그래도 인터넷 요청을 할 때 양쪽 모두에게 너무 많은 걸 기대하면 안 된다는 직감이 있음- 이게 근본 문제임. 브라우저는 사용자의 대리인이어야 함. 이름부터 User Agent임. 사용자를 위해 작동해야 하고, 사용자는 브라우저가 무엇을 하는지 알아야 하며, 브라우저는 사용자가 이해하고 명시적으로 동의하지 않은 일을 하면 안 됨. 내 브라우저가 무엇을 보내는지에 대한 최종 권한은 내게 있어야 하고, 브라우저는 그 권한 행사를 사소하게 만들어야 함
현실에서 브라우저는 누군가 다른 사람의 대리인임. 웹 개발자를 위해 일하며 개발자 삶을 편하게 해주는 온갖 것을 제공함. 광고주를 위해 일하며 추적 단서와 지문 채취를 제공함. 브라우저 개발자를 위해 일하며 측정값과 원격측정, 그 밖에 알 수 없는 데이터를 모음. 하지만 더는 진짜로 나를 위해 일하지 않음. 나는 차에 탄 승객일 뿐임
IP 주소는 브라우저가 통제할 수 있는 게 아니고, 웹사이트에 연결하려면 불가피하게 드러내야 한다는 점은 이해함. 하지만 VPN 없이 기본 상태에서 IP 주소가 국가, 주/도, 때로는 도시까지 안정적으로 매핑될 수 있다는 건 끔찍한 설계 결함임. IP를 배분하는 방식의 큰 설계 문제임. 더 나은 세상이라면 IP 주소만으로 누군가의 지리적 위치가 드러나서는 안 됨 - “나머지도 압니다. 표시하지 않기로 했습니다. 대부분의 페이지는 그렇게 선택하지 않았을 것입니다” 같은 문구는 아이들 겁주려고 쓴 건가 싶음. 게다가 표시된 건 내 인터넷 제공자도 아님. 아마 ISP의 상위 제공자일 수는 있겠음
- 나도 늙었지만 이상주의적이어서인지, 이런 기능 상당수는 분명한 목적을 위해 추가됐다고 봄
클라이언트가 언어 헤더나 지원 글꼴 목록을 보내는 건 서버가 “이 데이터로 하고 싶은 걸 다 하라”는 뜻이 아니었음. 우리가 표준을 만들 때는 실제 이유가 있었음. 웹사이트 제공자, 더 구체적으로는 광고 네트워크가 이것들을 다른 목적으로 쓰기로 한 건 그 암묵적 합의를 깨는 일임. 물론 내가 너무 많은 걸 기대하는 걸 수도 있음 - 위치는 웃길 정도로 부정확했고, 여기 글을 쓰는 사람답게 그 이유도 앎. IP 주소를 가린 건 좀 유치했지만, 아래로 내려가면 더 나아짐
내 휴대폰 배터리 잔량을 알았고 기기에 대한 추론도 맞췄음. 자이로스코프, 터치스크린 상호작용을 정확히 읽었고, 이런 것들이 어떻게 식별과 추론에 쓰일 수 있는지 보여줬음. 앉아 있는지, 서 있는지, 누워 있는지 같은 것까지 가능함. 처음은 느리지만 뒤로 갈수록 흥미로웠음 - 우리 같은 오래된 기술자들은 여전히 옛 웹의 기술 자유주의 이상을 믿고 싶어 하는 것 같음. 하지만 그러려면 현대 웹의 자본주의적·권위주의적 이상을 상당히 무시해야 함
서로에게 아무것도 빚지지 않는다는 방식은, 대부분이 선의의 행위자라고 가정해도 대체로 맞던 과거에는 잘 작동했음. 하지만 인터넷의 돈과 권력이 현실이 되자 관계는 더 적대적으로 바뀌었음. 신뢰 가정과 책임 부재는 한쪽이 다른 쪽의 선의를 이용하기 쉽게 만듦. 웹의 서버-클라이언트 구조에 내재한 기술적·권력적 불균형 때문에 남용도 한 방향으로 흐르기 쉬움
- 이게 근본 문제임. 브라우저는 사용자의 대리인이어야 함. 이름부터 User Agent임. 사용자를 위해 작동해야 하고, 사용자는 브라우저가 무엇을 하는지 알아야 하며, 브라우저는 사용자가 이해하고 명시적으로 동의하지 않은 일을 하면 안 됨. 내 브라우저가 무엇을 보내는지에 대한 최종 권한은 내게 있어야 하고, 브라우저는 그 권한 행사를 사소하게 만들어야 함
-
사이트는 예쁘고 과장된 문구도 재미있지만, 더 나은 지문 채취 데모는 많음
여기서 보여주는 데이터 포인트 수는 적음. 확인할 수 있는 게 훨씬 많고, 상당수는 틀린 것 같음. 명시적으로 “withheld”라고 감지한 건 하나뿐이지만 실제로는 몇 개가 가려져서 출력이 뒤틀린 듯함. 품질 관리가 필요함- 과장된 톤이 꽤 웃김. “당신은 [틀린 도시]에 있습니다. 지금 당장 닌자 팀을 보내 죽일 수도 있지만 그러지 않기로 했습니다. 고마워하세요” 같은 느낌임
- 요약하면 또 하나의 AI 생성 잡동사니 프로젝트임. 이 UI 스타일을 벌써 수십 번 봤고, 언제나 티 나는 장황하고 과장된 문장이 따라붙음
-
EFF Cover Your Tracks를 바이브 코딩한 것 같음. 이게 첫 페이지에 올라온 사실이 내용보다 더 무서움
- 맞음. “이걸 티 안 나게 복제하고, 화려한 랜딩 페이지 테마를 넣어줘”라고 시킨 페이지처럼 보임. 못생겼음
- 가입한 지 21일 된 계정이 올렸고, 댓글도 한 번도 안 달았으며, 이 스레드를 따라오지도 않음. 답글을 단 적도 없고 앞으로도 안 달 것 같음. 이런 제출물이 신고되지 않는 게 Hacker News를 망치고 있음
-
여기서 볼 수 있는 건 훨씬 많음. 슈퍼 쿠키와 지문 채취에 대한 선행 작업도 많음
https://coveryourtracks.eff.org/
https://amiunique.org/- 흥미로움. EFF 사이트를 돌려보니 여러 정보 중 내가 “MacIntel”이라고 나왔음. 아직도 Firefox의 x86 빌드를 돌리는 줄 알고 놀랐음
- 둘 다 하단의 Sources & Confessions 모달에 링크돼 있음. Cover Your Tracks는 이 전체 작업의 정신적 조상이고, amiunique는 더 엄밀함. 이건 그 사설판 사촌 같은 것임
- 또 다른 정보 누출 확인 도구도 있음: https://www.ipleak.com/full-report/
-
와, ChatGPT를 쓰는 누군가가 브라우저 헤더 개념을 발견하고는 이상하게 “우리는 알려주지 않기로 했습니다” 같은 문구를 붙인 듯함
정말 브라우저가 무엇을 보내는지 알고 싶다면 여기를 보면 됨:
https://browserleaks.com/
https://coveryourtracks.eff.org/ -
“우리는 당신의 위치를 요청하지 않았습니다. 당신의 주소가 당신보다 먼저 도착했습니다”는 헛소리임. 내 IP 주소를 키로 위치 정보 API/서비스에 조회했으니 내 위치를 요청한 게 맞음
그리고 인터넷 통신이 작동하려면 IP는 거의 필수임. 숨겨주는 서비스를 쓰는 방법도 있지만, 그러면 그 서비스가 내 정보를 갖게 됨- 아님. 브라우저에는 위치 정보를 요청하는 메커니즘이 있고, 여기서 말한 “요청”은 그걸 수행하지 않았다는 뜻임. 사용자에게 묻지 않았다는 게 중요한 부분임
사전이 있다면 대화 상대에게 들은 단어의 뜻을 꼭 물어볼 필요 없이 사전에서 찾아볼 수 있음. 단어가 여러 뜻을 가지거나 구어체라서 잘못 추론할 수도 있음. 그 부정확함을 바로잡으려면 대화 맥락 같은 다른 데이터 포인트가 필요하거나, 상대에게 직접 확인을 요청할 수 있음 - 이걸 잘못 읽은 것 같음. “아무에게도 묻지 않았다”가 아니라 사용자에게 직접 묻지 않았다는 뜻임
그리고 당연히 주소가 먼저 도착함. 그래야 요청한 데이터를 돌려보낼 수 있음 - Tor와 비슷한 다중 홉 프록시는 구조에 따라 출발지 IP와 목적지 IP를 대응시킬 수 없다고 알려져 있음
- 아님. 브라우저에는 위치 정보를 요청하는 메커니즘이 있고, 여기서 말한 “요청”은 그걸 수행하지 않았다는 뜻임. 사용자에게 묻지 않았다는 게 중요한 부분임