Structural File‑Format Exploit Detection (0‑Click Chains)

Reading time: 6 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

이 페이지는 바이트 시그니처에 의존하지 않고 포맷의 구조적 불변성을 검증하여 0‑click 모바일 exploit 파일을 탐지하는 실무 기법을 요약합니다. 이 접근법은 샘플, polymorphic 변종, 및 동일한 parser 로직을 악용하는 향후 exploits에 대해 일반화됩니다.

Key idea: 취약한 decoder/parser 상태에 도달했을 때에만 나타나는 구조적 불가능성과 필드 간 불일치를 인코딩하는 것.

See also:

PDF File analysis

왜 구조를 사용하는가, 시그니처가 아닌가

무기화된 샘플을 구할 수 없고 payload 바이트가 변형되면 전통적인 IOC/YARA 패턴은 실패합니다. 구조 기반 탐지는 컨테이너가 선언한 레이아웃을 해당 포맷 구현에서 수학적·의미론적으로 가능한 것과 비교합니다.

Typical checks:

  • 스펙(spec)과 안전한 구현에서 파생된 테이블 크기 및 경계값을 검증
  • 임베디드 bytecode에서 불법/문서화되지 않은 opcodes나 상태 전환을 플래그
  • metadata와 실제 인코딩된 스트림 구성 요소를 교차 검증
  • parser의 혼란이나 integer overflow 설정을 나타내는 모순된 필드를 탐지

Below are concrete, field‑tested patterns for multiple high‑impact chains.


PDF/JBIG2 – FORCEDENTRY (CVE‑2021‑30860)

Target: JBIG2 symbol dictionaries embedded inside PDFs (often used in mobile MMS parsing).

Structural signals:

  • 정상 콘텐츠에서는 발생할 수 없지만 arithmetic decoding에서 오버플로우를 유발하기 위해 필요한 모순된 dictionary 상태
  • refinement coding 동안 비정상적인 symbol 개수와 결합된 global segments의 의심스러운 사용

Pseudo‑logic:

pseudo
# Detecting impossible dictionary state used by FORCEDENTRY
if input_symbols_count == 0 and (ex_syms > 0 and ex_syms < 4):
mark_malicious("JBIG2 impossible symbol dictionary state")

실무 트리아지:

  • PDF에서 JBIG2 스트림을 식별하고 추출
  • pdfid/pdf-parser/peepdf를 사용해 스트림을 찾고 덤프
  • JBIG2 spec에 따라 산술 부호화 플래그(arithmetic coding flags)와 심볼 사전 매개변수(symbol dictionary parameters) 검증

참고:

  • 임베디드 payload 서명 없이 동작
  • 실무에서 오탐률이 낮음 — 플래그된 상태가 수학적으로 일관되지 않기 때문

WebP/VP8L – BLASTPASS (CVE‑2023‑4863)

대상: WebP lossless (VP8L) Huffman prefix‑code tables.

구조적 신호:

  • 구성된 Huffman 테이블의 전체 크기가 참조/패치된 구현들이 기대하는 안전 상한을 초과하여, 오버플로우 발생 전제를 시사함.

의사 로직:

pseudo
# Detect malformed Huffman table construction triggering overflow
let total_size = sum(table_sizes)
if total_size > 2954:   # example bound: FIXED_TABLE_SIZE + MAX_TABLE_SIZE
mark_malicious("VP8L oversized Huffman tables")

실무적 선별:

  • WebP 컨테이너 청크 확인: VP8X + VP8L
  • VP8L 프리픽스 코드를 파싱하고 실제 할당된 테이블 크기 계산

참고:

  • payload의 바이트 수준 다형성에 대해 강건함
  • 경계는 upstream의 제한/패치 분석에서 도출됨

TrueType – TRIANGULATION (CVE‑2023‑41990)

대상: fpgm/prep/glyf 프로그램 내부의 TrueType bytecode.

구조적 신호:

  • 문서화되지 않았거나 금지된 opcodes가 exploit chain에서 사용되는 Apple의 interpreter에 존재함.

의사 로직:

pseudo
# Flag undocumented TrueType opcodes leveraged by TRIANGULATION
switch opcode:
case 0x8F, 0x90:
mark_malicious("Undocumented TrueType bytecode")
default:
continue

실무 트리아지:

  • 폰트 테이블을 덤프(예: fontTools/ttx 사용)하고 fpgm/prep/glyf 프로그램을 스캔
  • presence checks만으로도 가치를 얻을 수 있으므로 인터프리터를 완전히 에뮬레이트할 필요 없음

참고:

  • 비표준 폰트가 알 수 없는 opcodes를 포함하면 드물게 오탐(FP)을 발생시킬 수 있음; 보조 툴로 검증

DNG/TIFF – CVE‑2025‑43300

대상: DNG/TIFF 이미지 메타데이터 VS 인코딩된 스트림의 실제 컴포넌트 수(예: JPEG‑Lossless SOF3).

구조적 신호:

  • EXIF/IFD 필드(SamplesPerPixel, PhotometricInterpretation)와 파이프라인에서 사용되는 이미지 스트림 헤더에서 파싱된 컴포넌트 수 간의 불일치.

의사 로직:

pseudo
# Metadata claims 2 samples per pixel but stream header exposes only 1 component
if samples_per_pixel == 2 and sof3_components == 1:
mark_malicious("DNG/TIFF metadata vs. stream mismatch")

Practical triage:

  • 기본 IFD 및 EXIF 태그 파싱
  • 임베디드 JPEG‑Lossless 헤더(SOF3)를 찾아 파싱하고 구성 요소 개수 비교

Notes:

  • 실전에서 악용 사례 보고됨; 구조적 일관성 검사에 매우 적합

Implementation patterns and performance

실무용 스캐너는:

  • 파일 유형을 자동 감지하고 관련 분석기(PDF/JBIG2, WebP/VP8L, TTF, DNG/TIFF)만 실행
  • 할당을 최소화하고 조기 종료를 가능하게 하기 위해 스트리밍/부분 파싱 수행
  • 대량 triage를 위해 분석을 스레드 풀(thread‑pool)로 병렬 실행

Example workflow with ElegantBouncer (이 검사들의 오픈소스 Rust 구현):

bash
# Scan a path recursively with structural detectors
$ elegant-bouncer --scan /path/to/directory

# Optional TUI for parallel scanning and real‑time alerts
$ elegant-bouncer --tui --scan /path/to/samples

DFIR 팁 및 예외 사례

  • Embedded objects: PDFs may embed images (JBIG2) and fonts (TrueType); extract and recursively scan
  • Decompression safety: 할당 전에 테이블/버퍼를 하드 제한하는 라이브러리 사용
  • False positives: 규칙을 보수적으로 유지하고, 스펙상 불가능한 모순을 우선시
  • Version drift: 업스트림 파서가 제한을 변경할 때 경계값(예: VP8L table sizes)을 재기준화

  • ElegantBouncer – 위의 탐지에 대한 구조적 스캐너
  • pdfid/pdf-parser/peepdf – PDF object extraction and static analysis
  • pdfcpu – PDF linter/sanitizer
  • fontTools/ttx – dump TrueType tables and bytecode
  • exiftool – read TIFF/DNG/EXIF metadata
  • dwebp/webpmux – parse WebP metadata and chunks

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기