← 기술 목록으로

함수 추상화 정확도 문제 분석·해결

코드 유사성 분석 도구의 함수 추상화 단계가 사실상 동일한 함수를 일관되게 식별하지 못하던 결함을, 원인 규명부터 내용 기반 해시 명명 로직 도입까지 해결

기간2023
소속래브라도랩스(LabradorLabs)
역할데이터 엔지니어 · 원인 분석·해결 주도
C++Java코드 유사성 분석구문 분석(Parser)정규식해시 함수

0작업자의 메모

겉으로는 코드 유사성 분석 정확도 문제처럼 보였지만 파고들어 보니 같은 함수가 매번 같은 이름을 얻지 못하는 식별자 문제가 컸습니다. 이런 버그는 결과만 보면 우연처럼 보여서 원인까지 가는 데 시간이 걸립니다.

다언어 테스트로 재현 조건을 좁히고 함수 내용 기반 해시로 바꾼 이유는, 분석 결과가 다시 실행해도 흔들리지 않게 만들기 위해서였습니다.

1배경

코드 레벨 보안 분석 도구는 소스 코드를 함수 단위로 추상화(정규화)한 뒤 함수 시그니처를 비교해 유사 코드와 취약점을 탐지합니다. 그런데 이 추상화 단계에서 변수명·타입만 다를 뿐 사실상 동일한 함수가 매번 다른 시그니처로 생성되는 문제가 있었습니다.

2접근

원본 소스C++ / Java 등 다언어 함수
구문 분석함수 구조 파싱
추상화변수명·타입 정규화
내용 해시 명명함수 내용 기반 고유·일관 함수명
유사성 비교일관된 시그니처로 매칭

여러 언어의 소스로 재현 테스트를 수행해 원인을 좁혔습니다. 결과적으로 두 가지 결함이 확인됐습니다.

핵심 해결책으로, 익명 함수가 매번 다른 이름으로 처리되는 문제에는 함수 내용 기반 해시값으로 고유하고 일관된 함수명을 부여하도록 명명 로직을 개발·적용했습니다. 같은 내용이면 항상 같은 이름이 나오므로 동일 함수가 일관되게 식별됩니다.

3결과

추상화 정확성·일관성 향상 — 변수명·타입만 다른 동일 함수를 일관된 시그니처로 식별
유사 코드 탐지 강화 — 내용 기반 해시 명명으로 동일 로직을 일관되게 매칭
취약점 분석 기반 강화 — 코드 레벨 취약점 분석의 정확도 향상

4역할

먼저 같은 함수에서 시그니처가 달라지는 조건을 재현하고 언어별 테스트 케이스를 늘렸습니다. 원인은 구문 분석기와 hash-gen 정규식에 나뉘어 있었고, JavaScript 익명 함수는 함수 내용으로 만든 해시를 이름으로 사용하도록 고쳤습니다.

코드 유사성·취약점 분석 파이프라인의 정밀도 개선 작업의 일부로 진행.