지속적 컨테이너 스캐닝
GitLab v19.1Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab 16.10에서 GitLab Self-Managed 및 GitLab Dedicated에서 활성화됨. GitLab 17.0에서 일반적으로 사용 가능해짐. 컨테이너 스캐닝을 위한 지속적 취약점 스캐닝(CVS)은 새 파이프라인을 실행하지 않고도 최신 보안 어드바이저리의 정보와 컴포넌트 이름 및 버전을 비교하여 프로젝트 이미지 의존성의 보안 취약점을 탐지합니다.
히스토리
-
GitLab 16.10에서 GitLab Self-Managed 및 GitLab Dedicated에서 활성화됨.
-
GitLab 17.0에서 일반적으로 사용 가능해짐. 피처 플래그
container_scanning_continuous_vulnerability_scans제거됨.
컨테이너 스캐닝을 위한 지속적 취약점 스캐닝(CVS)은 새 파이프라인을 실행하지 않고도 최신 보안 어드바이저리의 정보와 컴포넌트 이름 및 버전을 비교하여 프로젝트 이미지 의존성의 보안 취약점을 탐지합니다. CVS는 기본 브랜치에 저장된 CycloneDX SBOM 보고서를 사용하여 프로젝트에서 사용 중인 컴포넌트를 파악합니다. 이 SBOM을 생성하려면 기본 브랜치에서 컨테이너 스캐닝 job이 최소 한 번 실행되어야 합니다. 이후 CVS는 추가 파이프라인 실행 없이 해당 컴포넌트에 대해 새로 게시된 어드바이저리를 자동으로 탐지합니다. 이미지 콘텐츠가 변경되면 CVS가 업데이트된 컴포넌트 집합을 평가할 수 있도록 기본 브랜치에서 새 파이프라인을 실행하여 SBOM을 갱신해야 합니다. 대부분의 프로젝트에서는 의존성 변경 시 코드 변경을 수반하여 파이프라인이 이미 트리거되므로, 이는 일반적인 워크플로의 일부로 처리됩니다.
지속적 취약점 스캐닝이 지원되는 패키지 유형의 컴포넌트를 포함하는 모든 프로젝트에 대해 스캔을 트리거하면 새로운 취약점이 발생할 수 있습니다.
컨테이너 스캐닝을 위한 지속적 취약점 스캐닝이 생성한 취약점은 스캐너 이름으로 GitLab SBoM Vulnerability Scanner를, 취약점 유형으로 Container Scanning을 사용합니다.
CI/CD 기반 보안 스캔과 달리, 지속적 취약점 스캐닝은 CI/CD 파이프라인이 아닌 백그라운드 job(Sidekiq)을 통해 실행되며, 보안 보고서 아티팩트는 생성되지 않습니다.
사전 요구 사항#
-
GitLab 인스턴스에 동기화된 보안 어드바이저리.
지원되는 패키지 유형#
지속적 취약점 스캐닝은 다음 PURL 유형의 컴포넌트를 지원합니다:
-
apk -
deb -
rpm
알려진 제한 사항:
-
선행 0이 포함된 APK 버전은 지원되지 않습니다. 이 버전 지원을 위한 작업은 이슈 471509에서 추적 중입니다.
-
^가 포함된 RPM 버전은 지원되지 않습니다. 이 버전 지원을 위한 작업은 이슈 459969에서 추적 중입니다. -
Red Hat 배포판의 RPM 패키지는 지원되지 않습니다. 이 사용 사례 지원을 위한 작업은 에픽 12980에서 추적 중입니다.
CycloneDX SBOM 보고서 생성 방법#
CycloneDX SBOM 보고서를 사용하여 프로젝트 컴포넌트를 GitLab에 등록하세요.
CycloneDX 보고서는 다음 사항을 준수해야 합니다:
-
CycloneDX 명세 버전
1.4,1.5, 또는1.6.
GitLab은 GitLab 호환 보고서를 생성할 수 있는 보안 분석기를 제공합니다:
새로운 취약점 확인#
지속적 취약점 스캐닝이 탐지한 새로운 취약점은 취약점 보고서에서 확인할 수 있습니다. 단, 영향을 받는 SBOM 컴포넌트가 탐지된 파이프라인에는 해당 취약점이 나열되지 않습니다.
보안 어드바이저리가 추가되거나 업데이트된 후 취약점이 생성되며, 코드베이스가 변경되지 않는 경우 해당 취약점이 프로젝트에 추가되기까지 몇 시간이 소요될 수 있습니다. 지속적 취약점 스캐닝에는 최근 14일 이내에 게시된 어드바이저리만 고려됩니다.
취약점이 더 이상 탐지되지 않는 경우#
지속적 취약점 스캐닝은 새 어드바이저리가 게시되면 자동으로 취약점을 생성하지만, 프로젝트에서 취약점이 더 이상 존재하지 않는 시점은 감지하지 못합니다. 이를 위해 GitLab은 기본 브랜치에 대한 파이프라인에서 컨테이너 스캐닝을 실행하고, 최신 정보로 보안 보고서 아티팩트를 생성해야 합니다. 이 보고서가 처리될 때 일부 취약점이 더 이상 포함되어 있지 않으면, 지속적 취약점 스캐닝을 통해 생성된 취약점이더라도 해당 상태로 표시됩니다.
레지스트리용 컨테이너 스캐닝을 통해 탐지된 취약점은 이 방법으로 해결할 수 없으며, 이미지에서 수정하더라도 계속 표시됩니다. 이는 레지스트리용 컨테이너 스캐닝이 보안 보고서가 아닌 SBOM만 생성하기 때문입니다. 취약점을 해결된 것으로 표시하려면 보안 보고서가 필요합니다.
보안 어드바이저리#
지속적 취약점 스캐닝은 GitLab이 관리하는 서비스인 패키지 메타데이터 데이터베이스(Package Metadata Database)를 사용합니다. 이 서비스는 라이선스 및 보안 어드바이저리 데이터를 수집하고, GitLab.com 및 GitLab Self-Managed 인스턴스에서 사용하는 업데이트를 정기적으로 게시합니다.
GitLab.com에서는 GitLab이 동기화를 관리하며 모든 프로젝트에서 사용할 수 있습니다.
GitLab Self-Managed에서는 GitLab 인스턴스의 Admin 영역에서 동기화할 패키지 레지스트리 메타데이터를 선택할 수 있습니다.
데이터 소스#
보안 어드바이저리의 현재 데이터 소스에는 다음이 포함됩니다:
- Aqua Security의
vuln-list 리포지터리를 기반으로 빌드된 Trivy DB
취약점 데이터베이스에 기여하기#
취약점을 찾으려면 원시 데이터가 포함된 Aqua Security의 vuln-list 리포지터리를 검색할 수 있습니다.
또한 Trivy-DB에 기여할 수도 있습니다.