- 요구 사항
- 지원되는 언어 및 프레임워크
- 지원 중단된 분석기
- 다중 프로젝트 지원
- 잘못된 긍정적인 감지
- 고급 취약점 추적
- 자동 취약점 해결
- 지원되는 배포
- 각 티어별 기능 요약
- 출력
- SAST 결과 보기
- 스캐너 기여
- 구성
- 오프라인 환경에서 SAST 실행
정적 애플리케이션 보안 테스트 (SAST)
GitLab CI/CD를 사용하는 경우 정적 애플리케이션 보안 테스트 (SAST)로 소스 코드에서 알려진 취약점을 확인할 수 있습니다. SAST 분석기를 모든 GitLab 티어에서 실행할 수 있습니다. 분석기는 작업 artifact로 JSON 형식의 보고서를 출력합니다.
GitLab Ultimate을 사용하면 SAST 결과를 다음과 같이 처리할 수 있습니다.
- 승인 워크플로에 사용합니다.
- 보안 대시보드에서 검토합니다.
자세한 내용은 티어별 기능 요약을 참조하십시오.
파이프라인은 SAST 및 DAST 스캔을 포함한 여러 작업으로 구성됩니다. 어떤 이유로든 작업이 실패하면 보안 대시보드에 SAST 스캐너 출력이 표시되지 않습니다. 예를 들어, SAST 작업이 완료되었지만 DAST 작업이 실패하면 보안 대시보드에 SAST 결과가 표시되지 않습니다. 실패 시 분석기는 종료 코드를 출력합니다.
요구 사항
SAST는 기본적으로 사용 가능한 test
단계에서 실행됩니다. .gitlab-ci.yml
파일에서 단계를 재정의하면 test
단계가 필요합니다.
기본적으로 SAST 작업을 실행하려면 도커 또는 쿠버네티스 실행기를 사용하는 GitLab Runner가 필요합니다. GitLab.com의 SaaS 러너를 사용하는 경우 기본적으로 이 기능이 활성화되어 있습니다.
노트:
GitLab SAST 분석기는 Linux amd64 환경의 도커에서만 실행됩니다. 이는 Docker 19.03.0
이 아님을 참고하십시오. 자세한 내용은 문제 해결 정보를 참조하십시오.
지원되는 언어 및 프레임워크
GitLab SAST는 다양한 프로그래밍 언어와 프레임워크를 스캔할 수 있습니다. SAST를 활성화하면 프로젝트가 여러 언어를 사용하더라도 적절한 세트의 분석기가 자동으로 실행됩니다.
SAST에서 언어 지원에 대한 우리의 계획에 대한 자세한 내용은 카테고리 방향 페이지를 참조하십시오.
언어 / 프레임워크 | 스캔에 사용되는 분석기 | 최소 지원 GitLab 버전 |
---|---|---|
.NET (모든 버전, C# 전용) | Semgrep 및 GitLab 관리형 규칙 | 15.4 |
Apex (Salesforce) | PMD | 12.1 |
C | Semgrep 및 GitLab 관리형 규칙 | 14.2 |
C/C++ | Flawfinder 2 | 10.7 |
Elixir (Phoenix) | Sobelow | 11.1 |
Go | Semgrep 및 GitLab 관리형 규칙 | 14.4 |
Groovy1 | SpotBugs와 find-sec-bugs 플러그인 | 11.3 (Gradle) & 11.9 (Maven, SBT) |
Helm 차트 | Kubesec | 13.1 |
Java (모든 빌드 시스템) | Semgrep 및 GitLab 관리형 규칙 | 14.10 |
Java (Android) | MobSF (상태: 베타) | 13.5 |
JavaScript | Semgrep 및 GitLab 관리형 규칙 | 13.10 |
Kotlin (Android) | MobSF (상태: 베타) | 13.5 |
Kotlin (일반)1 | SpotBugs와 find-sec-bugs 플러그인 | 13.11 |
Kubernetes 매니페스트 | Kubesec | 12.6 |
Node.js | NodeJsScan 2 | 11.1 |
Objective-C (iOS) | MobSF (상태: 베타) | 13.5 |
PHP | phpcs-security-audit 2 | 10.8 |
Python | Semgrep 및 GitLab 관리형 규칙 | 13.9 |
React | Semgrep 및 GitLab 관리형 규칙 | 13.10 |
Ruby | brakeman 2 | 13.9 |
Ruby on Rails | brakeman 2 | 10.3 |
Scala (모든 빌드 시스템) | Semgrep 및 GitLab 관리형 규칙 | 16.0 |
Scala 1 | SpotBugs와 find-sec-bugs 플러그인 | 11.0 (SBT) & 11.9 (Gradle, Maven) |
Swift (iOS) | MobSF (상태: 베타) | 13.5 |
TypeScript | Semgrep 및 GitLab 관리형 규칙 | 13.10 |
- 기반으로 하는 SpotBugs 분석기는 Gradle, Maven, 및 SBT를 지원합니다. 또한 Gradle 래퍼, Grails, 및 Maven 래퍼와 같은 변형과 함께 사용할 수 있습니다. 그러나 SpotBugs는 Ant 기반 프로젝트에 사용할 때 제한 사항이 있습니다. Ant 기반 Java 또는 Scala 프로젝트의 경우 Semgrep 기반 분석기를 사용해야 합니다.
- 이 분석기는 GitLab 16.9에서 폐기되었으며 17.0에서 제거될 예정입니다. Semgrep 분석기가 이를 대체할 예정입니다.
지원 중단된 분석기
GitLab은 아래 분석기에 대한 지원 중단에 이르렀습니다. 이러한 분석기는 Semgrep 기반 분석기에 의해 대체되었습니다.
언어 / 프레임워크 | 스캔에 사용된 분석기 | 최소 지원 GitLab 버전 | GitLab 버전 지원 종료 |
---|---|---|---|
.NET Core | Security Code Scan | 11.0 | 16.0 |
.NET Framework | Security Code Scan | 13.0 | 16.0 |
Go | Gosec | 10.7 | 15.4 |
Java | SpotBugs 및 find-sec-bugs 플러그인 | 10.6 (Maven), 10.8 (Gradle) 및 11.9 (SBT) | 15.4 |
Python | bandit | 10.3 | 15.4 |
React | ESLint react plugin | 12.5 | 15.4 |
JavaScript | ESLint security plugin | 11.8 | 15.4 |
TypeScript | ESLint security plugin | 11.9, 13.2부터 ESLint 사용 | 15.4 |
다중 프로젝트 지원
GitLab SAST는 여러 프로젝트를 포함하는 저장소를 스캔할 수 있습니다.
다음 분석기는 다중 프로젝트를 지원합니다:
- Bandit
- ESLint
- Gosec
- Kubesec
- NodeJsScan
- MobSF
- PMD
- Security Code Scan
- Semgrep
- SpotBugs
- Sobelow
Security Code Scan의 다중 프로젝트 지원 활성화
Security Code Scan의 다중 프로젝트 지원은 저장소의 루트에 솔루션(.sln
) 파일이 필요합니다. 솔루션 형식에 대한 자세한 내용은 Microsoft 참조 Solution (.sln
) file를 참조하세요.
잘못된 긍정적인 감지
- GitLab 14.2에서 Ruby에 도입되었습니다.
- Go에서는 GitLab 15.8에 도입되었습니다.
GitLab SAST는 다른 도구의 출력에서 특정 유형의 잘못된 긍정적인 결과를 식별할 수 있습니다. 이러한 결과는 취약점 보고서 및 취약점 페이지에 잘못된 긍정적으로 플래그 처리됩니다.
잘못된 긍정적인 감지는 지원되는 언어 및 분석기의 하위 집합에서 사용할 수 있습니다:
- Semgrep 기반 분석 사용 중 Go
- Brakeman 기반 분석 사용 중 Ruby
고급 취약점 추적
- GitLab 14.2에 도입되었습니다.
소스 코드는 변화가 많습니다. 개발자가 변경하면 소스 코드는 파일 내에서 이동하거나 파일 간에 이동할 수 있습니다. 보안 분석기는 이미 추적 중인 취약점을 취약점 보고서에서 프로덕티브 코드 단편에 연결하여 추적하고 수정할 수 있습니다. 코드 단편이 이동함에 따라 신뢰성 있게 추적되지 않으면 동일한 취약점이 다시 보고될 수 있어서 취약점 관리가 어려워집니다.
GitLab SAST는 고급 취약점 추적 알고리즘을 사용하여 동일한 취약점이 리팩터링 또는 관련 없는 변경으로 인해 파일 내에서 이동한 경우를 더 정확하게 식별합니다.
고급 취약점 추적은 지원되는 언어 및 분석기의 하위 집합에서 사용할 수 있습니다:
- C, Semgrep 기반 및 Flawfinder 분석기 사용 중
- C++, Flawfinder 분석기만 사용 중
- C#, Semgrep 기반 분석기만 사용 중
- Go, Semgrep 기반 분석기만 사용 중
- Java, mobsf, Semgrep 기반 및 SpotBugs 분석기 사용 중
- JavaScript, Semgrep 기반 및 NodeJS-Scan 분석기 사용 중
- PHP, phpcs-security-audit 분석기 사용 중
- Python, Semgrep 기반 분석기만 사용 중
- Ruby, Brakeman 기반 분석기 사용 중
더 많은 언어 및 분석기 지원은 이 Epic에서 추적됩니다.
더 많은 정보는 비밀 프로젝트 https://gitlab.com/gitlab-org/security-products/post-analyzers/tracking-calculator
에서 확인하세요. 이 프로젝트의 내용은 GitLab 팀 멤버에게만 제공됩니다.
자동 취약점 해결
- GitLab 15.9에 도입되었으며 프로젝트 수준의
sec_mark_dropped_findings_as_resolved
라는 플래그로 제공됩니다.- GitLab 15.10에서 기본으로 활성화됩니다. GitLab.com에서 해당 플래그를 비활성화해야 하는 경우 지원팀에 문의하십시오.
- GitLab 16.2에서 피처 플래그가 제거되었습니다.
GitLab SAST는 자동으로 취약점을 해결할 때 다음과 같습니다.
- 미리 정의된 규칙을 비활성화합니다(커스터마이즈된 규칙셋.md#미리-정의된-규칙-비활성화).
- 기본 규칙셋에서 규칙을 제거합니다.
자동 해결 기능은 Semgrep 기반 분석기에서만 사용할 수 있습니다. 취약점 관리 시스템은 자동으로 해결된 취약점에 대해 설명을 추가하여 취약점의 이력을 기록합니다.
규칙을 나중에 다시 활성화하면 해당 취약점은 분석 대상으로 다시 열립니다.
지원되는 배포
기본 스캐너 이미지는 사이즈와 유지 보수를 위해 Alpine 베이스 이미지로 구축됩니다.
FIPS 활성화된 이미지
- GitLab 14.10에 도입된 기능입니다.
GitLab은 FIPS 140 유효성 검사된 암호화 모듈을 사용하는 Red Hat UBI 베이스 이미지를 기반으로 한 이미지 버전을 제공합니다. FIPS 활성화된 이미지를 사용하려면 다음 중 하나를 수행할 수 있습니다.
-
SAST_IMAGE_SUFFIX
를-fips
로 설정합니다. - 기본 이미지 이름에
-fips
확장자를 추가합니다.
예시:
variables:
SAST_IMAGE_SUFFIX: '-fips'
include:
- template: Jobs/SAST.gitlab-ci.yml
FIPS 호환 이미지는 Semgrep 기반 분석기에만 사용할 수 있습니다.
경고:
FIPS 호환 방식으로 SAST를 사용하려면 다른 분석기가 실행되지 않도록 제외해야 합니다. Semgrep를 FIPS 활성화된 이미지에서 비루트 사용자와 함께 실행하려면 이미지에서 생성된 gitlab
사용자의 ID(https://gitlab.com/gitlab-org/security-products/analyzers/semgrep/-/blob/a5d822401014f400b24450c92df93467d5bbc6fd/Dockerfile.fips#L58)를 사용하여 runners.kubernetes.pod_security_context
아래의 run_as_user
속성을 업데이트해야 합니다.
각 티어별 기능 요약
다양한 GitLab 티어에서 사용 가능한 다른 기능은 다음 표와 같습니다.
기능 | Free 및 Premium에서 | Ultimate에서 |
---|---|---|
적절한 분석기로 코드 자동 스캔 | ||
SAST 스캐너 구성 | ||
SAST 설정 사용자 정의 | ||
SAST 출력 다운로드 | ||
병합 요청 위젯에 새로운 결과 표시 | ||
병합 요청 변경 사항에서 새로운 결과 표시 | ||
취약점 관리 | ||
보안 대시보드 접근 | ||
UI를 사용하여 SAST 구성 | ||
SAST 규칙셋 사용자 정의 | ||
잘못된 양성 결과 탐지 | ||
이동된 취약점 추적 |
출력
SAST는 gl-sast-report.json
파일을 작업 아티팩트로 출력합니다. 해당 파일에는 감지된 취약점의 모든 세부 정보가 포함되어 있습니다. GitLab 외부에서 처리하기 위해 파일을 다운로드할 수 있습니다.
더 많은 정보를 보려면 다음을 참조하세요:
SAST 결과 보기
SAST 보고서 파일은 GitLab에서 처리되며 세부 정보가 UI에 표시됩니다:
- 병합 요청 위젯
- 병합 요청 변경 보기
- 취약점 보고서
병합 요청 위젯
SAST 결과는 병합 요청 위젯 영역에 표시됩니다. 대상 브랜치에서의 보고서가 비교를 위해 사용 가능한 경우, 병합 요청 위젯에는 병합 요청에서 도입된 SAST 결과 및 결정이 표시됩니다.
병합 요청 변경 보기
- GitLab 16.6에서
sast_reports_in_inline_diff
이라는 플래그와 함께 도입되었습니다. 기본 설정에서 비활성화되어 있습니다.- GitLab 16.8에서 기본 설정으로 활성화됩니다.
- 기능 플래그가 제거되었습니다. GitLab 16.9에서.
SAST 결과는 병합 요청 변경 보기에 표시됩니다. SAST 문제가 포함된 라인은 gutter 옆에 있는 기호로 표시됩니다. 해당 기호를 선택하여 문제 목록을 볼 수 있으며, 문제를 선택하여 해당 세부 정보를 볼 수 있습니다.
스캐너 기여
보안 스캐너 통합 문서에서 GitLab에 다른 보안 스캐너를 통합하는 방법에 대해 설명합니다.
구성
SAST 스캔은 CI/CD 파이프라인에서 실행됩니다. GitLab 관리 CI/CD 템플릿을 파이프라인에 추가하면 올바른 SAST 분석기가 코드를 자동으로 스캔하고 SAST 보고서 아티팩트로 결과를 저장합니다.
프로젝트에 SAST를 구성하려면 다음을 수행할 수 있습니다:
- 자동 SAST를 사용하면 됩니다. 이는 Auto DevOps에서 제공됩니다.
- CI/CD YAML에서 SAST를 구성합니다.
- UI를 사용하여 SAST를 구성합니다.
스캔 실행을 강제하여 여러 프로젝트에 걸쳐 SAST를 사용하도록 설정할 수 있습니다.
CI/CD YAML에서 SAST를 구성
SAST를 활성화하려면 SAST.gitlab-ci.yml
템플릿을 포함하면 됩니다. 해당 템플릿은 GitLab 설치의 일부로 제공됩니다.
.gitlab-ci.yml
파일 하단에 다음을 복사하여 붙여넣습니다. 이미 include
줄이 있는 경우에는 아래에 있는 template
줄만 추가합니다.
include:
- template: Jobs/SAST.gitlab-ci.yml
포함된 템플릿은 CI/CD 파이프라인에서 SAST 작업을 생성하고 프로젝트의 소스 코드를 가능한 취약점에 대한 검사합니다.
결과는 SAST 보고서 아티팩트로 저장되어 나중에 다운로드하고 분석할 수 있습니다. 다운로드시 언제나 사용 가능한 가장 최신의 SAST 아티팩트를 받게 됩니다.
UI를 사용하여 SAST를 구성
기본 설정 또는 사용자 지정으로 UI를 사용하여 SAST를 활성화하고 구성할 수 있습니다. 사용할 수 있는 방법은 GitLab 라이선스 티어에 따라 다릅니다.
사용자 지정으로 SAST 구성
GitLab 16.2에서 UI에서 개별 SAST 분석기 구성 옵션을 제거했습니다.
참고:
구성 도구는 기존 .gitlab-ci.yml
파일이 없거나 최소한의 구성 파일이 있는 경우에 가장 잘 작동합니다. 복잡한 GitLab 구성 파일이 있을 경우에는 파싱되지 않을 수 있으며 오류가 발생할 수 있습니다.
사용자 지정으로 SAST를 활성화하고 구성하려면 다음을 수행합니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 보안 > 보안 구성을 선택합니다.
- 프로젝트에
.gitlab-ci.yml
파일이 없는 경우에는 정적 애플리케이션 보안 테스트(Static Application Security Testing, SAST) 행에서 SAST 활성화를 선택하고, 그렇지 않은 경우에는 SAST 구성을 선택합니다. -
사용자 정의 SAST 값을 입력합니다.
사용자 정의 값은
.gitlab-ci.yml
파일에 저장됩니다. SAST 구성 페이지에 없는 CI/CD 변수의 경우에는 값이 GitLab SAST 템플릿에서 상속됩니다. - 병합 요청 생성을 선택합니다.
- 병합 요청을 검토하고 병합합니다.
이제 파이프라인에 SAST 작업이 포함됩니다.
기본 설정만 사용하여 SAST 구성하기
참고:
구성 도구는 기존의 .gitlab-ci.yml
파일이 없거나 최소한의 구성 파일로 가장 잘 작동합니다. 복잡한 GitLab 구성 파일이 있는 경우 정상적으로 구문 분석되지 않을 수 있으며 오류가 발생할 수 있습니다.
기본 설정으로 SAST를 활성화하고 구성하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 보안 > 보안 구성을 선택합니다.
- SAST 섹션에서 병합 요청과 함께 구성을 선택합니다.
- SAST를 활성화하려면 병합 요청을 검토하고 병합합니다.
이제 파이프라인에는 SAST 작업이 포함됩니다.
SAST 작업 재정의
작업 정의를 재정의하려면(예: variables
, dependencies
, 또는 rules
와 같은 속성 변경), SAST 작업과 동일한 이름의 작업을 선언하여 재정의하세요. 그런 다음 이 템플릿 삽입 이후에 이러한 추가 키를 지정하세요. 예를 들어 spotbugs
분석기에 대해 FAIL_NEVER
를 활성화하는 경우:
include:
- template: Jobs/SAST.gitlab-ci.yml
spotbugs-sast:
variables:
FAIL_NEVER: 1
마이너 이미지 버전으로 고정
GitLab에서 관리되는 CI/CD 템플릿은 주 버전을 지정하고 해당 주 버전 내에서 최신 분석기 릴리스를 자동으로 가져옵니다.
특정 버전을 사용해야 할 수도 있습니다. 예를 들어, 나중에 릴리스에서의 회귀를 피해야 할 수 있습니다.
자동 업데이트 동작을 재정의하려면 SAST.gitlab-ci.yml
템플릿를 삽입한 후 CI/CD 구성 파일에서 SAST_ANALYZER_IMAGE_TAG
변수를 설정하세요.
이 변수를 특정 작업 내에서만 설정하세요. 최상위에서 설정하면 설정한 버전이 다른 SAST 분석기에 사용됩니다.
태그를 다음과 같이 설정할 수 있습니다:
-
3
과 같이 주 버전. 파이프라인은 해당 주 버전 내에서 릴리스된 모든 마이너 또는 패치 업데이트를 사용합니다. -
3.7
과 같이 마이너 버전. 파이프라인은 해당 마이너 버전 내에서 릴리스된 모든 패치 업데이트를 사용합니다. -
3.7.0
과 같이 패치 버전. 파이프라인은 어떠한 업데이트도 받지 않습니다.
다음 예제는 semgrep
분석기의 특정 마이너 버전과 brakeman
분석기의 특정 패치 버전을 사용합니다:
include:
- template: Jobs/SAST.gitlab-ci.yml
semgrep-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.7"
brakeman-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.1.1"
개인 저장소용 자격 증명 전달을 위한 CI/CD 변수 사용
일부 분석기는 분석 수행을 위해 프로젝트의 종속성을 다운로드해야 합니다. 따라서 이러한 종속성은 개인 Git 저장소에 저장될 수 있으며 다운로드를 위해 사용자 이름 및 암호와 같은 자격 증명이 필요합니다. 분석기에 따라 이러한 자격 증명은 사용자 정의 CI/CD 변수를 통해 제공할 수 있습니다.
개인 Go 저장소에 사용자 이름과 암호 전달을 위한 CI/CD 변수 사용
Go 프로젝트가 개인 모듈에 의존하는 경우 개인 프로젝트에서 모듈 가져오기에서 HTTPS를 통해 인증을 제공하는 방법을 참조하세요.
~/.netrc
를 통해 자격 증명을 지정하려면 다음과 같은 내용을 포함하는 before_script
를 제공합니다:
gosec-sast:
before_script:
- |
cat <<EOF > ~/.netrc
machine gitlab.com
login $CI_DEPLOY_USER
password $CI_DEPLOY_PASSWORD
EOF
개인 Maven 저장소에 사용자 이름과 암호 전달을 위한 CI/CD 변수 사용
개인 Maven 저장소가 로그인 자격 증명을 필요로 하는 경우, MAVEN_CLI_OPTS
CI/CD 변수를 사용할 수 있습니다.
개인 Maven 저장소 사용 방법에 대해 자세히 알아보세요 개인 Maven 저장소 사용하기.
Kubesec 분석기 활성화
Kubesec 분석기를 활성화하려면 SCAN_KUBERNETES_MANIFESTS
를 "true"
로 설정해야 합니다.
.gitlab-ci.yml
에서 다음을 정의하세요:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SCAN_KUBERNETES_MANIFESTS: "true"
사전 컴파일
대부분의 GitLab SAST 분석기는 소스 코드를 컴파일하지 않고 직접 스캔합니다. 그러나 기술적인 이유로 일부 분석기는 컴파일된 코드를 스캔해야 합니다.
기본적으로 이러한 분석기는 소스 코드를 스캔하기 전에 종속성을 가져와 코드를 컴파일하려고 시도합니다. 자동 컴파일은 다음과 같은 이유로 실패할 수 있습니다:
- 프로젝트가 사용자 정의 빌드 구성을 필요로 하는 경우.
- 분석기에 내장되지 않은 언어 버전을 사용하는 경우.
이러한 문제를 해결하기 위해 분석기의 컴파일 단계를 건너뛰고 파이프라인의 이전 단계에서 생성된 artefacts를 직접 제공할 수 있습니다. 이러한 전략을 _사전 컴파일_이라고 합니다.
사전 컴파일은 COMPILE
CI/CD 변수를 지원하는 분석기에 사용할 수 있습니다.
현재 지원되는 분석기 목록은 분석기 설정을 참조하세요.
사전 컴파일을 사용하려면:
- 프로젝트의 종속성을 프로젝트의 작업 디렉토리에 있는 디렉토리에 출력하고, 해당 디렉토리를 artifact 설정을 통해 저장합니다.
- 분석기에게 자동 컴파일을 비활성화하기 위해
COMPILE: "false"
CI/CD 변수를 제공합니다. - 분석기 작업의 종속성으로 컴파일 단계를 추가합니다.
분석기가 컴파일된 artefacts을 인식하도록 하려면 vendored 디렉토리의 경로를 명시적으로 지정해야 합니다.
이러한 설정은 분석기마다 다를 수 있습니다. Maven 프로젝트의 경우, MAVEN_REPO_PATH
를 사용할 수 있습니다.
사용 가능한 옵션의 전체 목록은 분석기 설정을 참조하세요.
다음 예제는 Maven 프로젝트를 사전 컴파일하고 SpotBugs SAST 분석기에 제공합니다:
stages:
- build
- test
include:
- template: Jobs/SAST.gitlab-ci.yml
build:
image: maven:3.6-jdk-8-slim
stage: build
script:
- mvn package -Dmaven.repo.local=./.m2/repository
artifacts:
paths:
- .m2/
- target/
spotbugs-sast:
dependencies:
- build
variables:
MAVEN_REPO_PATH: $CI_PROJECT_DIR/.m2/repository
COMPILE: "false"
artifacts:
reports:
sast: gl-sast-report.json
병합 요청 파이프라인에서 작업 실행하기
병합 요청 파이프라인에 보안 스캔 도구 사용하기을(를) 참조하세요.
사용 가능한 CI/CD 변수
SAST는 .gitlab-ci.yml
파일의 variables
매개변수를 사용하여 구성할 수 있습니다.
경고: GitLab 보안 스캔 도구의 모든 사용자 정의는 기본 브랜치로 변경을 병합하기 전에 병합 요청에서 테스트되어야 합니다. 이를 하지 않으면 예상치 못한 결과가 발생할 수 있으며, 이는 오검출의 수가 많아지는 등의 결과로 나타날 수 있습니다.
다음 예시는 SEARCH_MAX_DEPTH
변수를 10
으로 재정의하는 SAST 템플릿을 포함하고 있습니다. 템플릿은 파이프라인 설정 전에 평가되므로 변수의 마지막 언급이 우선권을 갖습니다.
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SEARCH_MAX_DEPTH: 10
사용자 정의 인증 기관
사용자 정의 인증 기관을 신뢰하려면 ADDITIONAL_CA_CERT_BUNDLE
변수를 SAST 환경에서 신뢰하고자 하는 CA 인증서 번들로 설정하면 됩니다. ADDITIONAL_CA_CERT_BUNDLE
값은 .gitlab-ci.yml 파일에서 이 값을 구성하려면 인증서의 경로가 필요한 file
로 또는 인증서의 텍스트 표현이 필요한 변수로 구성할 수 있습니다.
variables:
ADDITIONAL_CA_CERT_BUNDLE: |
-----BEGIN CERTIFICATE-----
MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
...
jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
-----END CERTIFICATE-----
ADDITIONAL_CA_CERT_BUNDLE
값은 또한 UI에서 사용자 정의 변수로 구성할 수 있으며, 인증서의 경로를 요구하는 file
또는 인증서의 텍스트 표현을 요구하는 변수로 구성할 수 있습니다.
도커 이미지
다음은 도커 이미지 관련 CI/CD 변수입니다.
CI/CD 변수 | 설명 |
---|---|
SECURE_ANALYZERS_PREFIX
| 기본 이미지를 제공하는 도커 레지스트리의 이름을 재정의합니다(프록시). 분석기 사용자 정의에 대해 자세히 알아보세요. |
SAST_EXCLUDED_ANALYZERS
| 실행되지 말아야 하는 기본 이미지의 이름입니다. 분석기 사용자 정의에 대해 자세히 알아보세요. |
SAST_ANALYZER_IMAGE_TAG
| 분석기 이미지의 기본 버전을 재정의합니다. 분석기 이미지 버전 고정에 대해 자세히 알아보세요. |
SAST_IMAGE_SUFFIX
| 이미지 이름에 추가되는 접미사입니다. -fips 로 설정하면, 스캔에 FIPS 활성화 이미지가 사용됩니다. GitLab 14.10에서 도입되었습니다.
|
취약점 필터
일부 분석기는 특정 임계값 이하의 취약점을 필터링할 수 있도록 합니다.
CI/CD 변수 | 기본 값 | 설명 |
---|---|---|
SAST_EXCLUDED_PATHS
| spec, test, tests, tmp
| 출력에서 취약점을 제외하려면 경로에 기반하여 취약점을 제외하세요. 쉼표로 구분된 패턴 리스트입니다. 패턴은 glob(지원되는 패턴에 대해서는 doublestar.Match 참조)일 수도 있고 파일 또는 폴더 경로(예: doc,spec )일 수도 있습니다. 상위 디렉토리도 패턴과 일치합니다. 빌드 도구에서 사용하는 임시 디렉토리는 오검출을 생성할 수 있으므로 제외해야 할 수도 있습니다. 경로를 제외하려면 기본 제외 경로를 복사하여 새로운 경로를 추가하세요. 기본 제외 경로를 지정하지 않으면 기본값이 재정의되며, SAST 스캔에서는 지정한 경로만 제외됩니다.
|
SEARCH_MAX_DEPTH
| Semgrep 20; 다른 모든 SAST 분석기 4 | SAST는 저장소를 검색하여 사용된 프로그래밍 언어를 감지하고 일치하는 분석기를 선택합니다. SEARCH_MAX_DEPTH 값을 설정하여 검색 단계를 얼마나 많은 디렉터리 수준으로 할지 지정할 수 있습니다. 분석기가 선택된 후에는 저장소 전체가 분석됩니다.
|
SAST_BANDIT_EXCLUDED_PATHS
| 스캔에서 제외할 경로의 쉼표로 구분된 목록입니다. Python의 fnmatch 구문을 사용합니다; 예시: '*/tests/*, */venv/*' . GitLab 15.4에서 제거됨
| |
SAST_BRAKEMAN_LEVEL
| 1 | 특정 신뢰 수준 이하의 Brakeman 취약점을 무시합니다. 정수, 1=낮음 3=높음. |
SAST_FLAWFINDER_LEVEL
| 1 | 특정 위험 수준 이하의 Flawfinder 취약점을 무시합니다. 정수, 0=위험이 없음, 5=높은 위험. |
SAST_GOSEC_LEVEL
| 0 | 특정 신뢰 수준 이하의 Gosec 취약점을 무시합니다. 정수, 0=정의되지 않음, 1=낮음, 2=중간, 3=높음. GitLab 15.4에서 제거됨 |
분석기 설정
일부 분석기는 CI/CD 변수로 사용자 정의할 수 있습니다.
CI/CD 변수 | 분석기 | 설명 |
---|---|---|
SCAN_KUBERNETES_MANIFESTS
| Kubesec | 쿠버네티스 매니페스트를 스캔하려면 "true" 로 설정합니다.
|
KUBESEC_HELM_CHARTS_PATH
| Kubesec |
kubesec 가 스캔하는 쿠버네티스 매니페스트를 생성하는 데 사용하는 Helm 차트의 선택적 경로입니다. 의존성이 정의되어 있으면 before_script 에서 helm dependency build 를 실행하여 필요한 의존성을 가져와야 합니다.
|
KUBESEC_HELM_OPTIONS
| Kubesec |
helm 실행 파일에 대한 추가적인 인수들입니다.
|
COMPILE
| Gosec, SpotBugs | 프로젝트 컴파일 및 의존성 가져오기를 비활성화하려면 false 로 설정합니다. GitLab 13.1의 SpotBugs 분석기 및 GitLab 14.0의 Gosec 분석기에 도입되었습니다.
|
ANT_HOME
| SpotBugs |
ANT_HOME 변수입니다.
|
ANT_PATH
| SpotBugs |
ant 실행 파일의 경로입니다.
|
GRADLE_PATH
| SpotBugs |
gradle 실행 파일의 경로입니다.
|
JAVA_OPTS
| SpotBugs |
java 실행 파일에 대한 추가적인 인수들입니다.
|
JAVA_PATH
| SpotBugs |
java 실행 파일의 경로입니다.
|
SAST_JAVA_VERSION
| SpotBugs | 사용할 Java 버전입니다. GitLab 15.0부터는 지원되는 버전이 11 과 17 (기본값)이며, GitLab 15.0 이전에는 8 (기본값)과 11 입니다.
|
MAVEN_CLI_OPTS
| SpotBugs |
mvn 또는 mvnw 실행 파일에 대한 추가적인 인수들입니다.
|
MAVEN_PATH
| SpotBugs |
mvn 실행 파일의 경로입니다.
|
MAVEN_REPO_PATH
| SpotBugs | Maven 로컬 저장소의 경로입니다 (maven.repo.local 속성의 단축키입니다).
|
SBT_PATH
| SpotBugs |
sbt 실행 파일의 경로입니다.
|
FAIL_NEVER
| SpotBugs | 컴파일 실패를 무시하려면 1 로 설정합니다.
|
SAST_GOSEC_CONFIG
| Gosec | GitLab 14.0에서 제거됨 - 대신 사용자 정의 규칙 집합을 사용합니다. Gosec에 대한 구성 파일의 경로입니다 (선택적). |
PHPCS_SECURITY_AUDIT_PHP_EXTENSIONS
| phpcs-security-audit | 추가 PHP 확장자의 쉼표로 구분된 목록입니다. |
SAST_SEMGREP_METRICS
| Semgrep | 익명화된 스캔 메트릭을 r2c에 보내지 않으려면 "false" 로 설정합니다. 기본값: true . GitLab 팀원은 이 비공개 이슈에서 더 많은 정보를 볼 수 있습니다: https://gitlab.com/gitlab-org/gitlab/-/issues/330565 .
|
SAST_SCANNER_ALLOWED_CLI_OPTS
| Semgrep | 스캔 작업을 실행할 때 기본 보안 스캐너로 전달되는 CLI 옵션(값 있는 인수 또는 플래그)들입니다. 일부 옵션들만 허용됩니다. CLI 옵션과 값은 공백 또는 동일하게 = 문자를 사용하여 분리합니다. 예: name1 value1 또는 name1=value1 . 여러 옵션은 공백으로 분리되어야 합니다. 예: name1 value1 name2 value2 . GitLab 15.3에서 도입되었습니다.
|
SAST_RULESET_GIT_REFERENCE
| Semgrep, nodejs-scan | 사용자 정의 규칙 집합 구성 파일의 경로를 정의합니다. 프로젝트에 커밋된 .gitlab/sast-ruleset.toml 파일이 있는 경우 해당 로컬 구성이 우선하며, SAST_RULESET_GIT_REFERENCE 에서의 파일은 사용되지 않습니다. 이 변수는 Ultimate 티어에서만 사용할 수 있습니다.
|
보안 스캐너 구성
SAST 분석기는 내부적으로 OSS 보안 스캐너를 사용하여 분석을 수행합니다. 우리는 권장되는 구성을 보안 스캐너에 설정하여 튜닝에 대해 걱정할 필요가 없도록 합니다. 그러나 우리의 기본 스캐너 구성이 귀하의 요구 사항에 맞지 않을 수도 있는 특이한 경우가 있습니다.
스캐너의 동작을 일부 사용자 정의하려면 기본 스캐너에 제한된 일부 플래그를 추가할 수 있습니다. 이러한 플래그는 SAST_SCANNER_ALLOWED_CLI_OPTS
CI/CD 변수에 지정합니다. 이러한 플래그는 스캐너의 CLI 옵션에 추가됩니다.
분석기 | CLI 옵션 | 설명 |
---|---|---|
Semgrep | --max-memory
| 단일 파일에서 규칙을 실행할 때 사용할 최대 시스템 메모리를 설정합니다. MB로 측정됩니다. |
Flawfinder | --neverignore
| 보안 문제를 결코 무시하지 않습니다. 심지어 주석에 “무시” 지시문이 있더라도 추가적인 취약점을 감지하기 위해 이 옵션을 추가하는 것은 자동으로 해결할 수 없는 취약점을 분석기가 감지하도록 할 수 있습니다. |
SpotBugs | -effort
| 분석 노력 수준을 설정합니다. 유효한 값은 min , less , more , max 입니다. 이는 스캔의 정밀도와 더 많은 취약점을 감지하는 능력을 증가하는 순서로 정의되며, 프로젝트 크기에 따라 스캔을 완료하는 데 더 많은 메모리와 시간이 필요할 수 있습니다. 메모리 또는 성능 문제가 발생하는 경우 분석 노력 수준을 낮은 값으로 줄일 수 있습니다. 예: -effort less .
|
사용자 정의 CI/CD 변수
- GitLab 12.5에서 도입되었습니다.
언급된 SAST 구성 CI/CD 변수 외에도 모든 사용자 정의 변수는 SAST 판매 템플릿을 사용하는 경우 기본 SAST 분석기 이미지에 전파됩니다.
실험적 기능
실험적 기능에 대한 초기 액세스를 받을 수 있습니다. 실험적 기능은 언제든지 추가, 제거 또는 일반적인 기능으로 승격될 수 있습니다.
사용 가능한 실험적 기능은 다음과 같습니다:
- MobSF 분석기를 사용하여 iOS 및 Android 앱의 스캔을 활성화합니다.
이러한 기능은 이전에 실험적이었지만, 이제 일반적으로 사용할 수 있습니다:
-
Semgrep 분석기에서
eslint.detect-object-injection
를 비활성화합니다. 이는 잘못된 긍정적인 결과가 높은 비율로 발생되므로 이 규칙이 기본적으로 비활성화되었습니다(15.10).
실험적 기능 활성화
실험적 기능을 활성화하려면 다음을 .gitlab-ci.yml
파일에 추가합니다:
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SAST_EXPERIMENTAL_FEATURES: "true"
오프라인 환경에서 SAST 실행
제한적이거나 제한된 인터넷 리소스로 구성된 환경의 자체 관리 GitLab 인스턴스의 경우, SAST 작업이 성공적으로 실행되기 위해 몇 가지 조정이 필요합니다. 자세한 정보는 오프라인 환경을 참조하십시오.
오프라인 SAST 요구 사항
오프라인 환경에서 SAST를 사용하려면 다음이 필요합니다:
-
docker
또는kubernetes
executor가 있는 GitLab Runner. - 로컬로 사용 가능한 SAST 분석기 이미지 사본이 있는 Docker 컨테이너 레지스트리.
- 패키지의 인증서 확인 구성(선택 사항).
GitLab Runner는 기본 pull_policy
로 always
를 갖고 있어서, 러너는 지역 사본이 있는 경우에도 GitLab 컨테이너 레지스트리에서 Docker 이미지를 가져오려고 시도합니다. 오프라인 환경에서는 GitLab Runner의 pull_policy
를 if-not-present
로 설정할 수 있으며, 로컬로 사용 가능한 도커 이미지만 사용하도록 선호하는 경우입니다. 그러나 CI/CD 파이프라인에서 업데이트된 스캐너를 사용하는 것이 가능하도록 하려면 오프라인 환경이 아닌 경우에도 pull_policy
설정을 always
로 유지하는 것이 좋습니다.
Docker 레지스트리 내에서 GitLab SAST 분석기 이미지 사용 가능
지원되는 언어 및 프레임워크로 SAST를 사용하려면,
다음의 기본 SAST 분석기 이미지를 registry.gitlab.com
에서 내 로컬 Docker 컨테이너 레지스트리로 가져옵니다.
registry.gitlab.com/security-products/brakeman:3
registry.gitlab.com/security-products/flawfinder:3
registry.gitlab.com/security-products/kubesec:3
registry.gitlab.com/security-products/nodejs-scan:3
registry.gitlab.com/security-products/phpcs-security-audit:3
registry.gitlab.com/security-products/pmd-apex:3
registry.gitlab.com/security-products/security-code-scan:3
registry.gitlab.com/security-products/semgrep:3
registry.gitlab.com/security-products/sobelow:3
registry.gitlab.com/security-products/spotbugs:3
로컬 오프라인 Docker 레지스트리로 Docker 이미지를 가져오는 프로세스는 귀하의 네트워크 보안 정책에 따라 다릅니다. 외부 자원이 가져오거나 일시적으로 액세스되는 것을 승인하는 프로세스를 찾으려면 IT 스태프에게 상담하십시오. 이러한 스캐너들은 주기적으로 업데이트되며, 경우에 따라 직접적으로 업데이트할 수 있을 수도 있습니다.
Docker 이미지를 파일로 저장하고 전송하는 세부 정보는 Docker 문서의 docker save
, docker load
, docker export
및 docker import
를 참조하십시오.
사용자 정의 인증 기관 지원이 필요한 경우
사용자 정의 인증 기관을 지원하려면 다음 버전에서 지원되었습니다.
분석기 | 버전 |
---|---|
bandit 1
| v2.3.0 |
brakeman
| v2.1.0 |
eslint 1
| v2.9.2 |
flawfinder
| v2.3.0 |
gosec 1
| v2.5.0 |
kubesec
| v2.1.0 |
nodejs-scan
| v2.9.5 |
phpcs-security-audit
| v2.8.2 |
pmd-apex
| v2.1.0 |
security-code-scan
| v2.7.3 |
semgrep
| v0.0.1 |
sobelow
| v2.2.0 |
spotbugs
| v2.7.1 |
- 이러한 분석기들은 GitLab 14.8에서 사용이 중단되었으며, GitLab 15.4에서 지원 종료되었습니다.
로컬 SAST 분석기를 사용하도록 SAST CI/CD 변수 설정
다음 구성을 .gitlab-ci.yml
파일에 추가하세요. SECURE_ANALYZERS_PREFIX
를 로컬 도커 컨테이너 레지스트리로 바꿔야 합니다.
include:
- template: Jobs/SAST.gitlab-ci.yml
variables:
SECURE_ANALYZERS_PREFIX: "localhost:5000/analyzers"
SAST 작업은 이제 인터넷 액세스 없이 코드를 스캔하고 보안 보고서를 생성하기 위해 로컬 SAST 분석기의 사본을 사용해야 합니다.
패키지의 인증서 확인 구성
SAST 작업이 패키지 관리자를 호출하는 경우 해당 패키지의 인증서 확인을 구성해야 합니다. 오프라인 환경에서는 외부 소스의 인증서 확인이 불가능합니다. 자체 서명된 인증서를 사용하거나 인증서 확인을 해제하세요. 지침은 패키지 관리자의 문서를 참조하세요.
SELinux에서 SAST 실행
기본적으로 SELinux에서 호스팅되는 GitLab 인스턴스에서는 SAST 분석기가 지원됩니다. SAST 작업 재정의에서 before_script
를 추가하는 것은 SELinux에서 호스팅되는 러너가 제한된 권한을 가지고 있기 때문에 작동하지 않을 수 있습니다.