피드로 돌아가기
Dev.toSecurity
원문 읽기
Computed-goto와 분할 Opcode Table을 통한 VM 정적 분석 무력화
TinyLoad v6 — split opcode tables, encrypted dispatch, and control flow flattening
AI 요약
Context
기존 v5의 거대 switch 문 기반 VM Interpreter 구조로 인해 Disassembler가 핸들러 레이아웃을 쉽게 식별하는 Fingerprinting 취약점 발생. 단일 Opcode Table 설계로 인해 키 하나가 탈취되면 모든 명령어가 노출되는 구조적 한계 존재.
Technical Solution
- GCC &&label 확장을 활용한 Computed-goto Dispatch Table 도입으로 정적 Jump Table 및 switch 문 제거
- 실행 시점에 Label 주소를 Random Key로 XOR 암호화하여 스토리지에 저장하고 런타임에 복원하는 동적 디스패치 설계
- 32개 Opcode를 4개의 독립적인 8-entry Subtable로 분할하고 각 테이블에 서로 다른 데이터 슬라이스 기반 FNV 키를 적용한 파편화 전략
- 함수 포인터 테이블 기반의 Staged Entry Point 설계로 선형 제어 흐름을 파괴한 Control Flow Flattening 구현
- 주기적인 NoiseDecrypt 호출을 통해 실제 IAT Hook 룩업과 무의미한 복호화 호출을 혼재시켜 Dynamic Trace 분석 방해
- EnumResourceTypesA 도입을 통한 리소스 클로닝 자동화 및 PE Loader의 Bound Validation 강화
실천 포인트
1. 정적 분석 방지를 위해 상수를 직접 사용하지 않고 런타임에 계산되는 Computed-goto 검토
2. 민감 데이터 테이블 설계 시 단일 키가 아닌 데이터 종속적인 다중 키 분할 저장 구조 적용
3. 분석가의 추적을 혼란스럽게 만드는 무의미한 더미 연산(Noise) 삽입 구간 설정