파이프라인의 취약점
모든 활성화된 보안 분석기가 파이프라인에서 실행되고 그 결과를 artifact로 출력합니다. 이러한 artifact는 중복 제거를 포함한 처리를 거친 후, 파이프라인 보안 탭에서 결과가 나열됩니다. 파이프라인에서 취약점 검출을 식별함으로써, 예방적으로 위험 요소에 대응할 수 있습니다.
다음 기준이 파이프라인 보안 탭에 적용됩니다:
- 성공적인 보안 스캔 작업의 결과만 표시됩니다. 예를 들어 SAST 및 DAST 작업이 포함된 파이프라인이지만 DAST 작업이 실패하면 SAST 결과만 표시됩니다.
- 파이프라인에 차단 매뉴얼 작업이 있는 경우, 파이프라인은 매뉴얼 작업을 기다리며, 차단 매뉴얼 작업이 실행되지 않으면 취약성을 표시할 수 없습니다.
- 검출된 취약점에는 만료 기간이 있습니다. 만료된 취약점은 파이프라인 보안 탭에 표시되지 않습니다. 자세한 내용은 검출 내용의 유지 기간을 참조하십시오.
파이프라인의 취약점 보기
파이프라인의 취약점을 보려면 다음을 수행합니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인을 선택합니다.
- 보안 탭을 선택합니다.
스캔 세부 정보
스캔 세부 정보 섹션은 파이프라인의 취약점 검출에 대한 요약 및 소스 보고서를 표시합니다.
GitLab은 파이프라인에 존재하는 스캔 유형 artifact마다 한 줄의 정보를 표시합니다.
보안 스캔 결과 다운로드
보안 스캐너 종류에 따라 다음을 다운로드할 수 있습니다:
- 보안 스캐너 리포트를 포함하는 JSON artifact.
- 보안 스캐너에 의해 스캔된 URL과 엔드포인트를 포함하는 CSV 파일.
보안 스캔 결과를 다운로드하려면 다음을 수행합니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인을 선택합니다.
- 보안 탭을 선택합니다.
-
스캔 세부 정보에서 결과 다운로드를 선택합니다:
- JSON 파일을 다운로드하려면 JSON artifact를 선택합니다.
- CSV 파일을 다운로드하려면 스캔된 리소스 다운로드를 선택합니다.
스캔 결과
소스 브랜치에 존재하는 검출 결과는 심각도의 내림차순으로 나열됩니다. 검출 목록을 심각도 및 도구로 필터링할 수 있습니다. 또한 GitLab 외부에서 분석을 위해 보안 스캔 결과를 다운로드할 수도 있습니다.
감지된 결과가 숨겨진 상태로 되어 있습니다. 이러한 결과를 보려면 숨긴 결과 보기 토글을 끕니다.
각 결과에 대해 다음을 수행할 수 있습니다:
- 검출에 대한 자세한 정보 확인.
- 검출을 위한 이슈 생성.
- 검출을 기각.
병합 요청의 브랜치를 대상 브랜치로 병합하면 모든 보고된 결과가 취약성 보고서에 포함됩니다. 기본 브랜치에서 실행된 파이프라인의 스캔 결과는 파이프라인이 완료된 후 통합됩니다. 통합 내용은 다음 표와 같습니다:
기존 취약점 상태 | 파이프라인에서 기각됨? | 새로운 취약점 상태 |
---|---|---|
모든 상태 | 예 | 기각 |
기각된 상태 | 모든 상태 | 기각 |
확인된 상태 | 아니요 | 확인됨 |
처리 필요 (검출됨) | 아니요 | 처리 필요 (검출됨) |
해결됨 | 아니요 | 처리 필요 (검출됨) |
N/A (새로운 취약점) | 아니요 | 처리 필요 (검출됨) |
차단 또는 불완전 상태의 파이프라인에서의 보안 보고서
- GitLab 16.10에서 도입되었으며,
include_manual_to_pipeline_completion
이라는 플래그로 제공됩니다. 기본적으로 활성화됩니다.
파이프라인 상태 | 파이프라인 완료 | 표시되는 취약점은? 1 |
---|---|---|
성공 | 완료 | ✅ 파이프라인의 모든 취약점 검출 내용 표시 |
실패 | 완료 | ✅ 작업 중 실패하지 않은 취약점 검출 내용 표시, ❌ 작업 중 실패한 작업의 취약점 검출 내용 표시하지 않음 |
차단 2 | 완료 | ✅ 파이프라인이 매뉴얼 작업에 차단되었더라도 모든 취약점 검출 내용 표시 |
각주:
- 본 결과는 병합 요청 보안 위젯, 파이프라인 보안 탭, 취약점 보고서 및 종속성 목록에 표시됩니다. 병합 요청이 기본 브랜치로 병합될 경우.
- 16.10 이전의 GitLab은 모든 파이프라인 작업이 완료된 후에만 스캔 결과를 수용했습니다. 16.10부터는 플랫폼이 매뉴얼 작업에 의해 차단된 경우에도 스캔 결과를 수용합니다.
결과 보유 기간
- GitLab 15.5에 도입되었습니다.
결과는 더 이상 사용할 수 없습니다:
- 관련 CI 작업 artifact가 만료될 때.
- 파이프라인이 생성된 후 90일이 지나면, 관련 CI 작업 artifact가 잠겨 있더라도 사용할 수 없게 됩니다.
결과를 보려면 다음 중 하나를 수행하세요:
- 새 파이프라인 실행.
- 관련 CI 작업 artifact를 사용할 수 있다면 다운로드.
참고: 이는 기본 브랜치에 존재하는 취약점에는 적용되지 않습니다.
결과 상태 변경
- GitLab 16.7에 도입되었습니다. 기본 설정으로 비활성화됨.
플래그:
자체 호스팅된 GitLab의 경우, 기본 설정으로 이 기능을 사용할 수 없습니다. 사용하려면 관리자가 pipeline_security_dashboard_graphql
라는 기능 플래그를 활성화할 수 있습니다.
GitLab.com 및 GitLab Dedicated의 경우, 이 기능을 사용할 수 없습니다.
결과 상태를 사용 안 함 또는 검토 필요로 변경하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인을 선택한 후 보안 탭을 선택합니다.
- 선택 사항:
- 하나 이상의 결과를 선택하려면 각 결과 옆의 확인란을 선택합니다.
- 페이지의 모든 결과를 선택하려면 테이블 머릿글 옆의 확인란을 선택합니다.
- 상태 설정 드롭다운 목록에서 원하는 상태를 선택합니다.
- 사용 안 함 상태를 선택하면 사용 안 함 사유 설정 드롭다운 목록에서 원하는 사유를 선택합니다.
- 의견 추가란에 의견을 제공할 수 있습니다. 사용 안 함 상태인 경우 의견이 필요합니다.
- 상태 변경을 선택합니다.
선택한 결과의 상태가 업데이트되고 보안 탭의 콘텐츠가 새로 고쳐집니다.
중복 처리 과정
파이프라인에 같은 유형의 여러 보안 보고서를 생성하는 작업이 포함된 경우 동일한 취약성 결과가 여러 보고서에 있을 수 있습니다. 이러한 중복은 범위를 늘리기 위해 다양한 스캐너를 사용할 때 흔하지만, 단일 보고서에서도 발생할 수 있습니다. 중복 처리 과정을 통해 취약성 스캔 범위를 최대화하고 관리해야 하는 결과의 수를 줄일 수 있습니다.
다음 경우 하나의 결과가 다른 결과와 중복되는 것으로 간주됩니다: 스캔 유형, 위치, 및 하나 이상의 식별자.
스캔 유형은 각각이 취약성의 위치에 대한 자체 정의를 가지고 있기 때문에 일치해야 합니다. 예를 들어, 정적 분석기는 파일 경로와 라인 번호를 찾을 수 있지만, 컨테이너 스캔 분석기는 이미지 이름을 사용합니다.
식별자를 비교할 때, GitLab은 중복 처리 중에 CWE
와 WASC
를 비교하지 않습니다. 이는 이러한 식별자가 취약점 그룹을 분류하는 데 사용되는 “유형 식별자”이기 때문입니다. 이러한 식별자를 포함하는 것은 많은 결과가 잘못된 중복으로 간주되는 것을 의미합니다. 식별자가 일치하지 않는 경우 두 결과는 고유한 것으로 간주됩니다.
중복된 결과 세트에서 첫 번째 결과가 유지되고 나머지는 건너뜁니다. 보안 보고서는 알파벳 순서로 파일 경로를 처리하며, 결과는 보고서에 나타나는 순서대로 순차적으로 처리됩니다.
중복 처리 예시
- 예시 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
및 gitlab/ee/lib/gitlab/ci/reports/security/locations
에서 찾을 수 있습니다.
예를 들어, container_scanning
유형의 경우 위치는 Docker 이미지 이름만을 사용하여 정의됩니다. 그러나 이미지 태그에 하나 이상의 문자가 포함되어 있거나 8자보다 길 경우 중복으로 간주되지 않습니다. 따라서 registry.gitlab.com/group-name/project-name/image1:12345019:libcrypto3
및 registry.gitlab.com/group-name/project-name/image1:libcrypto3
은 동일하게 처리되지만 registry.gitlab.com/group-name/project-name/image1:v19202021:libcrypto3
및 registry.gitlab.com/group-name/project-name/image1:libcrypto3
은 다르게 간주됩니다.