한 줄 정의
브라우저 파비콘 보안 취약점은 웹상에서 보안 스캔의 사각지대에 놓인 이미지 파일(파비콘)의 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) 기법으로 악용된다.
상세
픽셀 스테가노그래피 인코딩 원리
- 텍스트 페이로드 바이트 변환: HTML/JS 문자열을 UTF-8 바이트 시퀀스로 인코딩한다.
- 헤더 부착: 메타데이터 경계 구분을 위해 데이터 전체 길이를 전달하는 4바이트 헤더를 맨 앞에 배치한다.
- 픽셀 매핑: R, G, B 채널에 1바이트씩 픽셀 배열을 채운 뒤 가장 작은 규격의 PNG 이미지로 구워낸다.
실제 실험에서 166바이트 HTML 페이로드에 4바이트 헤더를 더해 170바이트를 8×8 px 이미지(64 픽셀, 192바이트 용량, 사용률 89%)에 은폐시켰으며, 디스크 용량 불과 254바이트의 유효한 PNG 이미지를 생성해 단 1바이트 유실 없이 디코딩에 성공했다.
4대 브라우저 보안 위협 시나리오
- 방화벽 및 업로드 필터 우회: 보안 관점에서
.png파일은 무해한 정적 자산으로 처리되므로, 픽셀 속에 자바스크립트 페이로드를 숨겨 정적 스캐너 탐지 필터를 통과시킨다. - 콘텐츠 보안 정책(CSP) 무력화: 외부 스크립트 도메인 차단 규칙을 우회하기 위해
img-src채널을 통해 악성 픽셀 이미지를 브라우저 내부로 반입한 뒤, 미리 허용되어 있던 내부 로더 스크립트가 이미지를 메모리에서 해독·기동한다. - 비밀 통제 채널(C2 Channel): 강력하게 캐싱되고 주기적으로 브라우저가 자동 요청하는 파비콘 특성을 악용해 악성코드 감염 기기의 비밀 명령 수신함 및 탈취 정보 업로드 채널로 활용한다.
- 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충돌
파비콘을 실제 대용량 웹사이트나 스크립트의 보관 장소로 활용하는 것은 비효율적이다. 해독용 자바스크립트 스크립트가 별도로 필요하고 픽셀당 데이터 저장 밀도가 제한적이므로, 독립적인 해킹 도구라기보다는 탐지 회피용 보조 컨테이너로 이해해야 한다.