GitLab이 SAST 취약점 추적 정확도를 높이기 위해 Scope+Offset 핑거프린팅 알고리즘을 개선했다. 기존 방식은 주석이나 빈 줄을 추가하기만 해도 취약점이 새 위치로 인식돼 중복 발견이 쌓이는 문제가 있었는데, 비기능적 코드를 무시하는 정규화로 해결했다.
핵심 포인트- 기존 Scope+Offset: 파일·라인 번호 대신 가장 좁은 스코프(모듈/클래스/함수) + 스코프 내 오프셋으로 취약점을 식별, 코드 이동에 강해 라인 기반 대비 재감사 30% 감소를 달성했다.
- 문제: 오프셋 계산에 주석과 빈 줄이 포함돼, 취약 코드 위에 주석 한 줄만 추가해도 핑거프린트가 달라져 중복 발견이 발생했다.
- 해결: 핑거프린트 계산 시 비기능적 코드(주석·빈 줄)를 무시하는 정규화 적용 — 프로그램 동작에 영향 없는 줄은 취약점 식별에도 영향을 주지 않아야 한다는 원칙이다.
- 벤치마크 결과: 7개 언어, 439개 소스 파일, 2,247개 커밋에서 기존 방식 1,361개 중복 핑거프린트(77% 증가) → 정규화 방식 중복 0건, 고유 핑거프린트 43% 감소.
- 출시: GitLab에 `scope_offset_compressed` 알고리즘으로 탑재, 스캐너가 이미 생성하는 파스 트리를 재사용해 스캔 시간 증가 없음.
상세 정리- 문제 배경: 보안 스캔에서 개발자가 주석을 추가하거나 파일을 리포맷하면 나이브한 취약점 추적기가 같은 취약점을 새로 보고해 이미 처리한 이슈를 재감사하는 낭비가 발생한다.
- 2022년 도입 배경: 파일+라인 번호 기반 추적의 한계를 극복하기 위해 Scope+Offset을 도입, 코드가 파일 내에서 이동해도 동일 스코프+오프셋이면 같은 취약점으로 추적한다.
- 미해결 케이스: 비기능적 변경(주석·빈 줄 삽입)은 취약 코드의 줄 번호를 변경하지 않아도 스코프 내 오프셋을 바꿔 핑거프린트가 달라진다.
- 정규화 원리: 핑거프린트 계산 시 주석·빈 줄을 제외한 실행 가능한 코드 줄만 세어 오프셋을 계산한다. 파스 트리를 이미 사용 중이므로 추가 파싱 비용이 없다.
- 벤치마크 설계: 각 커밋이 알려진 취약점 바로 위에 주석 또는 빈 줄 1개를 삽입하는 최악의 시나리오를 반복해 내성을 직접 측정했다.
- 결과 요약: 기존 방식 1,361 중복 vs 정규화 방식 0 중복; 정규화 적용 시 전체 고유 핑거프린트 수도 43% 감소해 추적 부담이 줄었다.
- ASE 2026 발표: 연구 논문 "Vulnerability Tracking using Normalized Scope+Offset"이 ASE 2026 Industry Showcase에서 발표 예정이다.
왜 읽나SAST 결과의 신뢰성과 중복 재감사 노이즈를 줄이고 싶은 DevSecOps 엔지니어와 보안 플랫폼 개발자에게 실측 검증된 핑거프린팅 개선 방법론.