파이프라인의 취약점

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

모든 활성화된 보안 분석기는 파이프라인에서 실행되며 결과를 아티팩트로 출력합니다. 이러한 아티팩트는 중복 제거를 포함하여 처리되며, 결과는 파이프라인 보안 탭에 나열됩니다. 파이프라인에서 취약성 발견을 식별함으로써 위험을 사전에 대응할 수 있습니다.

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

  • 성공적인 보안 스캔 작업의 결과만 표시됩니다. 예를 들어, 파이프라인에 SAST 및 DAST 작업이 포함되어 있지만 DAST 작업이 실패하면 SAST 결과만 표시됩니다.
  • 발견된 사항은 만료 기간이 있습니다. 만료된 발견 사항은 파이프라인 보안 탭에 표시되지 않습니다. 자세한 내용은 발견의 보존 기간을 참조하세요.

파이프라인의 취약점 보기

파이프라인의 취약점을 보려면:

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

스캔 상세 정보

스캔 상세 정보 섹션은 파이프라인에서의 취약성 발견 사항과 소스 보고서의 요약을 보여줍니다.

GitLab은 파이프라인에 존재하는 각 스캔 유형 아티팩트에 대한 정보를 한 행으로 표시합니다.

보안 스캔 결과 다운로드

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

  • 보안 스캐너 보고서를 포함하는 JSON 아티팩트.
  • 보안 스캐너가 스캔한 URL 및 엔드포인트를 포함하는 CSV 파일.

보안 스캔 출력을 다운로드하려면:

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

스캔 결과

소스 브랜치에 존재하는 발견 사항은 심각도에 따라 내림차순으로 나열됩니다. 심각도 및 도구로 발견 목록을 필터링할 수 있습니다. GitLab 외부에서 분석을 위해 보안 스캔 결과를 다운로드할 수도 있습니다.

기각된 발견 사항은 기본적으로 숨겨져 있습니다. 이러한 발견 사항을 보려면 기각된 사항 숨기기 토글을 끄세요.

각 발견에 대해 다음을 수행할 수 있습니다:

  • 발견에 대한 추가 정보 얻기.
  • 발견에 대해 문제 생성하기.
  • 발견 기각하기.

병합 요청의 브랜치를 대상 브랜치로 병합할 때, 기본 브랜치에서 실행되는 다음 파이프라인의 모든 보고된 발견 사항이 취약성 보고서에 표시됩니다. 기본 브랜치에서 실행된 파이프라인의 스캔 결과는 다음 표에 따라 파이프라인이 완료된 후 통합됩니다:

기존 취약점 상태 파이프라인 보안 탭에서 기각됨? 새로운 취약점 상태
any Yes Dismissed
Dismissed any Dismissed
Confirmed No Confirmed
Needs triage (Detected) No Needs triage (Detected)
Resolved No Needs triage (Detected)
N/A (New vulnerability) No Needs triage (Detected)

차단되거나 불완전한 상태의 파이프라인에서의 보안 보고서

  • GitLab 16.10에서 도입됨 include_manual_to_pipeline_completion이라는 플래그와 함께. 기본적으로 활성화되어 있습니다.
파이프라인 상태 파이프라인 완료 어떤 취약점이 표시됩니까?
성공 완료 ✅ 파이프라인에 대한 모든 취약점 발견 사항이 표시됩니다.
실패 완료 ✅ 실패하지 않은 작업에 대한 취약점 발견 사항이 표시됩니다, ❌ 실패한 작업에 대한 취약점 발견 사항은 표시되지 않습니다.
차단됨 완료 ✅ 파이프라인이 수동 작업으로 차단된 경우에도 모든 취약점 발견 사항이 표시됩니다.

발견 사항 보존 기간

발견 사항은 더 이상 사용 불가능합니다:

  • 관련 CI 작업 아티팩트가 만료될 때.
  • 파이프라인이 생성된 후 90일이 지나면, 관련 CI 작업 아티팩트가 잠겨 있어도 마찬가지입니다.

발견 사항을 보려면, 다음 중 하나를 수행하십시오:

  • 새 파이프라인을 실행합니다.
  • 관련 CI 작업 아티팩트를 다운로드합니다(사용 가능한 경우).

