본문으로 건너뛰기
피드

웹페이지 하나가 허락 없이 브라우저에서 알아낼 수 있는 것들

security 약 8분
vote
0
댓글
북마크

이 웹페이지는 사용자가 접속한 첫 순간 브라우저가 기본으로 넘겨주는 정보만으로 위치, 화면, 언어, GPU, 폰트, 배터리, 브라우저 지문 같은 단서를 얼마나 많이 만들 수 있는지 보여준다. 해킹이나 취약점이 아니라 표준 자바스크립트 API와 브라우저 동작만으로 가능한 일이라는 점이 핵심이다. 페이지는 일부 위험한 기법을 실행하지 않았다고 밝히지만, 다른 사이트는 같은 기능을 추적과 광고에 얼마든지 쓸 수 있다는 메시지를 던진다.

  • 1

    IP 주소, 브라우저 API, 폰트, 캔버스, 배터리, 화면 정보만으로 방문자를 상당히 구분 가능

  • 2

    캔버스 핑거프린팅은 2014년 프린스턴 연구에서 상위 10만 개 웹사이트 중 5퍼센트에서 관찰됨

  • 3

    배터리 API 조합은 2015년 연구에서 최대 30분 동안 쿠키 없이 방문자 추적 가능성을 보임

  • 4

    파비콘 요청을 이용해 사용자가 특정 서비스에 로그인했는지 감지하는 기법도 문서화돼 있음

  • 이 페이지의 메시지는 단순함. “당신이 허락하지 않아도 브라우저는 이미 꽤 많은 걸 말한다”임

    • 접속 직후 몇 밀리초 안에 브라우저가 넘겨준 정보만으로 페이지가 여러 관찰 결과를 구성함
    • 해킹, 취약점, 몰래 심은 악성코드가 아니라 표준 자바스크립트 API와 일반적인 브라우저 동작을 사용함
    • 글쓴이는 “모든 게 설계대로 작동한다. 문제는 그 설계다”라는 식으로 이 불편한 지점을 찌름
  • IP 주소만으로도 위치와 인터넷 제공자 단서를 만들 수 있음

    • 모든 요청의 헤더에는 IP 주소가 따라감
    • 페이지는 이를 ip-api.com에 보내 도시와 인터넷 제공자 이름으로 변환한다고 설명함
    • 화면에는 첫 옥텟과 마지막 옥텟만 보여주지만, 나머지 값을 알 수는 있었다고 적음
    • GDPR에서는 추적에 쓰이는 IP 주소가 개인정보로 간주될 수 있음
  • 브라우저 API는 생각보다 많은 장치 정보를 노출함

    • 화면, 브라우저, 언어, GPU, 코어 수, 배터리, 폰트, 사용자 선호 설정 같은 정보가 표준 API를 통해 관찰될 수 있음
    • 이 페이지는 모질라 문서에 공개된 일반 API를 사용한다고 밝힘
    • 즉 “위험한 사이트라서 특별히 당했다”가 아니라, 현대 브라우저가 제공하는 기능의 조합이 문제라는 얘기임
  • 폰트 핑거프린팅은 오래된 추적 신호임

    • 설치된 폰트 조합은 렌더링된 텍스트 폭을 측정해서 추정할 수 있음
    • 이 기법은 2010년부터 문서화돼 있음
    • EFF의 도구는 내 브라우저가 얼마나 고유한지 보여주는데, 많은 브라우저는 쿠키 없이도 웹 전반에서 추적될 만큼 충분히 독특함
    • 폰트 조합은 그중에서도 강한 신호 중 하나로 꼽힘

중요

