SBridge: 교차 도메인 제어 블록 매칭을 통한 소스-바이너리 함수 유사성 식별
요약
SBridge는 소스 코드와 바이너리 간의 함수 유사성을 식별하기 위해 제어 블록(Control block) 매칭 방식을 제안합니다. 함수 인라이닝이나 심볼 제거와 같은 격차를 극복하여 보안 취약점 탐지에 필수적인 코드 재사용 식별 성능을 크게 향상시켰습니다.
핵심 포인트
- 제어 블록 기반 매칭으로 함수 인라이닝 문제 해결
- 조건문 및 루프 단위의 기능적 특징 캡슐화
- 기존 방식 대비 높은 Recall@1(75.13%) 달성
- 보안 취약점 전파 탐지를 위한 정밀한 코드 식별
우리는 주어진 소스 코드 함수와 유사한 바이너리 내 함수를 식별하기 위한 정밀한 접근 방식인 SBridge를 제시합니다. 바이너리 내에서 재사용된 코드를 식별하는 것은 보안, 특히 전파된 취약점을 탐지하는 데 있어 매우 중요합니다. 바이너리 간 비교도 가능하지만, 소스 코드는 컴파일 없이 직접 수집하고 분석하기가 더 용이하기 때문에 소스 코드를 참조로 활용하는 것이 더 실용적입니다. 그러나 함수 인라이닝 (Function inlining)을 포함하여 소스 코드와 바이너리 표현 사이의 상당한 격차는 교차 도메인 함수 탐지에 어려움을 초래합니다. 기존 방식들은 주로 문자열 리터럴 (String literals)이나 전체 함수 간의 구조적 유사성에 의존하며, 상세한 코드 동작을 포착하지 못해 많은 오탐 (False alarms)을 생성합니다. SBridge는 핵심적인 혁신을 통해 이러한 한계를 해결합니다. 바로 제어 블록 (Control block) 기반의 함수 매칭으로, 이는 함수를 조건문 (Conditionals) 및 루프 (Loops)와 같은 의미 있는 단위로 분할함으로써 필수적인 기능적 특징을 캡슐화합니다. 제어 블록을 교차 도메인 표현으로 활용함으로써, SBridge는 소스 코드와 바이너리 코드 간의 함수 유사성을 정밀하게 측정할 수 있으며, 함수 인라이닝 (Function inlining) 및 심볼이 제거된 바이너리 (Stripped binaries)로 인해 발생하는 문제들을 효과적으로 극복합니다. 평가를 위해, 우리는 BinKit으로부터 3,904개의 실제 C/C++ 바이너리를 수집했습니다. 입력 소스 함수와 동일한 바이너리 함수를 식별하는 실험에서, 바이너리 함수의 약 40%가 인라이닝 (Inlined)되었음에도 불구하고, SBridge는 75.13%의 recall@1과 80.98%의 recall@5를 달성하여, 최대 43.31%의 recall@1과 50.2%의 recall@5를 기록한 기존 방식들을 능가했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기