준비 단계에서는, 취약한 프로그램과 패치된 프로그램을 비교하여 패치의 시그니처(특징)를 추출하는 기본 블록 매핑 알고리즘을 설계하였습니다. 이 시그니처는 기본 블록 트레이스 집합으로 표현됩니다. 탐지 단계에서는, 패치 시맨틱(의미론)을 적용하여 관련 없는 기본 블록 트레이스를 줄이고, 시그니처 탐색 속도를 높입니다. 또한, 트레이스 유사도(traces similarity)를 설계하여 대상 프로그램이 패치되었는지 여부를 식별합니다.
실험에서는 12개의 실제 소프트웨어 프로젝트에서 479개의 CVE를 수집해 평가를 진행했습니다. BINXRAY는 93.31%의 정확도를 달성했고, 함수당 분석 시간은 296.17ms로 기존 최신 연구들보다 뛰어난 성능을 보였습니다.
취약점 탐지 능력을 높이기 위해, 많은 연구들이 바이너리 수준 코드 매칭 정확도를 높이기 위한 방법을 제안해왔습니다. 예를 들어, DiscovRE와 CACompare는 바이너리 명령어를 통합 중간 표현으로 변환하여 아키텍처를 넘나드는 함수 매칭을 달성합니다. BLEX는 프로그램 실행을 통해 의미론적 특징을 추출하여 매칭 정확도를 높입니다. BinGo와 BinGo-E는 구문, 구조, 의미 정보를 결합해 더 정확한 매칭 결과를 도출합니다.
하지만 현재 함수 매칭 솔루션들은 "취약점"과 "패치된 함수"의 구분이 어렵습니다. 왜냐하면 패치는 보통 미세한 코드 변경만으로 취약점을 수정하기 때문입니다. 그 결과, 패치된 함수도 취약한 함수로 오인되어 오탐률이 높아집니다. 따라서, 실제로 취약한 함수를 찾기 위해 보안 전문가가 수작업으로 분석해야 하며, 이는 매우 시간이 많이 소요됩니다.
이 문제를 해결하는 것은 쉽지 않습니다. 한편으로는, 함수 업그레이드나 컴파일러 최적화 등 취약점과 무관한 작은 코드 변경이 있어도 취약한 함수를 식별할 수 있을 만큼 접근법이 관대해야 합니다. 다른 한편으로는, 이미 패치된 함수는 걸러낼 수 있을 만큼 정밀해야 합니다.
기존 연구(Zhang and Qian)는 함수가 패치되었는지 여부를 판단하는 알고리즘을 제안했습니다. 이들은 소스코드에서 구문 및 의미 변화를 추출하고, "소스코드-바이너리" 매칭 모델을 구축합니다. 하지만 이는 소스코드가 필요하므로, 소스코드가 없는 경우에는 적용할 수 없습니다.
현재까지, 패치 식별이 가능한 바이너리 수준 취약점 매칭을 위한 효과적이고 효율적인 방법은 부족한 상황입니다. 실무에 적용 가능한 접근법은 다음 세 가지 특성을 가져야 합니다.
P1. 대상 함수에서 패치를 정확하게 식별할 수 있어야 한다.
P2. 대규모 실제 프로그램에도 확장 가능해야 한다.
P3. 소스코드 정보 없이, 폐쇄형 바이너리 프로그램에도 적용 가능해야 한다.
이 세 가지 특성을 충족하기 위해, 우리는 Binary X-Ray(BINXRAY)라는 패치 기반 취약점 매칭 접근법을 제안합니다. 이 방법은 바이너리 내에서 패치된 함수와 취약한 함수를 정확하게 구분할 수 있습니다. 최신 함수 매칭 도구(BinGo-E) 대비 오탐률을 30% 이상 줄이면서, 시간 소요도 더 적습니다. 또한, 소스코드 없이도 패치 식별 도구(FIBER)보다 더 높은 정확도를 보입니다.

3.2.1 Basic Block Mapping (기본 블록 매핑)