> 프라이버시 리스크는 “쿠키를 막으면 끝”이 아님. 폰트, GPU, 화면, 언어, 시간대 같은 조합만으로도 사용자를 꽤 좁혀갈 수 있음.

  • 캔버스 핑거프린팅(canvas fingerprinting)은 더 노골적인 예시임

    • 2014년 프린스턴 연구가 실제 웹에서 캔버스 핑거프린팅을 처음 문서화함
    • 당시 상위 10만 개 웹사이트 중 5퍼센트에서 발견됐다고 함
    • 방식은 숨겨진 이미지를 브라우저에 그리게 하고, 렌더링된 픽셀을 다시 읽어 식별자로 쓰는 것임
    • 이 페이지는 해당 기법을 실행하지 않았지만, 방문자의 브라우저는 그 기능을 지원한다고 설명함
  • 클립보드 API도 “타이밍만 맞으면” 민감해질 수 있음

    • 클릭이나 탭 같은 사용자 제스처가 한 번 있으면 페이지가 마지막으로 복사한 내용을 읽도록 요청할 수 있음
    • 그 내용이 비밀번호, 주소, 메시지 초안일 수도 있음
    • 이 페이지는 요청하지 않았지만, 기능 자체는 현대 브라우저에 존재함
  • 배터리 정보도 한때 추적 신호가 됐음

    • 2015년 “The Leaking Battery” 연구는 배터리 퍼센트와 방전 시간 조합이 방문자를 최대 30분 동안 추적할 만큼 고유할 수 있음을 보였음
    • 쿠키도, 계정도 필요 없었다는 점이 포인트임
    • 파이어폭스는 2016년에 해당 API를 제거했지만, 크롬과 엣지는 여전히 노출한다고 글은 설명함
  • 실행하지 않았지만 더 찝찝한 기법도 소개됨. 파비콘으로 로그인 여부를 추정하는 방식임

    • 페이지가 여러 서비스의 파비콘 URL을 로드해보고 성공과 실패를 관찰함
    • 로그인 상태와 로그아웃 상태에서 다른 이미지가 돌아오면, 사용자가 특정 서비스에 로그인했는지 알 수 있음
    • 페이스북, 구글, X, 깃허브, 레딧, 링크드인 같은 서비스가 예시로 언급됨
    • 허가가 필요 없고, 문서화돼 있으며, 법적으로도 쓰일 수 있다는 점이 더 찜찜함

⚠️주의

> 브라우저에서 “권한 요청 팝업이 안 떴으니 안전하다”고 보기 어렵다. 권한 없이 가능한 관찰만으로도 추적 신호가 충분히 만들어질 수 있음.

  • 페이지는 방문자별 16줄짜리 바코드도 만든다고 설명함

    • GPU, 폰트, 화면 크기, 언어, 시간대, 운영체제, 브라우저, 색상 깊이 같은 값에서 16개의 선 높이를 계산함
    • 같은 데이터면 같은 바코드가 나오고, 다른 방문자면 다른 바코드가 나올 가능성이 높음
    • 계산은 브라우저 안에서만 일어나고 전송하지 않는다고 밝힘
  • 그래도 이 페이지는 “우리는 덜 했다”고 꽤 집요하게 밝힘

    • 런타임에 대규모 언어 모델(LLM)이 문장을 만들지 않고, 사람이 쓴 템플릿 중 조건에 맞는 문장을 고른다고 설명함
    • 서버로 보낸 이벤트는 도착과 완료, 총 2개뿐이라고 밝힘
    • 쿠키, 로컬스토리지, 세션스토리지, 인덱스드DB, 서비스워커 캐시는 쓰지 않는다고 함
    • 다만 호스팅 제공자의 기본 로그는 며칠 남을 수 있고, 이건 대부분의 사이트가 똑같이 가진 현실이라고 덧붙임
  • 프론트엔드와 보안 개발자에게 이 글이 주는 교훈은 꽤 실용적임

    • 기능 하나하나는 합리적이어도, 조합하면 강한 식별자가 될 수 있음
    • 사용자에게 친절한 기능과 사용자를 추적 가능한 대상으로 만드는 기능 사이의 경계가 생각보다 얇음
    • 브라우저 API를 설계하거나 사용하는 쪽 모두 “이 값이 단독으로 무해한가”가 아니라 “다른 값과 결합하면 어떤 신호가 되는가”를 봐야 함

기술 맥락

  • 이 글의 핵심 기술 선택은 공격 코드를 보여주는 게 아니라, 표준 브라우저 기능만으로 관찰 가능한 정보를 한 화면에 모은 거예요. 그래서 더 불편해요. 취약점을 패치하면 끝나는 문제가 아니라, 정상 동작의 조합이 추적 표면이 되거든요.

  • 브라우저 핑거프린팅이 강한 이유는 신호 하나하나는 평범하지만 조합하면 고유성이 커지기 때문이에요. 화면 크기, 폰트, GPU, 언어, 시간대는 각각은 흔한 값이어도, 전부 합치면 특정 사용자를 꽤 좁혀갈 수 있어요.

  • 캔버스나 폰트 측정이 자주 언급되는 이유는 렌더링 결과가 환경 차이를 은근히 많이 반영하기 때문이에요. 같은 자바스크립트와 같은 텍스트라도 운영체제, 그래픽 드라이버, 폰트 구성에 따라 결과가 조금씩 달라질 수 있거든요.

  • 클립보드나 배터리 API 사례는 웹 플랫폼 설계의 트레이드오프를 잘 보여줘요. 웹앱에는 편리한 기능이지만, 광고 추적이나 세션 연결에 쓰이면 사용자 입장에서는 동의하지 않은 식별 채널이 돼요.

  • 그래서 개발팀이 봐야 할 건 “우리가 쿠키를 쓰는가”만이 아니에요. 어떤 브라우저 API를 호출하는지, 그 값이 다른 분석 이벤트와 결합될 때 사용자를 재식별할 수 있는지까지 같이 봐야 해요.

