SAST 분석기
- 이전에는 GitLab Ultimate에서 GitLab Free로 이동했습니다. 13.3에서.
정적 응용 프로그램 보안 테스트(SAST)는 분석기를 사용하여 소스 코드의 취약점을 탐지합니다. 각 분석기는 스캐너(서드파티 코드 분석 도구)를 감싸는 래퍼입니다.
분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 발행됩니다. 분석기의 일관된 성능을 보장하기 위해 최소 4GB RAM을 권장합니다.
SAST 기본 이미지는 GitLab에서 유지되지만, 사용자 정의 이미지를 통합할 수도 있습니다.
각 스캐너에 대해 분석기는 다음을 수행합니다:
- 감지 논리 노출.
- 실행을 처리함.
- 표준 형식으로 출력 변환.
공식 분석기
SAST는 다음의 공식 분석기를 지원합니다:
- 고급 SAST
-
kubesec
(Kubesec) -
pmd-apex
(PMD (Apex only)) -
semgrep
(Semgrep) -
sobelow
(Sobelow (Elixir Phoenix)) -
spotbugs
(SpotBugs with the Find Sec Bugs plugin (Ant, Gradle and wrapper, Grails, Maven and wrapper, SBT))
다음의 GitLab 분석기는 지원 종료 상태이며 업데이트를 받지 않습니다. Semgrep 기반 분석기에 의해 GitLab 관리 규칙으로 대체되었습니다.
-
bandit
(Bandit); GitLab 15.4에서 지원 종료. -
brakeman
(Brakeman); GitLab 17.0에서 지원 종료. -
eslint
(ESLint (JavaScript and 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-audit) -
security-code-scan
(Security Code Scan (.NET)); GitLab 16.0에서 지원 종료.
GitLab 고급 SAST 분석기
GitLab 고급 SAST 분석기는 Python, Go, Java, JavaScript 및 C#의 교차 기능 및 교차 파일 오염 분석을 통해 보다 넓고 정확한 정적 분석을 제공합니다.
기본적으로 활성화되어 있지 않습니다. 활성화하려면 GitLab 고급 SAST 페이지의 지침을 따라주십시오.
SAST 분석기 기능
분석기가 일반적으로 사용 가능하려면 최소한 다음을 지원하는 것이 기대됩니다:
- 사용자 정의 구성
- 사용자 정의 규칙 세트
- 프로젝트 스캔
- 다중 프로젝트 지원
- 오프라인 지원
- JSON 보고 형식으로 결과 출력
- SELinux 지원
후 분석기
후 분석기는 분석기의 보고서 출력을 향상시킵니다. 후 분석기는 보고서 내용을 직접 수정하지 않습니다. 대신 다음과 같은 추가 속성으로 결과를 향상시킵니다:
- CWE.
- 위치 추적 필드.
Semgrep 기반 스캔으로의 전환
GitLab 고급 SAST 분석기에 추가하여, GitLab은 다중 언어를 지원하는 Semgrep 기반 분석기를 제공합니다. GitLab은 분석기를 유지하고 이를 위한 탐지 규칙을 작성합니다. 이러한 규칙은 이전 릴리스에서 사용된 언어별 분석기를 대체합니다.
취약점 번역
Vulnerability Management 시스템은 가능한 경우 이전 분석기의 취약점을 새로운 Semgrep 기반 발견으로 자동으로 이동합니다. Advanced SAST로의 번역이 필요한 경우 Advanced SAST 문서를 참조하세요.
이러한 경우, 시스템은 각 분석기의 취약점을 단일 레코드로 결합합니다.
그러나 취약점이 일치하지 않을 수 있습니다:
- 새 Semgrep 기반 규칙이 이전 분석기와 다르게 취약점을 다른 위치에서 감지하는 경우 또는 다른 방식으로 감지하는 경우
- 이전에 SAST 분석기를 비활성화했던 경우 이는 각 취약점에 필요한 식별자가 기록되지 못하도록하여 자동 번역을 방해할 수 있습니다.
취약점이 일치하지 않는 경우:
- 기존 취약점은 취약점 보고서에서 “더 이상 감지되지 않음”으로 표시됩니다.
- 그런 다음 Semgrep 기반 발견을 기반으로 새 취약점이 생성됩니다.
분석기 사용자 정의
.gitlab-ci.yml
파일에서 CI/CD 변수를 사용하여 분석기의 동작을 사용자 정의할 수 있습니다.
사용자 지정 Docker 미러 사용
분석기 이미지를 GitLab 레지스트리 대신 사용자 정의 Docker 레지스트리에 호스팅할 수 있습니다.
필수 구성 요소:
- 사용자 지정 Docker 레지스트리는 모든 공식 분석기 이미지를 제공해아 합니다.
참고: 이 변수는 SAST 분석기뿐만 아니라 모든 보안 분석기에 영향을 미칩니다.
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 분석기를 모두 비활성화하여 사용자 지정 분석기들만 활성화할 수 있습니다.
모든 기본 분석기를 비활성화하려면 .gitlab-ci.yml
파일에서 CI/CD 변수 SAST_DISABLED
를 "true"
로 설정하세요.
예:
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 구성에서 job을 정의하여 사용자 지정 분석기를 제공할 수 있습니다.
기본 분석기와 일관성을 유지하기 위해 사용자 지정 SAST job에는 접미사 -sast
를 추가해야 합니다.
GitLab으로 사용자 정의 보안 스캐너를 통합하는 자세한 내용은 Security Scanner Integration을 참조하세요.
사용자 지정 분석기 예시
이 예시는 Docker 이미지 my-docker-registry/analyzers/csharp
를 기반으로 스캔 작업을 추가하는 방법을 보여줍니다. 이 작업은 /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