3.2.2 Valid Trace Generation (유효 트레이스 VT 생성)
예시 (HeartBleed):

VF(OpenSSL 1.0.1f):
트레이스: A→B, A→C→D→E 등 8개.
PF(OpenSSL 1.0.1g):
트레이스: A’→B’, A’→C’→D’→M’→U’ 등 14개.
3.3.1 Trace Generation (트레이스 생성)
입력: TF(대상 함수), VF 시그니처(T₁), PF 시그니처(T₂).
과정:
1. TF ↔ VF 매핑: CBB 추출 → BBB와 결합하여 트레이스 집합(T₃, T₄)생성.
2. TF ↔ PF 매핑: 동일한 방법으로 트레이스 집합(T₅, T₆)생성.
3.3.2 Trace Reduction (트레이스 축소)
목적: 관련 없는 트레이스 제거 → 노이즈 감소.
방법:
T₄에서 T₁과 공통 CBB가 없는 트레이스 제거 → T₄¹ 생성.
T₆에서 T₂와 공통 CBB가 없는 트레이스 제거 → T₆² 생성.
3.3.3 Similarity Comparison (유사도 비교)
트레이스 유사도 계산:
두 트레이스(t₁, t₂)의 Levenshtein 거리 기반 유사도 점수:

전체 트레이스 집합 유사도: 각 트레이스 쌍의 가중 평균.
3.3.4 Decision Algorithm (결정 알고리즘)
판정 기준:
TF가 VF(T₁)와 더 유사 → 취약 함수.
PF(T₂)와 더 유사 → 패치된 함수.