참고: 이것은 기본 브랜치에 존재하는 취약점에 적용되지 않습니다.

발견 사항 상태 변경

  • GitLab 16.7에서 도입됨 pipeline_security_dashboard_graphql이라는 플래그와 함께. 기본적으로 비활성화되어 있습니다.
  • GitLab 17.4에서 일반 제공. 기능 플래그 pipeline_security_dashboard_graphql가 제거되었습니다.

발견 사항의 상태를 해제 또는 분류 필요로 변경하려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.

  2. 빌드 > 파이프라인을 선택합니다.

  3. 파이프라인을 선택하고 보안 탭을 선택합니다.

  4. 선택하려면:
    • 하나 이상의 발견 사항을 선택하려면 각 발견 사항 옆의 체크박스를 선택합니다.
    • 페이지의 모든 발견 사항을 선택하려면 테이블 헤더의 체크박스를 선택합니다.
  5. 상태 설정 드롭다운 목록에서 원하는 상태를 선택합니다.

  6. 해제 상태가 선택된 경우, 해제 사유 설정 드롭다운 목록에서 원하는 이유를 선택합니다.

  7. 댓글 추가 입력란에 댓글을 제공할 수 있습니다. 해제 상태의 경우, 댓글이 필요합니다.

  8. 상태 변경을 선택합니다.

선택한 발견 사항의 상태가 업데이트되고 보안 탭의 내용이 새로 고쳐집니다.

중복 제거 프로세스

파이프라인에 동일한 유형의 보안 보고서를 여러 개 생성하는 작업이 포함된 경우, 동일한 취약점 발견 사항이 여러 보고서에 존재할 가능성이 있습니다. 이러한 중복은 다양한 스캐너를 사용하여 커버리지를 늘릴 때 일반적이지만, 단일 보고서에서도 존재할 수 있습니다. 중복 제거 프로세스를 통해 취약점 스캔 커버리지를 극대화하면서 관리해야 할 발견 사항의 수를 줄일 수 있습니다.

발견 사항은 스캔 유형, 위치 및 하나 이상의 식별자가 동일할 때 다른 발견 사항의 중복으로 간주됩니다.

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

식별자를 비교할 때, 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/locationsgitlab/ee/lib/gitlab/ci/reports/security/locations에서 찾을 수 있습니다.

예를 들어, container_scanning 유형의 경우 위치는 태그가 없는 Docker 이미지 이름으로 정의됩니다. 그러나 이미지 태그에 적어도 하나의 문자가 포함되어 있거나 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는 다르게 간주됩니다.

문제 해결

무시된 취약점이 때때로 여전히 보임

GitLab 16.8 및 이전 버전의 경우 무시된 취약점이 때때로 여전히 보이는 경우가 있습니다.

이는 GitLab 16.9 및 이후 버전으로 업그레이드하여 해결할 수 있습니다.

보고서 파싱 및 스캔 수집 오류

note
이 단계는 GitLab 지원팀에서 이러한 오류를 재현하는 데 사용됩니다.

일부 보안 스캔은 보고서 파싱 또는 스캔 수집과 관련하여 파이프라인의 Security 탭에서 오류를 발생시킬 수 있습니다. 사용자로부터 프로젝트 복사본을 얻는 것이 불가능한 경우, 스캔에서 생성된 보고서를 사용하여 오류를 재현할 수 있습니다.

오류를 재현하려면:

  1. 사용자로부터 보고서 복사본을 받습니다. 이 예에서는 gl-sast-report.json입니다.

  2. 프로젝트를 생성합니다.

  3. 보고서를 저장소에 커밋합니다.

  4. .gitlab-ci.yml 파일을 추가하고, 해당 작업의 아티팩트로 보고서를 포함시킵니다.

    예를 들어, SAST 작업으로 인해 발생한 오류를 재현하려면:

    sample-job:
      script:
        - echo "테스트 보고서"
      artifacts:
        reports:
          sast: gl-sast-report.json
    
  5. 파이프라인이 완료된 후, 파이프라인의 Security 탭에서 오류 내용을 확인합니다.

sast: gl-sast-report.json을 해당 스캔에 의해 생성된 올바른 JSON 보고서 파일 이름과 함께 적절한 artifacts:reports 유형으로 교체할 수 있습니다.