[논문 리뷰] Finding Semantically-Equivalent Binary Code By Synthesizing Adaptors
이 논문은 이식형 코드(글루 코드)를 합성하여 기능 인터페이스의 차이를 메우는 기법을 제안한다. 이는 기능 간의 의미적 동치성을 자동으로 탐지하는 데 사용되며, 실제 바이너리에서의 기능 대체 가능성을 효율적으로 확인한다. 구체적 실행과 바이너리 기반 기호 실행을 통해, 보안 강화, 성능 최적화, 복호화 등 실용적 응용이 가능하며, 리눅스 C 라이브러리의 13,000개 이상의 기능에 대해 대규모 평가를 수행하여, 이식형 동치 코드의 광범위한 존재를 확인하였다.
Independently developed codebases typically contain many segments of code that perform the same or closely related operations (semantic clones). Finding functionally equivalent segments enables applications like replacing a segment by a more efficient or more secure alternative. Such related segments often have different interfaces, so some glue code (an adaptor) is needed to replace one with the other. We present an algorithm that searches for replaceable code segments at the function level by attempting to synthesize an adaptor between them from some family of adaptors; it terminates if it finds no possible adaptor. We implement our technique using (1) concrete adaptor enumeration based on Intel's Pin framework and (2) binary symbolic execution, and explore the relation between size of adaptor search space and total search time. We present examples of applying adaptor synthesis for improving security and efficiency of binary functions, deobfuscating binary functions, and switching between binary implementations of RC4. For large-scale evaluation, we run adaptor synthesis on more than 13,000 function pairs from the Linux C library. Our results confirm that several instances of adaptably equivalent binary functions exist in real-world code, and suggest that these functions can be used to construct cleaner, less buggy, more efficient programs.
연구 동기 및 목표
- 인터페이스만 다를 뿐 의미적으로 동치인 바이너리 기능을 식별하여 최적화나 보안 강화를 위한 코드 대체를 가능하게 한다.
- 다른 인터페이스를 가진 기능을 대체하기 위해, 이들을 연결하는 이식형 코드를 자동으로 합성함으로써 도전 과제를 해결한다.
- 특히 리눅스 C 라이브러리와 같은 대규모 시스템에서, 이식형 코드 합성의 실현 가능성과 효율성을 평가한다.
- 바이너리 기능 동치성 탐지에서 이식형 코드 탐색 공간의 크기와 총 탐색 시간 간의 상관 관계를 탐색한다.
제안 방법
- 이 방법은 Intel의 Pin 프레임워크를 사용하여 바이너리 기능 간의 인터페이스 변환 가능성을 탐색하기 위해 구체적 이식형 코드 열거를 수행한다.
- 이식형 코드 합성 과정에서 제어 흐름 및 데이터 흐름 경로를 탐색하기 위해 바이너리 기반 기호 실행을 통합한다.
- 사전 정의된 이식형 코드 가족 내에서 탐색을 수행하며, 유효한 이식형 코드가 더 이상 발견되지 않을 경우 종료하여 탐색 공간 내에서 완전성을 확보한다.
- 정확한 글루 코드를 생성함으로써 기능적 동치성 검증과 실질적 코드 대체를 모두 지원한다.
- 인터페이스 불일치를 매개변수 및 반환 유형 변환으로 모델링하여, 이식형 코드 후보를 체계적으로 탐색할 수 있도록 한다.
- 해당 프레임워크는 리눅스 C 라이브러리에서 유래한 13,000개의 기능 쌍으로 구성된 대규모 코퍼스를 대상으로 평가되어 확장성과 효과성을 점검하였다.
실험 결과
연구 질문
- RQ1의미적으로 동치이지만 인터페이스가 다른 바이너리 기능 간의 차이를 메우기 위해 이식형 코드를 자동으로 합성할 수 있는가?
- RQ2이식형 코드 탐색 공간의 크기가 유효한 이식형 코드를 찾는 데 소요되는 총 시간에 어떤 영향을 미치는가?
- RQ3실제 코드베이스, 특히 리눅스 C 라이브러리에서 이식형 동치 바이너리 기능의 존재 빈도는 어느 정도인가?
- RQ4이식형 코드 합성은 바이너리 보안, 성능 향상 및 복호화에 어느 정도 기여할 수 있는가?
- RQ5구체적 실행과 바이너리 기반 기호 실행의 조합은 기능 수준의 의미적 클론을 탐지하는 데 얼마나 효과적인가?
주요 결과
- 리눅스 C 라이브러리의 13,000개 이상의 기능 쌍을 분석한 결과, 실세계 코드에서 이식형 동치 바이너리 기능의 여러 사례가 존재하는 것으로 확인되었다.
- 이 방법은 다수의 기능 쌍에 대해 이식형 코드를 성공적으로 합성하여, 성능이 열 劣하거나 보안상 취약한 구현체를 더 나은 대안으로 대체하는 데 기여하였다.
- 이식형 코드 탐색 공간의 크기가 탐색 시간과 강하게 상관관계를 가지며, 이는 확장성 확보를 위해 탐색 공간 축소가 필수적임을 시사한다.
- 이식형 코드 합성은 바이너리 보안 및 성능 향상에 실질적인 개선을 이끌었으며, 오염된 기능의 복호화에도 기여하였다.
- RC4의 다양한 바이너리 구현 간 전환 가능성에 대해 이 기법이 실현 가능함을 입증하여, 실제 바이너리 변환 응용에서의 유용성을 확인하였다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.