한 줄 정의

브라우저 파비콘 보안 취약점은 웹상에서 보안 스캔의 사각지대에 놓인 이미지 파일(파비콘)의 RGB 픽셀 값에 스테가노그래피(steganography) 수법으로 악성 코드나 데이터를 은폐하여 방화벽 및 콘텐츠 보안 정책(CSP)을 우회하는 공격 기법이다.

핵심 요지

  • 픽셀 하나는 R, G, B 채널(각 0~255)로 구성되어 1픽셀당 3바이트의 데이터를 저장할 수 있다.
  • 8×8 픽셀 크기의 무해해 보이는 254바이트 PNG 파일 안에 166바이트 분량의 실제 동작하는 HTML/JS 웹사이트 데이터를 인코딩해 저장할 수 있다.
  • 리눅스 file 명령어 및 Pillow 이미지 검사 라이브러리는 해당 파일을 문법적으로 완전하고 에러 없는 유효한 PNG 이미지로 인식한다.
  • 보안 장비(방화벽, 백신, 업로드 필터)가 .png 파일을 무해하다고 오인하는 허점과, CSP의 이미지 허용 규칙(img-src)이 무제한으로 열려 있는 구조를 노려 회피 및 은폐(obfuscation) 기법으로 악용된다.

상세

픽셀 스테가노그래피 인코딩 원리

  1. 텍스트 페이로드 바이트 변환: HTML/JS 문자열을 UTF-8 바이트 시퀀스로 인코딩한다.
  2. 헤더 부착: 메타데이터 경계 구분을 위해 데이터 전체 길이를 전달하는 4바이트 헤더를 맨 앞에 배치한다.
  3. 픽셀 매핑: R, G, B 채널에 1바이트씩 픽셀 배열을 채운 뒤 가장 작은 규격의 PNG 이미지로 구워낸다.

실제 실험에서 166바이트 HTML 페이로드에 4바이트 헤더를 더해 170바이트를 8×8 px 이미지(64 픽셀, 192바이트 용량, 사용률 89%)에 은폐시켰으며, 디스크 용량 불과 254바이트의 유효한 PNG 이미지를 생성해 단 1바이트 유실 없이 디코딩에 성공했다.

4대 브라우저 보안 위협 시나리오

  1. 방화벽 및 업로드 필터 우회: 보안 관점에서 .png 파일은 무해한 정적 자산으로 처리되므로, 픽셀 속에 자바스크립트 페이로드를 숨겨 정적 스캐너 탐지 필터를 통과시킨다.
  2. 콘텐츠 보안 정책(CSP) 무력화: 외부 스크립트 도메인 차단 규칙을 우회하기 위해 img-src 채널을 통해 악성 픽셀 이미지를 브라우저 내부로 반입한 뒤, 미리 허용되어 있던 내부 로더 스크립트가 이미지를 메모리에서 해독·기동한다.
  3. 비밀 통제 채널(C2 Channel): 강력하게 캐싱되고 주기적으로 브라우저가 자동 요청하는 파비콘 특성을 악용해 악성코드 감염 기기의 비밀 명령 수신함 및 탈취 정보 업로드 채널로 활용한다.
  4. DOM 주입을 통한 RCE/XSS 둔갑: 픽셀에서 해독해 낸 데이터를 웹 페이지 DOM에 동적 삽입할 때 검증(sanitization)이 누락되면 스크립트가 구동된다.

방어자 관점의 기술적 억제책

파비콘 스테가노그래피는 자발적인 0-day 스크립트 실행 권한을 가진 무기가 아니며, 픽셀을 읽어 디코딩해 줄 징검다리 로더 스크립트가 클라이언트에 존재해야 작동하는 은폐 기법이다.

  • 이미지 픽셀에서 추출한 텍스트 데이터를 DOM에 삽입할 때 innerHTML 사용을 전면 금지하고 textContent를 적용한다.
  • 확장자 및 MIME 타입 유효성 검사만으로 파일의 안전성을 판단하지 않는다.
  • CSP의 이미지 출처 허용 범위를 엄격하게 제한한다.

예시

# file 명령어 검사 결과
favicon.png: PNG image data, 8 x 8, 8-bit/color RGB, non-interlaced
 
# 디코딩 결과
헤더 읽기: 166 바이트
디코딩된 페이로드: <h1>Favicon 내부의 웹사이트</h1><p>...</p>
원본 데이터 일치: True

충돌

파비콘을 실제 대용량 웹사이트나 스크립트의 보관 장소로 활용하는 것은 비효율적이다. 해독용 자바스크립트 스크립트가 별도로 필요하고 픽셀당 데이터 저장 밀도가 제한적이므로, 독립적인 해킹 도구라기보다는 탐지 회피용 보조 컨테이너로 이해해야 한다.

관련 노트