주요 사례:
CVE-2014-0160 (HeartBleed): BinXray가 패치된 함수를 100% 정확도로 식별.
CVE-2015-1790 (OpenSSL): 노이즈 변경(Area 1)을 무시하고 실제 패치(Area 2)만 탐지[그림 5].
4.3.1 기존 연구와의 차별점
결론
BinXray는 낮은 오탐률과 소스코드 독립성으로 기존 도구 대비 실용성 우수.
향후 컴파일러 최적화 내성 강화 및 대규모 분석 최적화가 필요.
우리는 실제 12개의 소프트웨어 프로젝트와 479개의 CVE를 대상으로 실험을 수행하였고,
BINXRAY가 기존 최신 연구들보다 더 높은 정확도(93.31%)와 빠른 분석 속도(함수당 296.17ms)를 달성함을 보였다.
BINXRAY의 주요 기여는 다음과 같다.
새로운 기본 블록 매핑 알고리즘을 통해 패치 시그니처를 정확하게 추출할 수 있다.
패치된 함수와 취약한 함수를 효과적으로 구분하여, 오탐률(false positive rate)을 크게 줄였다.
소스코드 없이도 동작하며, 실제 대규모 바이너리 프로그램에도 적용 가능하다.
향후 연구로는, 더욱 다양한 컴파일러 최적화 환경이나, 난독화(obfuscation)된 바이너리 환경에서도 BINXRAY의 성능을 개선하는 방향을 제시한다.
팀 프로젝트 연관성
1. 차별화 포인트
통합 워크플로우: 함수 선별 → Diffing → 디컴파일을 단일 툴 체인으로 통합 (기존 연구는 단계별 도구 분리).
LLM 활용: BinXray의 트레이스 유사도 계산을 LLM 기반 시맨틱 분석으로 확장 가능[검색결과 6].
실시간 분석: 대용량 바이너리 처리 시 병렬화 기법 도입.
이 내용을 바탕으로 팀원들에게 방법론의 기술적 혁신성과 실험 결과의 실용성을 강조하며 발표할 계획입니다. 특히, BinXray가 기존 도구보다 오탐률을 크게 낮춘 점과 소스코드 없이 동작하는 장점을 부각시킬 예정입니다.
최근 소프트웨어의 보안 취약점이 공개되고 패치가 배포되더라도, 실제로 많은 시스템은 즉시 패치를 적용하지 않아 1-day 취약점이 남아있게 됩니다. 이런 1-day 취약점은 공격자에게 실질적인 위협이 되며, 신속한 탐지가 매우 중요합니다.
하지만 기존의 바이너리 취약점 탐지 방법은 오탐률이 높거나, 소스코드에 의존하는 한계가 있어 실무 적용에 어려움이 많았습니다.
이 논문은 패치 기반 바이너리 분석을 통해, 소스코드 없이도 빠르고 정확하게 미패치 취약점을 탐지하는 방법을 제안한다는 점에서 주목할 만합니다.
기존의 대표적인 바이너리 함수 매칭 도구인 BinGo-E는 전체 함수의 유사도만을 비교하기 때문에, 패치 전후 함수가 매우 유사할 때 오탐률이 30% 이상으로 높게 나타나는 문제가 있었습니다.
또 다른 도구인 FIBER는 패치 식별 정확도는 높지만, 소스코드가 반드시 필요하다는 한계가 있어, 실제로 소스코드가 없는 상용 소프트웨어나 폐쇄형 바이너리에는 적용이 불가능했습니다.
BinXray는 크게 세 단계로 동작합니다.
첫째, 대상 함수 매칭:
취약점이 있는 함수(VF)와 패치된 함수(PF)의 시그니처를 만들어, 분석 대상 바이너리에서 유사한 함수 후보를 빠르게 선별합니다.
이때 구문 정보(명령어, 함수 호출)와 구조 정보(기본 블록 수, 제어 흐름 그래프)를 모두 활용합니다.
둘째, 패치 시그니처 생성:
패치 전후 함수의 기본 블록을 정규화한 뒤, 해시 기반으로 그룹화하고,
인접 블록의 명령어 시퀀스 편집 거리까지 고려해 탐욕적 알고리즘으로 매핑합니다.
이 과정을 통해 패치로 인해 실제로 변경된 블록(CBB)만을 정확히 추출하고,
이 변경 블록과 경계 블록(BBB)으로 구성된 유효 트레이스(Valid Trace) 집합을 패치 시그니처로 만듭니다.
셋째, 패치 적용 여부 판정:
대상 바이너리에서 추출한 함수의 트레이스와 패치 시그니처를 비교해,
패치가 적용되지 않은 취약 함수인지, 패치된 함수인지를 자동으로 판별합니다.
이때 Levenshtein 거리 기반 유사도 계산을 사용합니다.
BinXray는 Linux Kernel, OpenSSL 등 12개 오픈소스 프로젝트에서
총 479개의 실제 CVE를 대상으로 평가되었습니다.
정확도는 93.31%로, 기존 BinGo-E(85.2%)와 FIBER(89.7%)보다 높았습니다.
함수당 분석 시간도 296ms로 BinGo-E(1,200ms)보다 훨씬 빨랐습니다.
대표적인 HeartBleed(CVE-2014-0160) 취약점의 경우, 패치된 함수를 100% 정확도로 식별했습니다.
또, 불필요한 코드 변경(노이즈)은 무시하고, 실제로 취약점이 수정된 부분만을 정확히 탐지하는 것이 실험적으로 입증되었습니다.
BinXray는 패치 기반 시그니처 분석을 통해 소스코드가 없는 환경에서도 효율적이고 정확한 1-day 취약점 탐지가 가능함을 보여줍니다.
우리 팀이 진행하는 1-day 취약점 자동 분석 도구 개발에 있어, BinXray의 패치 시그니처 추출 및 비교 방법은 함수 diffing, 자동 패턴화, 웹 기반 시각화 등 다양한 모듈에 바로 적용할 수 있습니다.
특히, 소스코드 없이 바이너리만으로 신속하게 취약점 존재 여부를 판별하는 과정은
실제 보안 실무에서도 매우 유용할 것입니다.
토론거리로는 LLM 등 최신 인공지능 기술을 결합해
패치 시그니처의 의미론적 분석을 자동화할 수 있을지,
그리고 우리 도구만의 차별화된 사용자 경험(UX)을 어떻게 설계할지
함께 고민해보고 싶습니다.