파이프라인의 취약점

Tier: Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

모든 활성화된 보안 분석기가 파이프라인에서 실행되고 결과물을 artifacts로 출력합니다. 이러한 artifacts는 중복 제거를 포함한 처리가 이루어지며 결과는 파이프라인 보안 탭에 나열됩니다. 파이프라인에서 취약성 검색을 식별함으로써 위험을 예방할 수 있습니다.

파이프라인 보안 탭에는 다음과 같은 기준이 적용됩니다:

  • 성공한 보안 스캔 작업의 결과만 표시됩니다. 예를 들어, 파이프라인에 SAST 및 DAST 작업이 포함되어 있지만 DAST 작업이 실패한 경우 SAST 결과만 표시됩니다.
  • 파이프라인에 차단 매뉴얼 작업이 있는 경우, 파이프라인은 매뉴얼 작업을 기다리며 차단 매뉴얼 작업이 실행되지 않은 경우 취약성을 표시할 수 없습니다.
  • 검색 결과에는 만료 기간이 존재합니다. 만료된 결과는 파이프라인 보안 탭에 표시되지 않습니다. 자세한 내용은 검색 결과의 보유 기간을 참조하십시오.

파이프라인의 취약점 보기

파이프라인에서 취약점을 보려면 다음 단계를 따르세요:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 빌드 > 파이프라인을 선택합니다.
  3. 파이프라인을 선택합니다.
  4. 보안 탭을 선택합니다.

스캔 세부 정보

스캔 세부 정보 섹션에는 파이프라인의 취약성 검색 결과와 소스 보고서의 요약이 표시됩니다.

GitLab은 파이프라인에 있는 스캔 유형 artifacts 각각에 대해 한 줄의 정보를 표시합니다.

보안 스캔 결과 다운로드

보안 스캐너의 유형에 따라 다음을 다운로드할 수 있습니다:

  • 보안 스캐너 보고서가 포함된 JSON artifact입니다.
  • 보안 스캐너에 의해 스캔된 URL 및 엔드포인트가 포함된 CSV 파일입니다.

보안 스캔 결과를 다운로드하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 빌드 > 파이프라인를 선택합니다.
  3. 파이프라인을 선택합니다.
  4. 보안 탭을 선택합니다.
  5. 스캔 세부 정보에서 결과 다운로드를 선택하세요:
    • JSON 파일을 다운로드하려면 JSON artifact를 선택합니다.
    • CSV 파일을 다운로드하려면 스캔된 리소스 다운로드를 선택합니다.

스캔 결과

소스 브랜치에 있는 검색 결과는 심각도에 따라 내림차순으로 나열됩니다. 검색 결과 디렉터리을 심각도 및 도구로 필터링하고 GitLab 외부에서 분석을 위해 보안 스캔 결과를 다운로드할 수 있습니다.

무시된 검색 결과는 기본적으로 숨겨집니다. 이러한 검색 결과를 보려면 무시된 결과 숨기기 토글을 끄세요.

각 검색 결과에 대해 다음을 수행할 수 있습니다:

  • 검색 결과에 대해 자세히 알아보기.
  • 검색 결과에 대한 이슈 생성.
  • 검색 결과를 무시하기.

Merge Request 브랜치를 대상 브랜치로 Merge하는 경우 모든 보고된 검색 결과는 취약점 보고서에 포함됩니다. 기본 브랜치에서 실행된 파이프라인의 스캔 결과는 파이프라인 완료 후 다음 표에 따라 통합됩니다:

기존 취약성 상태 파이프라인에서 무시됨? 새로운 취약성 상태
모든 무시됨
무시됨 모든 무시됨
확인됨 아니요 확인됨
처리 필요(감지됨) 아니요 처리 필요(감지됨)
해결됨 아니요 처리 필요(감지됨)
N/A(새로운 취약성) 아니요 처리 필요(감지됨)

차단된 또는 불완전한 상태의 파이프라인에서의 보안 보고서

  • GitLab 16.10에 플래그 include_manual_to_pipeline_completion와 함께 도입. 기본적으로 활성화됨.
파이프라인 상태 파이프라인 완료 어떤 취약성이 표시되나요? 1
성공 완료 ✅ 파이프라인의 모든 취약성 결과 표시됨.
실패 완료 ✅ 실패하지 않은 작업에 대한 취약성 결과 표시됨, ❌ 실패한 작업에 대한 취약성 결과 표시 안됨.
차단 2 완료 ✅ 파이프라인이 매뉴얼 작업에 의해 차단된 경우에도 모든 취약성 결과 표시됨.

주석:

  1. 이러한 결과는 Merge Request 보안 위젯, 파이프라인 보안 탭, 취약점 보고서, 기본 브랜치로 Merge된 경우 의존성 디렉터리에 표시됩니다.
  2. 16.10 이전의 GitLab에서는 모든 파이프라인 작업이 완료된 후에만 스캔 결과를 수용했습니다. 16.10부터는 매뉴얼 작업에 의해 차단된 경우에도 파이프라인이 스캔 결과를 수용합니다.

검색 결과의 보유 기간

검색 결과는 다음과 같은 경우에 더 이상 사용할 수 없습니다:

  • 관련 CI 작업 artifacts의 만료일이 지난 경우.
  • 파이프라인 생성 후 90일이 지난 경우, 심지어 관련 CI 작업 artifacts이 잠겨 있더라도.

