Skip to main content
QUICK REVIEW

[논문 리뷰] Datalog Disassembly

Antonio Flores-Montoya, Eric Schulte|arXiv (Cornell University)|2019. 06. 07.
Software Engineering Research인용 수 4
한 줄 요약

이 논문은 소스 코드가 제공되지 않은 경우에도 정확한 디어셈블링을 가능하게 하는 Ddisasm을 제안한다. Ddisasm은 Datalog 기반의 신규 프레임워크로, 정적 분석과 히우리스틱을 융합하여 스타핑된 x64 바이너리에서 재조립 가능한, 기호적으로 정확한 어셈블리어를 생성한다. 지시어 경계 식별과 기호 참조 해석에 Datalog의 선언적 추론을 활용함으로써, Ramblr와 같은 최신 기술 대비 더 높은 정확도와 속도를 달성하였다. 이는 다양한 컴파일러와 최적화 수준에서 테스트된 7,658개 바이너리에서 입증되었다.

ABSTRACT

Disassembly is fundamental to binary analysis and rewriting. We present a novel disassembly technique that takes a stripped binary and produces reassembleable assembly code. The resulting assembly code has accurate symbolic information, providing cross-references for analysis and to enable adjustment of code and data pointers to accommodate rewriting. Our technique features multiple static analyses and heuristics in a combined Datalog implementation. We argue that Datalog's inference process is particularly well suited for disassembly and the required analyses. Our implementation and experiments support this claim. We have implemented our approach into an open-source tool called Ddisasm. In extensive experiments in which we rewrite thousands of x64 binaries we find Ddisasm is both faster and more accurate than the current state-of-the-art binary reassembling tool, Ramblr.

연구 동기 및 목표

  • 소스 코드가 제공되지 않은 경우, 특히 바이너리 리라이팅 및 분석을 위한 디어셈블링의 정확성을 해결하기 위한 것이다.
  • 코드와 데이터를 구분하고 기호 참조를 해소하는 데 있어 근본적인 모호성 문제를 정적 분석과 히우리스틱의 통합을 통해 극복하기 위한 것이다.
  • 확장 가능하고 고정확도를 갖춘 디어셈블러를 개발하여 재조립 가능한 출력을 생성함으로써 바이너리 하드닝, 리팩터링, 인스트루멘테이션에 적합한 결과를 도출하기 위한 것이다.
  • Datalog의 선언적이고 규칙 기반의 추론이 여러 디어셈블링 분석을 효율적이고 정확하게 통합하는 데 유일하게 적합하다는 것을 입증하기 위한 것이다.

제안 방법

  • 다양한 분석에서 유도된 가중치가 부여된 증거를 기반으로 지시어 경계와 기호적 대상인지 여부를 결정하는 의사결정 문제로 디어셈블링을 모델링한다.
  • 모든 디어셈블링 로직을 단일 Datalog 프로그램에 구현함으로써 논리적 종속성이 실행 순서를 결정하고 분석의 모듈식 조합을 가능하게 한다.
  • 정적 분석을 수행하여 정의-사용 체인, 새로운 레지스터 값 분석, 데이터 액세스 패턴 분석을 수행함으로써 기호 해석에 필요한 증거를 수집한다.
  • 각 분석 및 히우리스틱에서 유도된 증거에 가중치를 할당하고, Datalog 규칙을 통해 이를 집계하여 각 해석에 대한 신뢰도 점수를 계산한다.
  • 고성능 Datalog 엔진인 Souffle을 사용하여 Datalog 프로그램을 최적화된 C++ 코드로 컴파일하여 효율적인 실행을 구현한다.
  • 기능적 정확성을 보장하기 위해 의미 보존적 수정(예: NOP 삽입), 재조립, 회귀 테스트를 통해 결과를 검증한다.

실험 결과

연구 질문

  • RQ1통합된 Datalog 기반 프레임워크는 다양한 정적 분석과 히우리스틱을 효과적으로 융합하여 스타핑된 바이너리의 디어셈블링 정확도를 향상시킬 수 있는가?
  • RQ2Datalog의 선언적 성격은 의사결정 기반의 구현 대비 디어셈블링 컴포onent의 통합을 더 스케일러블하고 유지보수 가능하게 만드는가?
  • RQ3복잡한 실세계 바이너리 처리 시, Datalog의 추론 엔진은 기존 디어셈블러 대비 속도와 정확도 측면에서 뛰어나게 성능을 발휘할 수 있는가?
  • RQ4다양한 컴파일러와 최적화 수준에서 기호 참조를 해소하고 재조립 정확성을 유지하는 데 시스템의 성능은 어느 정도인가?

주요 결과

  • 7개의 컴파일러와 5~6개의 최적화 플래그를 사용해 컴파일된 7,658개의 x64 바이너리에서 Ddisasm은 Ramblr를 속도와 정확도 모두에서 뛰어넘었다.
  • Coreutils 벤치마크 세트에서 Ddisasm은 모든 컴파일러와 최적화 수준에서 0개의 잘못된 양성과 0개의 잘못된 음성 결과를 기록했으며, ICC를 제외한 모든 경우에서 성능이 뛰어났다. ICC에서는 여전히 Ramblr를 크게 앞서는 성능을 보였다.
  • 실제 응용 프로그램 테스트에서 Ddisasm은 모든 컴파일러에서 0개의 손상된 바이너리와 0개의 잘못된 양성을 기록했으며, ICC의 -O3 및 -Ofast 모드에서 각각 10개의 잘못된 양성과 1개의 잘못된 음성 결과가 발생했다.
  • CGC 벤치마크 세트에서 Ddisasm은 모든 컴파일러와 최적화 수준에서 0개의 잘못된 양성과 0개의 잘못된 음성 결과를 기록했고, Ramblr는 ICC에서 최대 106개의 손상된 바이너리가 발생했다.
  • ICC로 컴iles된 가장 도전적인 바이너리에서도 Ddisasm은 뛰어난 성능을 보였으며, Ramblr는 16,000개 이상의 잘못된 양성 결과로 치명적인 실패를 겪었다.
  • Datalog의 사용 덕분에 복잡한 디어셈블링 로직을 깔끔하고 모듈화되며 유지보수 가능한 방식으로 구현할 수 있었으며, 실행 순서는 완전히 데이터 종속성에 의해 결정되었다.

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

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

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

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