코드를 읽으려 하자 분석이 멈췄다: 브라우저 지문 스크립트의 방해 장치

브라우저 지문 수집 코드를 분석하던 도구가 유해 문구에 반응해 응답을 차단했습니다. 실제 수집 기능과 분석을 방해하는 문자열을 나눠 살펴봅니다.

코드 문서 안에서 솟아올라 읽는 빛을 막는 중단 표식

브라우저가 방문자를 구별하려고 그린 그림을 따라갔더니, 코드 안에서 생물무기와 자해를 연상시키는 이름이 나왔다. 보안 연구자 veritas가 10월 28일 공개한 분석 사례다. 해당 파일의 난독화를 풀어 달라는 요청에 Astra는 생물학 연구 관련 안전 문제를 들어 응답을 차단했다. 연구자가 같은 요청을 GLM-5.3에 보냈을 때는 분석이 진행됐다고 한다.

이 사례에서 눈여겨볼 것은 위험한 단어가 발견됐다는 사실보다 그 단어가 쓰인 위치다. 웹사이트 방문자를 식별하는 코드 안에, 코드를 읽는 모델의 안전 판단을 자극할 문구가 들어 있었다. 원문 저자는 이를 언어모델을 이용한 역분석을 방해하려는 장치로 해석했다. 생물무기를 만드는 웹사이트가 발견됐다는 이야기는 아니다.

방문자를 구별하는 그림에서 시작한 조사

브라우저 지문은 화면을 그리는 방식이나 기기 특성처럼 여러 신호를 조합해 브라우저 환경을 구별하는 기법이다. 쿠키에 식별자를 저장하는 방식과 달리, 환경이 내놓는 결과 자체를 단서로 쓴다. 같은 글자나 도형을 그려도 운영체제와 그래픽 드라이버 등에 따라 픽셀이 조금 달라질 수 있다. 캔버스 지문 수집은 이 차이를 읽는다.

연구자는 Tranco의 인기 사이트 목록을 바탕으로 Playwright로 1만 개 사이트를 조사했다. 캔버스의 픽셀을 읽어 가는 호출과 자동화 탐지에 쓰이는 속성을 관찰했고, 수집한 그림을 fingerprint.garden에 모았다. 그중 노란 물결무늬 그림을 만든 파일을 추적하다가 이번 스크립트를 발견했다. 그림은 장식으로 넣은 배경이 아니라 지문 수집 과정에서 나온 출력물이다.

연구자가 수집한 지문용 캔버스. 어두운 바탕에 노란 물결선이 겹쳐 있다.
출처: veritas의 분석 글

프로그램의 기능보다 분석기의 반응을 겨냥한 이름

코드를 읽기 어렵게 만드는 난독화는 흔하다. 변수명을 의미 없는 문자로 바꾸거나 실행 흐름을 꼬아 놓는다. 이번 파일은 여기에 다른 방식을 더했다. 함수 이름과 문자열에 유해 행위를 떠올리게 하는 표현을 넣었다. 프로그램이 실제로 그 행위를 하는지 따지기 전에, 분석 모델이 내용 자체를 위험한 요청으로 분류하도록 유도할 수 있는 재료다.

연구자는 이름이 의도적인 미끼일 수 있다는 설명까지 붙여 Astra에 분석을 요청했다. 공개된 화면에는 식별자를 정리하고 브라우저 신호를 추적하겠다는 응답과 여러 도구 실행 기록이 보인다. 그 아래에는 생물학 연구와 응용의 안전 위험 때문에 콘텐츠를 표시할 수 없다는 안내가 나온다. 원문에 따르면 Daybreak Blue 옵션을 켰을 때도 차단됐지만 GLM-5.3은 같은 요청을 받아들였다. 이 결과는 해당 요청에서 나타난 차이이며 모델 전체의 보안 성능 순위로 넓혀 읽을 수는 없다.

연구자가 공개한 Astra 분석 화면. 코드 분석과 도구 실행 기록 아래에 생물학 연구 안전 문제로 콘텐츠를 표시하지 않는다는 안내가 나타난다.
출처: veritas의 Astra 분석 화면

보이지 않는 문자열도 분석 입력이 된다

방해 문구는 읽기 쉬운 함수명에만 있지 않았다. 저자는 눈에 잘 드러나지 않는 유니코드 문자열을 살폈고, 각 문자의 코드 포인트에서 917504를 빼는 복원 로직을 제시했다. 공개한 복원 결과에는 자신을 시스템 지시라고 내세우며 안전 규칙을 무시하라는 문장과 여러 유해 주제의 요청이 들어 있었다. 중국의 정치적 검열을 자극할 법한 표현도 섞여 있었다.

여기에는 서로 다른 두 문제가 겹친다. 외부 파일 속 문장을 분석 도구의 지시로 받아들이면 프롬프트 인젝션이 된다. 그 문장을 따르지 않더라도, 유해 표현을 읽었다는 이유로 정당한 보안 분석까지 중단하면 작업을 방해할 수 있다. 사용자가 요청한 일은 코드의 기능을 설명하는 것이고, 코드 안의 문자열은 설명해야 할 자료다. 둘의 권한을 나눠 다뤄야 한다.

정당한 사용자 요청과 분석 대상 파일의 권한 구분. 사용자는 수집 정보를 설명하라고 요청하지만 파일 속 문자열은 규칙을 무시하라는 가짜 지시를 담는다.
원문 기반 한글 재구성. 출처: veritas

수집 기능과 수상한 실행 경로는 따로 봐야 한다

저자가 공개한 일반적인 수집 항목은 브라우저 종류, 사용 언어, 논리 프로세서 수와 메모리 정보, 자동화 여부 등이었다. WebGL에서는 그래픽 공급업체와 렌더러, 지원 기능의 수 같은 신호를 읽었다. 자극적인 이름과 별개로 이 부분의 기능은 봇 탐지용 환경 수집에 가깝다는 분석이다.

그렇다고 파일 전체를 무해하다고 결론내릴 근거도 없다. 원문에는 브라우저가 아닌 Node 환경에서 특정 환경변수가 설정됐을 때만 들어가는 실행 경로가 등장한다. 설정 파일 읽기와 외부 실행 파일 내려받기, 시스템 정보 수집과 재시작 후 실행 등록을 시도하는 코드가 담겨 있다. 저자는 이것 역시 분석 모델을 자극할 미끼일 가능성을 제기했지만, 파일 읽기의 콜백이 비어 있다는 사실만으로 뒤따르는 명령의 효과까지 사라지지는 않는다. 이 글에 제시된 것은 코드 경로이며 실제 침해가 일어났다는 증거와는 구별해야 한다.

보안 담당자가 이런 파일을 모델에 맡길 때는 응답 거부를 악성 판정이나 조사 완료로 취급하지 않는 편이 맞다. 읽기 전용으로 문자열과 호출 관계를 먼저 살피고, 실행 확인이 필요하다면 업무 파일·자격증명과 분리된 환경에서 해야 한다. 분석을 계속하는 모델을 찾았더라도 파일을 실행할 권한까지 함께 줄 이유는 없다.


출처: veritas, Why Is This Fingerprinting Script Creating Bioweapons?