파이프라인의 취약점

상세 정보: Tier: Ultimate Offering: GitLab.com, 자체관리, 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 외부에서 분석하기 위해 보안 스캔 결과를 다운로드할 수 있습니다.

미사용으로 처리된 발견물은 기본적으로 숨겨집니다. 이러한 발견물을 보려면 숨김 해제 토글을 끄십시오.

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

  • 발견물에 대한 자세한 정보 확인.
  • 발견물에 대한 이슈 생성.
  • 발견물을 무시하도록 처리.

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

기존 취약점 상태 파이프라인 보안 탭에서 숨겨집니다? 새로운 취약점 상태
무시됨
무시됨 무시됨
확인됨 아니요 확인됨
진단 필요 (감지됨) 아니요 진단 필요 (감지됨)
해결됨 아니요 진단 필요 (감지됨)
N/A (새로운 취약점) 아니요 진단 필요 (감지됨)

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

  • GitLab 16.10에 소개, 기본값으로 활성화된 include_manual_to_pipeline_completion 플래그로 추가됨.
파이프라인 상태 파이프라인 완료 어떤 취약점이 표시됩니까?
성공 완료 ✅ 파이프라인의 모든 취약점 발견 표시
실패 완료 ✅ 실패하지 않는 작업의 취약점 발견 표시, ❌ 실패하는 작업의 취약점 발견 표시하지 않음.
차단됨 완료 수동 작업에 의해 차단된 파이프라인의 모든 취약점 발견 표시

발견물 보유 기간

GitLab 15.5에서 도입.

다음 경우에 발견물이 더 이상 사용할 수 없습니다:

  • 관련 CI 작업 artifacts의 만료.
  • 파이프라인이 생성된 후 90일이 경과하면 관련 CI 작업 artifacts가 잠겨 있더라도 사용할 수 없습니다.

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

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

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

발견물의 상태 변경

  • 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 유형의 경우 이미지 이름으로 위치가 정의됩니다. 그러나 이미지 태그에 하나 이상의 문자가 포함되거나 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 이상으로 업그레이드하여 해결할 수 있습니다.

보고서 구문 분석 및 스캔 흡수 오류

참고: 이러한 단계는 GitLab 지원팀이 이러한 오류를 재현하기 위해 사용해야 합니다.

일부 보안 스캔은 보고서 구문 분석이나 스캔 흡수와 관련된 파이프라인의 Security 탭에서 오류가 발생할 수 있습니다. 사용자로부터 프로젝트의 사본을 얻을 수 없는 경우, 스캔에서 생성된 보고서를 사용하여 오류를 재현할 수 있습니다.

오류를 재현하려면:

  1. 사용자로부터 보고서의 사본을 얻습니다. 이 예에서는 gl-sast-report.json.
  2. 프로젝트를 만듭니다.
  3. 보고서를 저장소에 커밋합니다.
  4. .gitlab-ci.yml 파일을 추가하고 해당 보고서를 작업의 artifact로 추가하세요.

    예를 들어, SAST 작업에 의한 오류를 재현하려면:

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

sast: gl-sast-report.json를 생성된 보고서에 따라 적절한 JSON 보고서 파일명과 해당 artifacts:reports 유형으로 대체할 수 있습니다.