- 파이프라인의 취약점 보기
- 스캔 상세 정보
- 보안 스캔 결과 다운로드
- 스캔 결과
- 차단되거나 불완전한 상태의 파이프라인에서의 보안 보고서
- 발견 사항 보존 기간
- 발견 사항 상태 변경
- 중복 제거 프로세스
- 문제 해결
파이프라인의 취약점
모든 활성화된 보안 분석기는 파이프라인에서 실행되며 결과를 아티팩트로 출력합니다. 이러한 아티팩트는 중복 제거를 포함하여 처리되며, 결과는 파이프라인 보안 탭에 나열됩니다. 파이프라인에서 취약성 발견을 식별함으로써 위험을 사전에 대응할 수 있습니다.
다음 기준이 파이프라인 보안 탭에 적용됩니다:
- 성공적인 보안 스캔 작업의 결과만 표시됩니다. 예를 들어, 파이프라인에 SAST 및 DAST 작업이 포함되어 있지만 DAST 작업이 실패하면 SAST 결과만 표시됩니다.
- 발견된 사항은 만료 기간이 있습니다. 만료된 발견 사항은 파이프라인 보안 탭에 표시되지 않습니다. 자세한 내용은 발견의 보존 기간을 참조하세요.
파이프라인의 취약점 보기
파이프라인의 취약점을 보려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인을 선택합니다.
- 보안 탭을 선택합니다.
스캔 상세 정보
스캔 상세 정보 섹션은 파이프라인에서의 취약성 발견 사항과 소스 보고서의 요약을 보여줍니다.
GitLab은 파이프라인에 존재하는 각 스캔 유형 아티팩트에 대한 정보를 한 행으로 표시합니다.
보안 스캔 결과 다운로드
보안 스캐너의 유형에 따라 다음을 다운로드할 수 있습니다:
- 보안 스캐너 보고서를 포함하는 JSON 아티팩트.
- 보안 스캐너가 스캔한 URL 및 엔드포인트를 포함하는 CSV 파일.
보안 스캔 출력을 다운로드하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 파이프라인을 선택합니다.
- 파이프라인을 선택합니다.
- 보안 탭을 선택합니다.
-
스캔 상세 정보에서 결과 다운로드를 선택합니다:
- 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
이라는 플래그와 함께. 기본적으로 활성화되어 있습니다.
파이프라인 상태 | 파이프라인 완료 | 어떤 취약점이 표시됩니까? |
---|---|---|
성공 | 완료 | ✅ 파이프라인에 대한 모든 취약점 발견 사항이 표시됩니다. |
실패 | 완료 | ✅ 실패하지 않은 작업에 대한 취약점 발견 사항이 표시됩니다, ❌ 실패한 작업에 대한 취약점 발견 사항은 표시되지 않습니다. |
차단됨 | 완료 | ✅ 파이프라인이 수동 작업으로 차단된 경우에도 모든 취약점 발견 사항이 표시됩니다. |
발견 사항 보존 기간
- GitLab 15.5에서 도입됨.
발견 사항은 더 이상 사용 불가능합니다:
- 관련 CI 작업 아티팩트가 만료될 때.
- 파이프라인이 생성된 후 90일이 지나면, 관련 CI 작업 아티팩트가 잠겨 있어도 마찬가지입니다.
발견 사항을 보려면, 다음 중 하나를 수행하십시오:
- 새 파이프라인을 실행합니다.
- 관련 CI 작업 아티팩트를 다운로드합니다(사용 가능한 경우).
참고: 이것은 기본 브랜치에 존재하는 취약점에 적용되지 않습니다.
발견 사항 상태 변경
발견 사항의 상태를 해제 또는 분류 필요로 변경하려면:
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
-
빌드 > 파이프라인을 선택합니다.
-
파이프라인을 선택하고 보안 탭을 선택합니다.
- 선택하려면:
- 하나 이상의 발견 사항을 선택하려면 각 발견 사항 옆의 체크박스를 선택합니다.
- 페이지의 모든 발견 사항을 선택하려면 테이블 헤더의 체크박스를 선택합니다.
-
상태 설정 드롭다운 목록에서 원하는 상태를 선택합니다.
-
해제 상태가 선택된 경우, 해제 사유 설정 드롭다운 목록에서 원하는 이유를 선택합니다.
-
댓글 추가 입력란에 댓글을 제공할 수 있습니다. 해제 상태의 경우, 댓글이 필요합니다.
- 상태 변경을 선택합니다.
선택한 발견 사항의 상태가 업데이트되고 보안 탭의 내용이 새로 고쳐집니다.
중복 제거 프로세스
파이프라인에 동일한 유형의 보안 보고서를 여러 개 생성하는 작업이 포함된 경우, 동일한 취약점 발견 사항이 여러 보고서에 존재할 가능성이 있습니다. 이러한 중복은 다양한 스캐너를 사용하여 커버리지를 늘릴 때 일반적이지만, 단일 보고서에서도 존재할 수 있습니다. 중복 제거 프로세스를 통해 취약점 스캔 커버리지를 극대화하면서 관리해야 할 발견 사항의 수를 줄일 수 있습니다.
발견 사항은 스캔 유형, 위치 및 하나 이상의 식별자가 동일할 때 다른 발견 사항의 중복으로 간주됩니다.
스캔 유형은 일치해야 합니다. 각 스캔 유형은 취약점의 위치를 정의하는 고유한 방식이 있습니다. 예를 들어, 정적 분석기는 파일 경로와 줄 번호를 찾을 수 있지만, 컨테이너 스캔 분석기는 이미지 이름을 사용합니다.
식별자를 비교할 때, 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
는 다르게 간주됩니다.
문제 해결
무시된 취약점이 때때로 여전히 보임
GitLab 16.8 및 이전 버전의 경우 무시된 취약점이 때때로 여전히 보이는 경우가 있습니다.
이는 GitLab 16.9 및 이후 버전으로 업그레이드하여 해결할 수 있습니다.
보고서 파싱 및 스캔 수집 오류
일부 보안 스캔은 보고서 파싱 또는 스캔 수집과 관련하여 파이프라인의 Security 탭에서 오류를 발생시킬 수 있습니다. 사용자로부터 프로젝트 복사본을 얻는 것이 불가능한 경우, 스캔에서 생성된 보고서를 사용하여 오류를 재현할 수 있습니다.
오류를 재현하려면:
-
사용자로부터 보고서 복사본을 받습니다. 이 예에서는
gl-sast-report.json
입니다. -
프로젝트를 생성합니다.
-
보고서를 저장소에 커밋합니다.
-
.gitlab-ci.yml
파일을 추가하고, 해당 작업의 아티팩트로 보고서를 포함시킵니다.예를 들어, SAST 작업으로 인해 발생한 오류를 재현하려면:
sample-job: script: - echo "테스트 보고서" artifacts: reports: sast: gl-sast-report.json
-
파이프라인이 완료된 후, 파이프라인의 Security 탭에서 오류 내용을 확인합니다.
sast: gl-sast-report.json
을 해당 스캔에 의해 생성된 올바른 JSON 보고서 파일 이름과 함께 적절한 artifacts:reports
유형으로 교체할 수 있습니다.