이 글의 무서운 점은 “악성 코드가 대단한 걸 훔쳤다”가 아니라 “브라우저가 원래 이렇게 많이 말한다”는 데 있음. 프론트엔드와 보안 쪽 개발자라면 기능 편의성과 프라이버시 노출 사이의 선을 다시 보게 되는 글임.

댓글

댓글

댓글을 불러오는 중...

security

AI 에이전트 보안, 이제 권한이 아니라 ‘실행 증거’ 싸움으로 간다

오페이크가 AI 에이전트의 ID, 실행 환경, 도구 호출, 정책 적용 여부를 암호학적으로 검증하는 오페이크 3.0을 공개했다. 핵심은 에이전트 매니페스트와 컨피덴셜 MCP라는 두 오픈소스 기술이며, 기밀 컴퓨팅과 서명된 실행 증거를 결합해 감사자나 규제기관도 독립적으로 확인할 수 있게 하는 방향이다. AI 에이전트가 업무 시스템과 데이터를 직접 만지는 시대에는 접근 권한보다 ‘무슨 일을 했는지 증명할 수 있느냐’가 더 중요해지고 있다.

security

취약점 제보가 더 이상 특별하지 않은 시대가 왔다

전 Go 보안팀 리드였던 필리포 발소르다가 LLM 이후 취약점 제보의 의미가 바뀌었다고 주장한다. 예전에는 희소한 통찰과 비공개 제보가 귀했지만, 이제는 잠재 취약점을 찾는 것보다 실제 영향도를 빠르게 가려내는 triage가 병목이라는 얘기다.

security

스패로우, AI가 만든 코드 취약점 잡는 ‘Sparrow MCP’ 출시

스패로우가 AI 코딩 에이전트가 생성한 코드의 보안 취약점과 사용된 오픈소스를 실시간으로 검사하는 보안 어시스턴트 ‘Sparrow MCP’를 출시했다. 핵심 기능은 취약점 분석과 소프트웨어 자재명세서(SBOM) 생성이며, 앤트로픽의 모델 컨텍스트 프로토콜(MCP)을 지원하는 AI와 연결할 수 있다는 점이다. AI 코딩이 빨라질수록 보안 검증과 오픈소스 추적이 개발 파이프라인 안으로 더 깊게 들어오는 흐름이다.

security

오픈AI, 오픈소스 취약점 고치는 ‘패치 더 플래닛’ 시작

오픈AI가 트레일 오브 비츠와 함께 주요 오픈소스 프로젝트의 취약점을 AI로 찾고, 사람 검토를 거쳐 실제 패치까지 연결하는 프로그램을 시작했다. 파이썬, 고, cURL, 시그스토어, NATS 서버 같은 핵심 프로젝트가 초기 대상이고, 지금까지 수백 건의 보안 이슈와 수십 건의 병합된 패치가 나왔다. 핵심은 AI가 보안팀을 대체하는 게 아니라, 탐지·검증·패치·공개 조율을 빠르게 만드는 보조 엔진이라는 점이다.

security

오픈AI, 취약점 찾기부터 패치까지 돕는 ‘코덱스 시큐리티’ 공개

오픈AI가 사이버보안 이니셔티브 데이브레이크를 확대하면서 보안 전용 도구 코덱스 시큐리티와 GPT-5.5-사이버를 공개했다. 목표는 취약점 탐지에서 끝나는 게 아니라 검증, 위험도 평가, 패치 개발, 테스트, 배포까지 AI로 지원하는 것이다. cURL, Go, Python, Sigstore 등 30개 이상 오픈소스 프로젝트도 패치 지원 프로그램에 참여한다.