Skip to main content
QUICK REVIEW

[논문 리뷰] GTIRB: Intermediate Representation for Binaries

Eric Schulte, Jonathan Dorn|arXiv (Cornell University)|2019. 07. 02.
Parallel Computing and Optimization Techniques참고 문헌 11인용 수 6
한 줄 요약

GTIRB는 기계어 바이트를 저장하고 코드 블록, 제어 흐름 그래프, 보조 데이터 기반의 최소화되고 확장 가능한 모델을 사용함으로써 바이너리 구조와 의미를 분리하는 언어에 종속되지 않은 오픈소스 중간 표현(IR)입니다. 이는 지침 의미를 추상화하고 여러 프로그래밍 언어를 지원하기 위해 Protobuf 직렬화를 사용함으로써 도구 간 상호운용성을 제공하며, LLVM이 컴파일러 연구에 미친 영향과 유사하게 모듈화되고 재사용 가능한 바이너리 분석 툴체인의 발전을 촉진합니다.

ABSTRACT

GTIRB is an intermediate representation for binary analysis and rewriting tools including disassemblers, lifters, analyzers, rewriters, and pretty-printers. GTIRB is designed to enable communication between tools in a format that provides the basic information necessary for analysis and rewriting while making no further assumptions about domain (e.g., malware vs. cleanware, or PE vs. ELF) or semantic interpretation (functional vs. operational semantics). This design supports the goals of (1) encouraging tool modularization and re-use allowing researchers and developers to focus on a single aspect of binary analysis and rewriting without committing to any single tool chain and (2) facilitating communication and comparison between tools.

연구 동기 및 목표

  • 지침 의미와 바이너리 포맷에 종속되지 않는 공통 중간 표현(IR)을 설계하여 다양한 바이너리 분석 및 리라이팅 도구 간의 상호운용성 문제를 해결한다.
  • 분석, 리프팅, 리라이팅 컴пон트를 분리함으로써 모듈화된 도구 개발을 가능하게 하여 연구자가 단일 프레임워크에 종속되지 않고 개별 요소에 집중할 수 있도록 한다.
  • 원시 바이트를 유지하고 외부 함수 및 코드 섹션 간의 제어 흐름 표현을 가능하게 하여 재조립과 리라이팅을 지원한다.
  • Protobuf를 사용한 표준화되고 확장 가능하며 직렬화된 형식을 제공함으로써 도구 간 비교 및 통합을 촉진한다.
  • 고품질의 오픈소스 디어셈블러(Ddisasm)와 잘 문서화된 IR 설계를 제공함으로써 바이너리 분석 연구의 진입 장벽을 낮춘다.

제안 방법

  • GTIRB는 ByteIntervals, CodeBlocks, DataBlocks에 기반한 최소한의 구조적 모델을 사용하여 바이너리를 표현하며, 여기서 CodeBlocks는 실행 가능한 코드로 해석되는 바이트 범위를 정의한다.
  • 제어 흐름은 레이블이 부여된 간선을 사용한 상호함수 제어 흐름 그래프(ICFG)로 모델링되며, 조건부/비조건부, 직접/간접, 제어 흐름 유형(예: 호출, 반환, 시스템 호출)을 표현한다.
  • 원시 기계어 바이트는 의미 해석 없이 그대로 IR에 저장되어 외부 디어셈블러와 재조립기에서 독립적이고 정확하게 처리할 수 있도록 한다.
  • ProxyBlocks는 IR 경계를 넘는 외부 함수나 호출을 표현하기 위해 사용되며, 전체 코드 커버리지가 필요 없이도 상호 IR 제어 흐름 표현이 가능하다.
  • 명시적인 패딩이나 NOP 대신 정렬 지시어를 사용함으로써 표현의 비효율성과 복잡성을 줄이고 의미 없는 가정 없이 코드 구조를 유지한다.
  • AuxData 테이블은 함수 이름, 진입점, 분석 결과와 같은 추가 메타데이터를 저장하여 핵심 IR을 수정하지 않고도 점진적이고 확장 가능한 분석을 가능하게 한다.

실험 결과

연구 질문

  • RQ1어떻게 공통 중간 표현을 설계하여 다양한 바이너리 분석 및 리라이팅 도구 간의 상호운용성을 달성할 수 있을까? 이때 지침 의미나 바이너리 포맷에 종속되지 않도록 해야 한다.
  • RQ2어떤 구조적 추상화가 정적 분석과 코드 리라이팅을 모두 지원하면서도 확장 가능하고 이식 가능하게 바이너리 프로그램을 표현하는 데에 충분한가?
  • RQ3어떻게 원시 기계어를 IR에 유지하고 노출시켜 외부 디어셈블러와 재조립기가 독립적이고 정확하게 작동할 수 있도록 할 수 있을까?
  • RQ4최소화되고 언어에 종속되지 않은 IR 설계가 어떻게 복잡한 바이너리 분석 워크플로우, 특히 상호함수 분석과 재조립을 지원할 수 있을까?
  • RQ5표준화되고 오픈소스인 IR에 고품질의 프론트엔드 디어셈블러(Ddisasm)를 제공함으로써, 컴파일러 연구 분야에서 LLVM이 미친 영향과 유사하게 모듈화되고 재사용 가능한 바이너리 분석 도구 생태계를 조성할 수 있을까?

주요 결과

  • GTIRB는 지침 의미를 추상화하고 코드 블록 및 제어 흐름 그래프 기반의 최소화되고 확장 가능한 핵심 구조를 제공함으로써 다양한 바이너리 분석 도구 간의 소통을 성공적으로 실현한다.
  • 의미 표현이 아닌 원시 기계어 바이트를 사용함으로써 더 큰 유연성을 확보하고 의미적 약속을 피함으로써 여러 디어셈블러와 재조립기를 지원한다.
  • Protobuf 기반의 직렬화 덕분에 다양한 프로그래밍 언어로 작성된 도구들 간에 효율적이고 언어에 종속되지 않는 상호운용성이 가능해졌으며, 다양한 분석 프레임워크와의 통합도 가능하다.
  • ProxyBlocks와 정렬 지시어의 포함은 불필요한 복잡성이나 비효율성을 도입하지 않으면서도 상호함수 제어 흐름과 바이너리 레이아웃을 정확하게 모델링할 수 있도록 한다.
  • GTIRB를 위한 고품질 디어셈블러 프론트엔드인 Ddisasm은 Anger의 Ramblr보다 더 빠르고 정확한 디어셈블링을 보여주며, IR 설계의 실용적 타당성을 입증한다.
  • GTIRB와 Ddisasm의 오픈소스화는 LLVM의 컴파일러 연구 분야에서의 성공과 유사하게 모듈화되고 재사용 가능한 바이너리 분석 도구 생태계 조성 잠재력을 지닌다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.