결과를 보려면 다음 중 하나를 수행하세요:

  • 새로운 파이프라인을 실행합니다.
  • 관련 CI 작업 artifacts이 있는 경우 다운로드합니다.
note
이는 기본 브랜치에 존재하는 취약성에는 적용되지 않습니다.

검색 결과의 상태 변경

  • GitLab 16.7에 도입되었습니다. 기본적으로 비활성화됨.

플래그: Self-managed GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 사용하려면 관리자가 파이프라인 보안 대시보드 GraphQL라는 피처 플래그를 활성화해야 합니다. GitLab.com 및 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다.

결과의 상태무시 또는 처리 필요로 변경하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 빌드 > 파이프라인를 선택합니다.
  3. 파이프라인을 선택하고 보안 탭을 선택합니다.
  4. 선택하세요:
    • 하나 이상의 결과는 각각의 결과 옆의 확인란을 선택합니다.
    • 페이지 상단의 확인란을 선택하여 페이지에서 모든 결과를 선택합니다.
  5. 상태 설정 드롭다운 디렉터리에서 원하는 상태를 선택합니다.
  6. 무시 상태를 선택한 경우, 무시 사유 설정 드롭다운 디렉터리에서 원하는 이유를 선택합니다.
  7. 의견 추가 입력란에서 의견을 제공할 수 있습니다. 무시 상태인 경우 의견이 필요합니다.
  8. 상태 변경을 선택합니다.

선택한 결과의 상태가 업데이트되며 보안 탭의 내용이 새로고침됩니다.

중복 제거 프로세스

파이프라인에는 동일한 유형의 여러 보안 보고서를 생성하는 작업이 포함될 수 있습니다. 여러 보고서에서 동일한 취약점 검색 결과가 나타날 수 있습니다. 이중제거 프로세스(deduplication process)는 다양한 스캐너를 사용하여 커버리지를 늘리는 경우에 발생할 수 있는데, 하나의 보고서에서도 발생할 수 있습니다. 이중제거 프로세스를 통해 취약성 스캔 범위를 최대화하고 관리해야 하는 결과 수를 줄일 수 있습니다.

다른 스캐너를 사용하여 커버리지를 높일 때 또는 단일 보고서에서도 반복이 발생할 수 있습니다. 취약점의 위치, 스캔 유형 및 하나 이상의 식별자가 동일할 때 동일한 취약점 검색 결과는 중복으로 간주됩니다.

스캔 유형이 일치해야 하는 이유는 각각이 취약점의 위치에 대한 정의를 가질 수 있기 때문입니다. 예를 들어 정적 분석기는 파일 경로와 줄 번호를 찾을 수 있지만, 컨테이너 스캔 분석기는 이미지 이름을 사용합니다.

식별자를 비교할 때 GitLab은 이중제거 중 CWEWASC를 비교하지 않습니다. 이들은 “유형 식별자”이며 취약점 그룹을 분류하는 데 사용됩니다. 이들 식별자를 포함하면 많은 취약점이 잘못된 중복으로 간주됩니다. 식별자가 일치하지 않는 경우 두 취약점은 고유하게 간주됩니다.

중복된 취약점 집합에서 첫 번째 발견은 유지되고 나머지는 건너뜁니다. 보안 보고서는 알파벳순의 파일 경로 순서로 처리되며, 취약점이 보고서에 나타나는 순서대로 처리됩니다.

중복 제거 예시

  • 예시 1: 식별자 및 위치 일치, 스캔 유형 불일치.
    • 발견
      • 스캔 유형: sast
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CVE-2022-25510
    • 다른 발견
      • 스캔 유형: secret_detection
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CVE-2022-25510
    • 중복 제거 결과: 스캔 유형이 다르기 때문에 중복이 아닙니다.
  • 예시 2: 위치 및 스캔 유형 일치, 유형 식별자 불일치.
    • 발견
      • 스캔 유형: sast
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CWE-259
    • 다른 발견
      • 스캔 유형: sast
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CWE-798
    • 중복 제거 결과: CWE 식별자가 무시되므로 중복됩니다.
  • 예시 3: 스캔 유형, 위치 및 식별자 일치.
    • 발견
      • 스캔 유형: container_scanning
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CVE-2019-12345, CVE-2022-25510, CWE-259
    • 다른 발견
      • 스캔 유형: container_scanning
      • 위치 지문: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 식별자: CVE-2022-25510, CWE-798
    • 중복 제거 결과: 모든 기준이 일치하며 유형 식별자는 무시되므로 중복됩니다. 이 경우에는 CVE-2022-25510 하나만 일치하면 됩니다.

각 스캔 유형의 정의는 다음에서 찾을 수 있습니다: gitlab/lib/gitlab/ci/reports/security/locations 그러나 container_scanning 유형의 경우 이미지 태그에 한 문자 이상이 포함되어 있거나 8자보다 길 경우 중복으로 간주되지 않습니다. 따라서 registry.gitlab.com/group-name/project-name/image1:12345019:libcrypto3registry.gitlab.com/group-name/project-name/image1:libcrypto3는 동일하게 처리되지만, registry.gitlab.com/group-name/project-name/image1:v19202021:libcrypto3registry.gitlab.com/group-name/project-name/image1:libcrypto3는 서로 다르게 간주됩니다.