취약점 추적 개요
GitLab의 취약점 추적 메커니즘과 Scope+Offset 방법을 기반으로 한 중복 제거 및 추적 흐름을 설명합니다.
GitLab에서는 Git과 자동화된 보안 테스팅을 Continuous Integration and Continuous Delivery(CI/CD) 프로세스와 결합하여 실행합니다. 이 프로세스는 코드 변경 사항을 지속적으로 모니터링하여 보안 취약점을 최대한 조기에 탐지합니다. 보안 테스팅에는 주로 여러 Static Application Security Testing(SAST) 도구가 사용되며, 각 도구는 하드코딩된 비밀번호나 불안전한 데이터 흐름과 같은 특정 취약점 탐지에 특화되어 있습니다. 여러 도구를 조합한 이기종(heterogeneous) SAST 설정은 소프트웨어의 공격 표면을 최소화하는 데 도움이 됩니다. 이러한 도구들로부터 얻은 보안 결과물(findings)은 취약점 관리(Vulnerability Management)라는 반자동 프로세스를 통해 이해, 분류, 저장, 처리됩니다. 코드 변동성(프로젝트 소스 코드의 지속적인 변경)과 이중 보고(여러 도구에서 보고된 결과물의 중복)는 중복의 잠재적 원인으로, 분석가에게 불필요한 감사 부담을 줍니다. 취약점 추적은 소프트웨어 프로젝트의 생애 주기 전반에 걸쳐 취약점을 중복 제거하고 추적하는 데 도움을 주는 자동화된 프로세스입니다. GitLab의 취약점 추적 방법은 Scope+Offset (내부)을 기반으로 합니다. Scope+Offset 방법의 전신은 라인 기반 핑거프린팅(line-based fingerprinting)으로, 이 방법은 더 취약하여 이미 탐지된 취약점이 재도입되는 사례가 많았습니다. 중복 방지가 Scope+Offset 방법을 구현하게 된 동기였습니다. 관련 연구 이슈에서 더 많은 배경 정보를 확인하세요 (내부). 컴포넌트 # 매우 높은 수준에서 취약점 추적 흐름은 아래와 같이 묘사됩니다. 이 섹션의 나머지 부분에서는, 취약점 추적 목적상 SAST 분석기와 Tracking Calculator가 추적 서명(tracking signature) 생산자(producer) 컴포넌트를 나타내고, Rails 백엔드가 추적 서명 소비자(consumer) 컴포넌트를 나타낸다고 가정합니다. 각 컴포넌트에 대한 자세한 설명은 아래에 있습니다. flowchart LR R["Repository"] S("SAST Analyzer [CI]") T("tracking-calculator [CI]") B("Rails backend") R --code--> S --gl-sast-report.json--> T --augmented gl-sast-report.json--> B R --code --> T 추적 서명 생산자 # SAST 분석기는 CI 컨텍스트에서 실행되며, 소스 코드를 분석하여 gl-sast-report.json 파일을 생성합니다. Tracking Calculator 는 소스 코드를 기반으로 스코프(scope)를 계산하고, 이를 gl-sast-report.json 에 나열된 취약점과 매칭합니다. 매칭이 이루어지면, Tracking Calculator는 Scope+Offset 방식으로 서명(sign