SAST 분석기
- 이동됨 GitLab Ultimate에서 GitLab Free로 13.3에서.
정적 애플리케이션 보안 테스트(SAST)는 분석기를 사용하여
소스 코드의 취약점을 감지합니다. 각 분석기는 스캐너라는 서드파티 코드 분석 도구를 감싸는 래퍼입니다.
분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 게시됩니다.
분석기의 일관된 성능을 보장하기 위해 최소 4GB의 RAM을 권장합니다.
SAST 기본 이미지는 GitLab에서 유지하지만,
자신의 사용자 정의 이미지를 통합할 수도 있습니다.
각 스캐너에 대해 분석기는:
- 탐지 논리를 노출합니다.
- 실행을 처리합니다.
- 출력을 표준 형식으로 변환합니다.
공식 분석기
SAST는 다음과 같은 공식 분석기를 지원합니다:
- Advanced SAST
-
kubesec
(Kubesec) -
pmd-apex
(PMD (Apex 전용)) -
semgrep
(Semgrep) -
sobelow
(Sobelow (Elixir Phoenix)) -
spotbugs
(SpotBugs와 Find Sec Bugs 플러그인 (Ant, Gradle 및 래퍼, Grails, Maven 및 래퍼, SBT))
다음 GitLab 분석기는 지원 종료 상태에 도달하여 업데이트를 받지 않습니다.
이들은 GitLab 관리 규칙이 있는 Semgrep 기반 분석기로 대체되었습니다.
-
bandit
(Bandit); 지원 종료 GitLab 15.4에서. -
brakeman
(Brakeman); 지원 종료 GitLab 17.0에서. -
eslint
(ESLint (JavaScript 및 React)); 지원 종료 GitLab 15.4에서. -
flawfinder
(Flawfinder); 지원 종료 GitLab 17.0에서. -
gosec
(Gosec); 지원 종료 GitLab 15.4에서. -
mobsf
(MobSF); 지원 종료 GitLab 17.0에서. -
nodejs-scan
(NodeJsScan); 지원 종료 GitLab 17.0에서. -
phpcs-security-audit
(PHP CS 보안 감사) -
security-code-scan
(Security Code Scan (.NET)); 지원 종료 GitLab 16.0에서.
GitLab Advanced SAST 분석기
Status: Experiment
GitLab Advanced SAST 분석기는 Python, Go, Java, JavaScript 및 C#에 대한 더 넓고 정확한 정적 분석을 제공합니다.
특히 교차 기능 및 교차 파일 오염 분석을 통해 제공됩니다.
기본적으로 활성화되어 있지 않습니다. 활성화하려면 GitLab Advanced SAST 페이지의 지침을 따르십시오.
SAST 분석기 기능
분석기가 일반에 제공되는 것으로 간주되기 위해서는 최소한 다음 기능을 지원해야 합니다:
후속 분석기
후속 분석기는 분석기에 의해 생성된 보고서 출력을 풍부하게 합니다. 후속 분석기는 보고서 내용을 직접 수정하지 않습니다. 대신, 추가 속성으로 결과를 향상시킵니다. 여기에는 다음이 포함됩니다:
- CWEs.
- 위치 추적 필드.
Semgrep 기반 스캔으로의 전환
GitLab Advanced SAST 분석기 외에도 GitLab은 여러 언어를 포함하는 Semgrep 기반 분석기를 제공합니다.
GitLab은 분석기를 유지 관리하고 해당 탐지 규칙을 작성합니다.
이 규칙들은 이전 릴리스에서 사용되었던 언어별 분석기를 대체합니다.
취약점 변환
취약점 관리 시스템은 가능할 때마다 구형 분석기에서 새로운 Semgrep 기반 발견으로 취약점을 자동으로 이동합니다. Advanced SAST로의 변환에 대해서는 Advanced SAST 문서를 참조하십시오.
이 경우 시스템은 각 분석기에서 취약점을 하나의 레코드로 결합합니다.
그러나 취약점이 일치하지 않을 수 있습니다:
- 새로운 Semgrep 기반 규칙이 이전 분석기와 다른 위치 또는 다른 방식으로 취약점을 감지하는 경우.
- 이전에 SAST 분석기를 비활성화한 경우.
이는 각 취약점에 필요한 식별자가 기록되는 것을 방지하여 자동 변환을 방해할 수 있습니다.
취약점이 일치하지 않으면:
- 원래 취약점은 취약점 보고서에서 “더 이상 감지되지 않음”으로 표시됩니다.
- 그러면 Semgrep 기반 발견에 따라 새로운 취약점이 생성됩니다.
분석기 사용자 정의
.gitlab-ci.yml
파일의 CI/CD 변수를 사용하여 분석기의 동작을 사용자 정의하세요.
사용자 정의 Docker 미러 사용
GitLab 레지스트리 대신 사용자 정의 Docker 레지스트리를 사용하여 분석기 이미지를 호스팅할 수 있습니다.
전제 조건:
- 사용자 정의 Docker 레지스트리는 모든 공식 분석기용 이미지를 제공해야 합니다.
GitLab이 사용자 정의 Docker 레지스트리에서 분석기 이미지를 다운로드하도록 하려면 SECURE_ANALYZERS_PREFIX
CI/CD 변수를 사용하여 접두사를 정의합니다.
예를 들어, 다음은 SAST가 registry.gitlab.com/security-products/semgrep
대신 my-docker-registry/gitlab-images/semgrep
를 끌어오도록 지시합니다:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SECURE_ANALYZERS_PREFIX: my-docker-registry/gitlab-images
모든 기본 분석기 비활성화
모든 기본 SAST 분석기를 비활성화하고 커스텀 분석기만 활성화할 수 있습니다.
모든 기본 분석기를 비활성화하려면 CI/CD 변수 SAST_DISABLED
를 "true"
로 설정하세요.
.gitlab-ci.yml
파일에서 설정합니다.
예시:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SAST_DISABLED: "true"
특정 기본 분석기 비활성화
분석기는 감지된 소스 코드 언어에 따라 자동으로 실행됩니다. 그러나 선택한 분석기를 비활성화할 수 있습니다.
선택한 분석기를 비활성화하려면 CI/CD 변수 SAST_EXCLUDED_ANALYZERS
를 사용하여 실행을 방지할 분석기를 나열한 쉼표로 구분된 문자열로 설정하세요.
예를 들어, spotbugs
분석기를 비활성화하려면:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SAST_EXCLUDED_ANALYZERS: "spotbugs"
커스텀 분석기
CI/CD 구성에서 작업을 정의하여 자신의 분석기를 제공할 수 있습니다. 기본 분석기와의 일관성을 위해 커스텀 SAST 작업에 접미사 -sast
를 추가해야 합니다.
GitLab에 커스텀 보안 스캐너를 통합하는 방법에 대한 자세한 내용은 Security Scanner Integration을 참조하세요.
예시 커스텀 분석기
이 예시는 my-docker-registry/analyzers/csharp
Docker 이미지를 기반으로 하는 스캔 작업을 추가하는 방법을 보여줍니다. 이 작업은 /analyzer run
스크립트를 실행하고 SAST 보고서 gl-sast-report.json
을 출력합니다.
다음 내용을 .gitlab-ci.yml
파일에 정의하세요:
csharp-sast:
image:
name: "my-docker-registry/analyzers/csharp"
script:
- /analyzer run
artifacts:
reports:
sast: gl-sast-report.json