pile·
보안·gitlab-engGitLab Blog·

리팩터링에도 취약점 추적이 흔들리지 않도록: GitLab의 정규화 Scope+Offset 핑거프린팅

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 엔지니어와 보안 플랫폼 개발자에게 실측 검증된 핑거프린팅 개선 방법론.
gitlab-eng
GitLab Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 보안·gitlab-engGitLab Blog·

    Serena MCP 에이전트의 치명적 원격 코드 실행 취약점 분석

    GitLab 보안팀이 AI 코딩 에이전트 Serena(월 PyPI 다운로드 13.6만 건)에서 치명적 원격 코드 실행 취약점을 발견했다. Jinja2 비샌드박스 환경과 신뢰 모델의 미검사 경로가 결합해 개발자가 악의적 저장소를 열기만 해도 코드가 실행된다. serena-agent 1.7.0에서 SandboxedEnvironment 교체로 수정 완료됐다.

    요약 이어보기
    #mcp#security#rce+2