제목부터 범상치 않은 이야기
웹사이트에 접속하면 눈에 안 보이는 곳에서 수많은 스크립트가 돌아가요. 그중에는 "지금 들어온 게 사람이 쓰는 진짜 브라우저인지, 자동화된 봇인지"를 가려내는 핑거프린팅(fingerprinting) 스크립트도 있죠. 리버스 엔지니어링 블로그 nullpt.rs에 올라온 이번 글은 이런 스크립트 하나를 뜯어보는 이야기인데요, 제목 그대로 이 스크립트가 왜 생물무기(bioweapons)와 관련된 무언가를 만들어내고 있느냐는 질문을 던져요.
얼핏 농담처럼 들리지만, 그 뒤에는 웹 보안과 AI가 만나는 지점에 대한 꽤 진지한 이야기가 있어요. 이 글에서는 그 수수께끼를 이해하는 데 필요한 배경, 그러니까 핑거프린팅이 어떻게 동작하는지와 이런 스크립트를 분석하는 게 왜 점점 어려워지는지를 차근차근 풀어볼게요. 스크립트가 정확히 무엇을 왜 하는지에 대한 답은 원문의 분석 과정을 직접 따라가 보시길 추천해요.
핑거프린팅이 뭐냐면
쿠키가 "너한테 이름표를 붙여줄게"라면, 핑거프린팅은 "이름표 없이도 생김새로 알아볼게"에 가까워요. 브라우저는 생각보다 많은 정보를 흘리거든요.
- Canvas 핑거프린팅: 안 보이는 캔버스에 글자와 도형을 그리고 픽셀 값을 해시로 뽑아요. 같은 그림이어도 GPU, 드라이버, 폰트 렌더링에 따라 미세하게 달라져서 기기마다 고유한 값이 나와요.
- WebGL·WebGPU 정보: 그래픽 카드 제조사, 렌더러 이름, 지원하는 확장 기능 목록 같은 것들이요.
- 오디오 핑거프린팅: AudioContext로 소리를 합성하고, 결과값의 아주 작은 차이를 재요.
- 환경 정보: 설치된 폰트, 화면 크기, 시간대, 언어 설정,
navigator객체의 각종 속성들. - 난독화(obfuscation): 변수명을
_0x3fa2같은 의미 없는 이름으로 바꾸고, 문자열을 암호화해 뒀다가 실행할 때만 풀어요. - 제어 흐름 평탄화: if/for 구조를 거대한 switch문 하나로 뭉개서 흐름을 따라가기 힘들게 해요.
- 가상 머신(VM) 기반 보호: 가장 강력한 방식이에요. 자바스크립트 안에 직접 만든 작은 가상 CPU를 넣고, 진짜 로직은 그 VM만 알아듣는 바이트코드로 숨겨둬요. 분석하는 사람은 그 VM의 명령어 체계부터 해독해야 하죠.
- 크롤링·자동화를 하는 분: User-Agent만 바꾸는 정도로는 요즘 안티봇을 통과하기 어려워요. 그리고 기술적으로 된다고 다 해도 되는 건 아니에요. 국내에서도 크롤링을 둘러싼 법적 분쟁이 있었으니 약관과 법적 리스크를 꼭 같이 따져보세요.
- 서비스를 운영하는 분: 로그인이나 티켓팅처럼 봇이 몰리는 곳에 붙인 안티봇 솔루션이 어떤 데이터를 모으는지 알고 있어야 해요. 핑거프린팅은 개인정보 이슈와 맞닿아 있으니까요.
- 보안·리버싱에 관심 있는 분: 개발자 도구의 브레이크포인트와 Babel 같은 AST 변환 도구로 난독화된 JS를 풀어보는 연습은 정말 좋은 공부예요.
- AI 서비스를 만드는 분: 에이전트가 웹페이지를 읽는 순간 페이지 텍스트는 곧 모델의 입력이 돼요. 웹 콘텐츠가 모델 동작에 영향을 주는 프롬프트 인젝션은 이제 남의 얘기가 아니에요.
하나하나는 평범한 정보인데, 수십 개를 조합하면 사람 지문처럼 꽤 고유한 값이 돼요. 그래서 '핑거프린트'라고 부르는 거예요.
이 기술은 얼굴이 두 개예요. 광고 업계는 쿠키 없이 사용자를 추적하는 데 쓰고, 보안 업계는 봇 탐지에 써요. Cloudflare, Akamai, DataDome 같은 안티봇 솔루션은 "이 브라우저 환경이 진짜 크롬과 맞아떨어지는가"를 꼼꼼히 확인하거든요. Puppeteer나 Playwright로 띄운 헤드리스 브라우저는 아무리 위장해도 어딘가에서 티가 나기 마련이라, 그 미세한 불일치를 잡는 게 핵심이에요.
이런 스크립트는 왜 읽기 어려울까
안티봇 스크립트는 일부러 읽기 어렵게 만들어요. 분석당하면 우회법이 금방 퍼지니까요.
nullpt.rs 같은 리버서들은 이런 스크립트를 역난독화하고 바이트코드를 읽을 수 있는 코드로 되돌리면서 "이 스크립트가 진짜로 수집하는 게 뭔지"를 밝혀내요. 제목의 질문도 아마 그런 작업 중에 튀어나온 의문일 거예요.
업계 맥락: 브라우저에 AI가 들어오면서 생긴 변화
이 이야기가 지금 특히 흥미로운 건 브라우저 환경 자체가 빠르게 바뀌고 있어서예요. 크롬은 기기 안에서 돌아가는 언어 모델 기반의 요약·번역 같은 내장 AI 기능을 웹 API로 열기 시작했고, AI 에이전트가 사용자 대신 웹을 돌아다니는 'AI 브라우저'들도 계속 나오고 있죠.
핑거프린팅 쪽에서 보면 측정할 대상이 새로 생긴 거예요. 예전에는 GPU가 그린 그림의 픽셀 차이를 봤다면, 이제는 "이 브라우저에 어떤 AI 기능이 붙어 있나", "페이지를 읽는 게 사람인가 AI 에이전트인가"까지 알고 싶어지는 거죠. 그리고 대부분의 AI 모델에는 위험한 요청을 거절하는 안전장치가 있고, 생물무기는 그중에서도 가장 강하게 거절하도록 훈련된 주제라는 점도 기억해 두세요. 이 사실들이 제목과 어떻게 이어지는지, 원문을 읽기 전에 한번 추리해 보는 것도 재미있을 거예요.
한국 개발자에게 주는 시사점
마무리
한 줄 정리: 핑거프린팅은 브라우저의 미세한 개성을 읽어내는 기술인데, 브라우저에 AI가 들어오면서 그 개성의 범위가 예상 못 한 방향으로 넓어지고 있어요.
봇을 잡겠다고 브라우저 환경을 이렇게까지 들여다보는 건 정당한 보안 조치일까요, 프라이버시 침해에 가까울까요? AI 에이전트가 웹을 돌아다니는 시대에 '사람인지 아닌지'를 가리는 일은 앞으로 어떻게 바뀔까요?
🔗 출처: Hacker News