작업 완료 · 2023
함수 추상화 정확도 문제 분석·해결
타입·형변환·익명 함수 규칙을 고쳐 같은 로직에 일관된 함수 시그니처를 부여했습니다.
기간2023
소속래브라도랩스(LabradorLabs)
역할데이터 엔지니어 · 원인 분석·해결 주도
코드 분석해시정규식
작업 요약
기존 누락 Java 함수 표본 100건 중 100건 식별
같은 함수에서 서로 다른 시그니처가 나왔습니다
코드 유사성 분석에서 같은 함수가 서로 다른 함수로 식별됐습니다. 재현 테스트로 확인하니 함수명과 시그니처를 만드는 규칙에 문제가 있었습니다.
다언어 테스트로 재현 조건을 좁히고 함수 내용 기반 해시로 바꾼 이유는, 다시 실행해도 같은 함수가 같은 시그니처를 갖도록 하기 위해서였습니다.
배경
코드 레벨 보안 분석 도구는 소스 코드를 함수 단위로 추상화(정규화)한 뒤 함수 시그니처를 비교해 유사 코드와 취약점을 탐지합니다. 그런데 이 추상화 단계에서 변수명·타입만 다를 뿐 사실상 동일한 함수가 매번 다른 시그니처로 생성되는 문제가 있었습니다.
- 같은 로직의 함수가 서로 다르게 추상화되면서 코드 유사성 분석의 정확도가 떨어짐
- 특히 익명 함수는 호출 때마다 다른 이름으로 처리되어 동일 함수임에도 매번 별개로 인식됨
접근
여러 언어의 소스로 재현 테스트를 수행해 원인을 좁혔습니다. 결과적으로 두 가지 결함이 확인됐습니다.
- 구문 분석기 결함 —
final,Map<>같은 특정 키워드·제네릭 문법을 제대로 처리하지 못함 - 내부 정규식 로직 결함 — 추상화 과정의 패턴 매칭이 일관된 결과를 보장하지 못함
핵심 해결책으로, 익명 함수가 매번 다른 이름으로 처리되는 문제에는 함수 내용 기반 해시값으로 고유하고 일관된 함수명을 부여하도록 명명 로직을 개발·적용했습니다. 같은 내용이면 항상 같은 이름이 나오므로 동일 함수가 일관되게 식별됩니다.
결과
함수 시그니처 일치변수명·타입만 다른 동일 함수를 일관된 시그니처로 식별
동일 로직 매칭내용 기반 해시 명명으로 동일 로직을 일관되게 매칭
취약점 분석 정확도코드 레벨 취약점 분석의 정확도 향상
역할
먼저 같은 함수에서 시그니처가 달라지는 조건을 재현하고 언어별 테스트 케이스를 늘렸습니다. 원인은 구문 분석기와 hash-gen 정규식에 나뉘어 있었고, JavaScript 익명 함수는 함수 내용으로 만든 해시를 이름으로 사용하도록 고쳤습니다.
코드 유사성·취약점 분석 파이프라인의 정밀도 개선 작업의 일부로 진행.