탐지
GitLab v19.5요약
소프트웨어 개발 수명 주기 전반에 걸쳐 프로젝트 리포지터리와 애플리케이션 동작에서 취약점을 탐지합니다. 개발 과정에서 취약점 위험을 관리하는 데 도움이 되도록 다음이 제공됩니다. 개발 이외 단계에서 취약점을 관리하는 데는 다음이 도움이 됩니다.
소프트웨어 개발 수명 주기 전반에 걸쳐 프로젝트 리포지터리와 애플리케이션 동작에서 취약점을 탐지합니다.
개발 과정에서 취약점 위험을 관리하는 데 도움이 되도록 다음이 제공됩니다.
- 브랜치에 코드 변경 사항을 푸시하면 보안 스캐너가 실행됩니다.
- 브랜치에서 탐지된 취약점의 상세 내용을 확인할 수 있습니다. 개발자는 이 시점에 취약점을 조치하여 프로덕션에 도달하기 전에 수정할 수 있습니다.
- 선택적으로 취약점이 포함된 머지 리퀘스트에 추가 승인을 적용할 수 있습니다. 자세한 내용은 머지 리퀘스트 승인 정책을 참고합니다.
개발 이외 단계에서 취약점을 관리하는 데는 다음이 도움이 됩니다.
- 보안 스캔을 예약하거나 수동으로 실행할 수 있습니다.
- 기본 브랜치에서 탐지된 취약점은 취약점 리포트에 표시됩니다. 이 리포트를 사용해 취약점을 분류하고 분석하며 조치합니다.
Security Review Flow는 머지 리퀘스트에서 비즈니스 로직 취약점을 분석하며 CI/CD 기반 보안 스캔을 보완합니다.
보안 스캔#
보안 스캔을 최대한 활용하려면 다음을 이해하는 것이 중요합니다.
- 보안 스캔을 트리거하는 방법.
- 애플리케이션 또는 리포지터리의 어떤 부분이 스캔되는지.
- 어떤 스캐너가 실행될지 결정하는 요소.
- 보안 스캔이 진행되는 방식.
트리거#
CI/CD 파이프라인의 보안 스캔은 프로젝트 리포지터리에 변경 사항을 푸시하면 기본적으로 트리거됩니다.
다음 방법으로도 보안 스캔을 실행할 수 있습니다.
- CI/CD 파이프라인을 수동으로 실행.
- 스캔 실행 정책을 사용해 보안 스캔 예약.
- DAST에 한해 온디맨드 DAST 스캔을 수동으로 실행하거나 예약해 실행.
- SAST에 한해 VS Code용 GitLab 확장 프로그램을 사용해 스캔 실행.
감지 범위#
프로젝트 리포지터리를 스캔하고 애플리케이션 동작을 테스트해 취약점을 찾습니다.
- 리포지터리 스캔은 프로젝트 리포지터리의 취약점을 탐지할 수 있습니다. 대상에는 애플리케이션 소스 코드와 애플리케이션이 의존하는 라이브러리·컨테이너 이미지가 포함됩니다.
- 애플리케이션과 그 API에 대한 행동 테스팅은 런타임에만 발생하는 취약점을 탐지할 수 있습니다.
리포지터리 스캔#
프로젝트 리포지터리에는 소스 코드, 의존성 선언, 인프라 정의가 포함될 수 있습니다. 리포지터리 스캔은 이들 각각에서 취약점을 탐지할 수 있습니다.
리포지터리 스캔 도구는 다음과 같습니다.
- 정적 애플리케이션 보안 테스트(SAST): 소스 코드에서 취약점을 분석합니다.
- Infrastructure as Code(IaC) 스캔: 애플리케이션 인프라 정의에서 취약점을 탐지합니다.
- 시크릿 탐지: 시크릿을 탐지하고 리포지터리에 커밋되지 않도록 차단합니다.
- 의존성 스캔: 애플리케이션의 의존성과 컨테이너 이미지에서 취약점을 탐지합니다.
행동 테스팅#
행동 테스팅에는 알려진 취약점과 예기치 않은 동작을 테스트할 수 있도록 배포 가능한 애플리케이션이 필요합니다.
행동 테스팅 도구는 다음과 같습니다.
- 동적 애플리케이션 보안 테스트(DAST): 알려진 공격 경로에 대해 애플리케이션을 테스트합니다.
- API 보안 테스트: 알려진 공격과 입력 취약점에 대해 애플리케이션 API를 테스트합니다.
- 커버리지 기반 퍼즈 테스트: 예기치 않은 동작이 있는지 애플리케이션을 테스트합니다.
스캐너 선택#
보안 스캐너는 다음 중 한 가지 방법으로 프로젝트에 활성화됩니다.
- 직접 또는 AutoDevOps를 사용해 스캐너의 CI/CD 템플릿을
.gitlab-ci.yml파일에 추가합니다. - 스캔 실행 정책, 파이프라인 실행 정책, 또는 컴플라이언스 프레임워크를 사용해 스캐너를 적용합니다. 이러한 적용은 프로젝트에 직접 설정하거나 프로젝트의 상위 그룹에서 상속할 수 있습니다.
자세한 내용은 보안 구성을 참고합니다.
보안 스캔 프로세스#
보안 스캔 프로세스는 다음과 같습니다.
-
CI/CD job 기준에 따라, 활성화되어 있고 파이프라인에서 실행되도록 지정된 스캐너가 별도의 job으로 실행됩니다.
성공한 각 job은 하나 이상의 보안 리포트를 job 아티팩트로 출력합니다. 이 리포트에는 이전에 발견되었는지, 무시되었는지, 새로 발견되었는지와 무관하게 브랜치에서 탐지된 모든 취약점의 상세 내용이 담깁니다.
-
수동 job을 포함한 모든 job이 끝나면 결과를 다운로드하거나 확인할 수 있습니다.
보안 스캔 결과에 대한 자세한 내용은 보안 스캔 결과를 참고합니다.
CI/CD 보안 job 기준#
CI/CD 파이프라인의 보안 스캔 job은 다음 기준에 따라 결정됩니다.
-
보안 스캔 템플릿 포함 여부
보안 스캔 job의 선택은 우선 어떤 템플릿이 포함되었는지, 또는 정책이나 컴플라이언스 프레임워크로 어떤 템플릿이 적용되었는지에 따라 결정됩니다.
보안 스캔은 브랜치 파이프라인에서 기본적으로 실행됩니다. 머지 리퀘스트 파이프라인에서 보안 스캔을 실행하려면 별도로 활성화해야 합니다.
-
규칙 평가
각 템플릿에는 분석기 실행 여부를 결정하는 규칙이 정의되어 있습니다.
예를 들어 일부 분석기는 리포지터리에서 특정 유형의 파일이 감지된 경우에만 실행됩니다.
-
분석기 로직
템플릿의 규칙에 따라 job을 실행하기로 결정되면 템플릿에 지정된 파이프라인 Stage에 job이 생성됩니다. 다만 각 분석기에는 분석기 자체를 실행할지 결정하는 고유한 로직이 있습니다.
예를 들어 의존성 스캔이 기본 탐색 깊이에서 지원되는 파일을 감지하지 못하면 분석기는 실행되지 않고 아티팩트도 출력되지 않습니다.
job은 취약점을 찾지 못하더라도 스캔을 완료하면 통과합니다. 유일한 예외는 커버리지 퍼징으로,
발견 사항이 확인되면 실패합니다. 모든 job은 전체 파이프라인을 실패시키지 않도록 실패가
허용되어 있습니다. job의
allow_failure 설정은 변경하지 않습니다. 변경하면 전체
파이프라인이 실패합니다.
데이터 개인 정보#
GitLab은 소스 코드를 처리하고 GitLab Runner에서 로컬로 분석을 수행합니다. GitLab 인프라(서버와 러너) 외부로는 어떤 데이터도 전송되지 않습니다.
보안 분석기는 최신 시그니처, 규칙, 패치 집합을 내려받을 때만 인터넷에 접속합니다. 스캐너가 인터넷에 접속하지 않기를 원한다면 오프라인 환경 사용을 고려합니다.