3P by xguru | ★ favorite | 댓글과 토론
  • 시스템콜(syscall) 수준 에서 동작하는 고성능 윈도우/리눅스 유저스페이스 에뮬레이터로, 포괄적인 후킹을 통해 프로세스 실행 전반을 제어
  • 보안 연구, 멀웨어 분석, DRM 연구 등 프로세스 실행에 대한 세밀한 제어가 필요한 작업에 적합
  • Windows API를 재구현하지 않고 syscall 레벨에서 동작해 기존 시스템 DLL을 그대로 활용 가능
  • C++ 로 작성되었으며 원하는 백엔드로 구동 가능: Unicorn Engine, icicle-emu, Hyper-V(WHP)
  • 고급 메모리 관리: Unicorn의 메모리 관리 위에 구축되어 reserved·committed 등 Windows 고유 메모리 타입 지원
  • 완전한 PE 로딩 지원: 실행 파일 및 DLL 로딩 처리, 적절한 메모리 매핑, 재배치(relocations), TLS 지원
  • 예외 처리: Windows 구조적 예외 처리(SEH) 구현, 예외 디스패처 및 언와인딩 지원
  • 쓰레딩 지원: 라운드 로빈(round-robin) 방식의 스케줄링 스레딩 모델 제공
  • State 관리: 전체 상태 직렬화와 빠른 인메모리 스냅샷 모두 지원
  • 디버깅 인터페이스: GDB 시리얼 프로토콜 구현으로 IDA Pro, GDB, LLDB, VS Code 등과 연동 가능
  • 멀웨어 분석 시에 호스트 격리가 완벽하지 않을 수 있어, 브라우저 샌드박스 기반 웹 버전 사용 을 권장
  • Python 으로 자동화 가능
    • pip install sogen 으로 설치
    • 에뮬레이터 실행, 콜백 등록, WinAPI 콜 인터셉트를 파이썬 안에서 바로 처리 가능

발표 자료 슬라이드 참고: Fake It ‘til We Make It: The Art of Windows User Space Emulation

  • Windows User Space Emulation이란?
    • 프로세스를 에뮬레이터 안에서 실행하고, 그 아래의 OS와 커널을 시뮬레이션하는 기법
    • 일반적인 에뮬레이션이 코드를 가상 CPU에서 돌리고 하드웨어를 시뮬레이션하는 것이라면, 유저스페이스 에뮬레이션은 그 위에서 OS·커널 계층까지 흉내내는 방식
    • 이게 주는 핵심 가치는 실행되는 코드에 대한 완전한 제어 — 에뮬레이터가 모든 실행 단계에 개입할 수 있음
    • 제어는 후킹 포인트(hooking points) 를 통해 이뤄짐
      • 메모리 접근 후킹 — read, write, execute 단위로 가로채기
      • 명령어 실행 후킹 — syscall, cpuid, rdtsc 같은 특정 명령어 실행 시점 포착
      • 새 코드 경로(new code path) 실행 후킹 — 처음 실행되는 코드 경로 감지
    • 이 후킹 능력 덕분에 외부 통신 가로채기, 실행 흐름 추적, 코드 커버리지 측정 등이 가능해, DRM 분석·멀웨어 분석·취약점 분석·보안 연구의 기반이 됨
  • 발표자는 DRM 개발자로 Steam CEG, Arxan, Denuvo 등 다수 DRM을 리버싱 및 우회한 경력이 있음
  • 윈도우용 게임들이 많이 쓰는 Denuvo DRM 분석에 에뮬레이션이 핵심 수단이었음
    • 현대 DRM은 난독화/안티 탬퍼링/안티 디버깅으로 정적 및 동적 분석이 종종 불가능하기 때문
  • 에뮬레이터를 취약점 분석(퍼징) 에 활용: 에뮬레이터 내부ㅠ에서 입력을 무작위화하고, 후킹으로 코드 커버리지 피드백을 받으며, 실행이 예측 가능하고 반복도 가능
  • 기존 솔루션의 한계가 개발 동기
    • Qiling·Speakeasy·Dumpulator는 Python이라 후킹이 많은 DRM 분석에서 극도로 느림
    • Binee·Unicorn PE는 API 레벨 재구현이라 불완전하고 버그 발생 가능
  • syscall 규모: ntdll.dll 일반 syscall 409개, win32u.dll UI syscall 1474개
  • 빠른 에뮬레이션 속도는 JIT 덕분

댓글과 토론