Skip to main content
QUICK REVIEW

[논문 리뷰] BinPro: A Tool for Binary Source Code Provenance

Dhaval Miyani, Zhen Huang|arXiv (Cornell University)|2017. 11. 02.
Software Engineering Research참고 문헌 23인용 수 16
한 줄 요약

BinPro는 기계학습과 정적 분석을 활용하여 소스코드에서 유도된 바이너리 여부를 정확하게 판단할 수 있는 새로운 도구이다. 다양한 컴파일러와 최적화 수준에서도 일관되게 기능하며, 매칭되는 바이너리와 소스코드 간 평균 유사도 81%를 달성했고, 평균 함수 매칭률은 79%이다.

ABSTRACT

Enforcing open source licenses such as the GNU General Public License (GPL), analyzing a binary for possible vulnerabilities, and code maintenance are all situations where it is useful to be able to determine the source code provenance of a binary. While previous work has either focused on computing binary-to-binary similarity or source-to-source similarity, BinPro is the first work we are aware of to tackle the problem of source-to-binary similarity. BinPro can match binaries with their source code even without knowing which compiler was used to produce the binary, or what optimization level was used with the compiler. To do this, BinPro utilizes machine learning to compute optimal code features for determining binary-to-source similarity and a static analysis pipeline to extract and compute similarity based on those features. Our experiments show that on average BinPro computes a similarity of 81% for matching binaries and source code of the same applications, and an average similarity of 25% for binaries and source code of similar but different applications. This shows that BinPro's similarity score is useful for determining if a binary was derived from a particular source code.

연구 동기 및 목표

  • 컴파일러 최적화가 포함된 경우에도 바이너리의 소스코드 기원을 규명하는 데 도전하는 데 목적이 있다.
  • 컴파일러나 최적화 수준을 알지 못하더라도 특정 소스코드에서 컴iles된 바이너리인지 신뢰성 있게 확인할 수 있도록 하는 것.
  • 다양한 컴파일러와 최적화 설정에서도 강건한 방법을 개발하여 실제 환경에서의 실용성을 확보하는 것.
  • 컴파일러 내부를 분석하지 않고도 함수 인라인과 같은 컴파일러 최적화를 예측할 수 있는 시스템을 구축하는 것.
  • 라이선스 준수, 취약점 분석, 소프트웨어 유지보수를 위해 바이너리와 소스코드 기원을 연결하는 확장성 있고 정확한 도구를 제공하는 것.

제안 방법

  • BinPro는 서로 다른 응용프로그램에서 컴파일된 바이너리에 기반해 훈련된 기계학습 모델을 사용하여, 특히 함수 인라인과 같은 컴파일러 최적화가 발생할 가능성을 예측한다.
  • 정적 분석을 적용하여 소스 및 바이너리 코드에서 함수 호출 그래프(FCG), 제어 흐름 구조, 데이터 흐름 패턴과 같은 코드 특징을 추출한다.
  • 계산된 유사도 점수를 기반으로 추출된 특징을 바탕으로 소스 및 바이너리 코드 간의 함수를 이분할 매칭 알고리즘으로 정렬한다.
  • 매칭 과정은 반복적으로 이루어지며, 호출자와 피호출자를 고려하여 함수 매칭 정확도를 다중 라운드에 걸쳐 향상시킨다.
  • 바이너리와 소스코드 간의 유사도 점수를 계산하며, 높은 점수는 유도 관계가 강할 가능성을 시사한다.
  • 함수 인라인 예측기는 GCC로 컴파일된 바이너리에서 훈련하고, 다른 컴파일러(예: ICC)에서 평가하여 컴파일러 간 일반화 능력을 입증한다.

실험 결과

연구 질문

  • RQ1한 컴파일러에서 훈련된 기계학습 모델이 다른 컴파일러에서 함수 인라인 행동을 정확하게 예측할 수 있는가?
  • RQ2컴파일러나 최적화 수준을 알지 못하더라도 소스-바이너리 유사도를 효과적으로 계산할 수 있는가?
  • RQ3BinPro의 유사도 점수가 다양한 컴iles 설정에서 매칭 및 비매칭 바이너리-소스 쌍을 어떻게 구분하는가?
  • RQ4호출 그래프 컨텍스트를 고려한 반복적 함수 매칭이 매칭 정확도에 얼마나 기여하는가?
  • RQ5대규모 소프트웨어 시스템에서 BinPro의 실행 시간과 메모리 사용량 측면에서의 확장성은 어느 정도인가?

주요 결과

  • BinPro는 매칭되는 바이너리와 소스코드 쌍 간 평균 유사도 점수 81%를 기록했으며, 최소 59%, 최대 96%였다.
  • 비매칭 쌍의 경우 평균 유사도 점수는 25%였고, 최대 43%였으며, 이는 매칭과 비매칭 사례 간 명확한 분리가 있음을 시사한다.
  • 모든 비매칭 쌍 중 가장 높은 유사도 점수(43%)는 어떤 매칭 쌍의 최저 유사도 점수(59%)보다 낮아, 테스트 코퍼스에서 가짜 양성 결과가 전혀 발생하지 않았다.
  • BinPro는 컴파일러나 최적화 수준에 관계없이 평균 79%의 비율로 올바른 함수를 매칭한다.
  • 함수 인라인 예측기는 다양한 컴파일러에서 평가했을 때 73%의 정확도를 기록했고, 비인라인 함수에 대해 17%의 가짜 양성률을 보였다.
  • 실행 시간은 코드 크기보다 함수 수에 비례하여 증가하며, BIND(4,764개 함수)와 같은 대규모 시스템에서는 최대 294분이 소요되었는데, 주로 FCG 로딩 오버헤드 때문이었다.

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

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

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

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