InfoGrab Docs

SAST 분석기

요약

정적 애플리케이션 보안 테스트(SAST)는 분석기를 사용하여 소스 코드에서 취약점을 감지합니다. 분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 게시됩니다. SAST 기본 이미지는 GitLab에서 유지 관리하지만 사용자 정의 이미지를 통합할 수도 있습니다.

히스토리
  • GitLab 13.3에서 GitLab Ultimate에서 GitLab Free로 이동되었습니다.

정적 애플리케이션 보안 테스트(SAST)는 분석기를 사용하여 소스 코드에서 취약점을 감지합니다. 각 분석기는 서드파티 코드 분석 도구인 스캐너를 래핑한 것입니다.

분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 게시됩니다. 분석기의 일관된 성능을 위해 최소 4GB RAM을 권장합니다.

SAST 기본 이미지는 GitLab에서 유지 관리하지만 사용자 정의 이미지를 통합할 수도 있습니다.

각 스캐너에 대해 분석기는:

  • 감지 로직을 노출합니다.
  • 실행을 처리합니다.
  • 출력을 표준 형식으로 변환합니다.

공식 분석기#

SAST는 다음과 같은 공식 분석기를 지원합니다:

지원 버전#

공식 분석기는 GitLab 플랫폼과 별개로 컨테이너 이미지로 릴리스됩니다. 각 분석기 버전은 제한된 GitLab 버전 세트와 호환됩니다.

분석기 버전이 향후 GitLab 버전에서 더 이상 지원되지 않을 경우 이 변경 사항은 사전에 발표됩니다. 예를 들어 GitLab 17.0에 대한 공지를 참조하세요.

각 공식 분석기에 대한 지원되는 주요 버전은 SAST CI/CD 템플릿의 작업 정의에 반영됩니다. 이전 GitLab 버전에서 지원되는 분석기 버전을 보려면 SAST 템플릿 파일의 이전 버전(GitLab 16.11.0의 경우 v16.11.0-ee 등)을 선택하세요.

지원 종료(End of Support)에 도달한 분석기#

다음 GitLab 분석기는 지원 종료(End of Support) 상태에 도달했으며 업데이트를 받지 않습니다. GitLab 관리 규칙이 있는 Semgrep 기반 분석기로 대체되었습니다.

GitLab 17.3.1 이상으로 업그레이드하면 일회성 데이터 마이그레이션이 지원 종료에 도달한 분석기의 발견 결과를 자동으로 해결합니다. SpotBugs는 여전히 Groovy 코드를 스캔하기 때문에 아래 나열된 분석기 중 SpotBugs를 제외한 모든 분석기가 포함됩니다. 마이그레이션은 확인하거나 기각하지 않은 취약점만 해결하며, Semgrep 기반 스캔으로 자동 전환된 취약점에는 영향을 미치지 않습니다. 자세한 내용은 이슈 444926을 참조하세요.

분석기 스캔하는 언어 지원 종료 GitLab 버전
Bandit Python 15.4
Brakeman Ruby, Ruby on Rails 포함 17.0
ESLint (React 및 Security 플러그인 포함) JavaScript 및 TypeScript, React 포함 15.4
Flawfinder C, C++ 17.0
gosec Go 15.4
MobSF Android 애플리케이션 전용 Java 및 Kotlin, iOS 애플리케이션 전용 Objective-C 17.0
NodeJsScan JavaScript (Node.js 전용) 17.0
phpcs-security-audit PHP 17.0
Security Code Scan .NET (C#, Visual Basic 포함) 16.0
SpotBugs Java 전용1 15.4
SpotBugs Kotlin 및 Scala 전용1 17.0

각주:

  1. SpotBugs는 Groovy에 대해 지원되는 분석기로 남아 있습니다. Groovy 코드가 감지될 때만 활성화됩니다.

SAST 분석기 기능#

분석기가 일반 출시(GA)로 간주되려면 최소한 다음 기능을 지원해야 합니다:

포스트 분석기#

포스트 분석기는 분석기의 보고서 출력을 보강합니다. 포스트 분석기는 보고서 내용을 직접 수정하지 않습니다. 대신 다음을 포함한 추가 속성으로 결과를 향상시킵니다:

  • CWE.
  • 위치 추적 필드.

Semgrep 기반 스캔으로 전환#

GitLab Advanced SAST 분석기 외에도 GitLab은 여러 언어를 지원하는 Semgrep 기반 분석기도 제공합니다. GitLab은 분석기를 유지 관리하고 이를 위한 감지 규칙을 작성합니다. 이러한 규칙은 이전 릴리스에서 사용된 언어별 분석기를 대체합니다.

취약점 전환#

취약점 관리 시스템은 가능한 경우 이전 분석기에서 새 Semgrep 기반 발견 결과로 취약점을 자동으로 이동합니다. GitLab Advanced SAST 분석기로의 전환은 GitLab Advanced SAST 문서를 참조하세요.

이 경우 시스템은 각 분석기의 취약점을 단일 레코드로 결합합니다.

그러나 다음과 같은 경우 취약점이 일치하지 않을 수 있습니다:

  • 새로운 Semgrep 기반 규칙이 이전 분석기와 다른 위치 또는 다른 방식으로 취약점을 감지하는 경우.
  • 이전에 SAST 분석기를 비활성화한 경우.

이로 인해 각 취약점에 대한 필요한 식별자가 기록되지 않아 자동 전환이 방해받을 수 있습니다.

취약점이 일치하지 않는 경우:

  • 원래 취약점이 취약점 보고서에서 "더 이상 감지되지 않음"으로 표시됩니다.
  • 그런 다음 Semgrep 기반 발견 결과를 기반으로 새 취약점이 생성됩니다.

분석기 사용자 정의#

.gitlab-ci.yml 파일에서 CI/CD 변수를 사용하여 분석기의 동작을 사용자 정의하세요.

사용자 정의 Docker 미러 사용#

GitLab 레지스트리 대신 사용자 정의 Docker 레지스트리를 사용하여 분석기의 이미지를 호스팅할 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.
  • 사용자 정의 Docker 레지스트리는 모든 공식 분석기에 대한 이미지를 제공해야 합니다.
Note

이 변수는 SAST 분석기뿐만 아니라 모든 Secure 분석기에 영향을 줍니다.

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 분석기를 비활성화하고 사용자 정의 분석기만 활성화 상태로 둘 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.

모든 기본 분석기를 비활성화하려면 .gitlab-ci.yml 파일에서 CI/CD 변수 SAST_DISABLED"true"로 설정하세요.

예제:

include:
  - template: Jobs/SAST.gitlab-ci.yml

variables:
  SAST_DISABLED: "true"

특정 기본 분석기 비활성화#

분석기는 감지된 소스 코드 언어에 따라 자동으로 실행됩니다. 그러나 특정 분석기를 비활성화할 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.

특정 분석기를 비활성화하려면 CI/CD 변수 SAST_EXCLUDED_ANALYZERS를 실행을 방지할 분석기를 나열하는 쉼표로 구분된 문자열로 설정하세요.

예를 들어 spotbugs 분석기를 비활성화하려면:

include:
  - template: Jobs/SAST.gitlab-ci.yml

variables:
  SAST_EXCLUDED_ANALYZERS: "spotbugs"

사용자 정의 분석기#

CI/CD 구성에서 작업을 정의하여 자체 분석기를 제공할 수 있습니다. 기본 분석기와의 일관성을 위해 사용자 정의 SAST 작업에 -sast 접미사를 추가해야 합니다.

사용자 정의 분석기 예제#

이 예제는 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

SAST 분석기

Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

정적 애플리케이션 보안 테스트(SAST)는 분석기를 사용하여 소스 코드에서 취약점을 감지합니다. 분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 게시됩니다. SAST 기본 이미지는 GitLab에서 유지 관리하지만 사용자 정의 이미지를 통합할 수도 있습니다.

히스토리
  • GitLab 13.3에서 GitLab Ultimate에서 GitLab Free로 이동되었습니다.

정적 애플리케이션 보안 테스트(SAST)는 분석기를 사용하여 소스 코드에서 취약점을 감지합니다. 각 분석기는 서드파티 코드 분석 도구인 스캐너를 래핑한 것입니다.

분석기는 SAST가 각 분석을 위해 전용 컨테이너를 시작하는 데 사용하는 Docker 이미지로 게시됩니다. 분석기의 일관된 성능을 위해 최소 4GB RAM을 권장합니다.

SAST 기본 이미지는 GitLab에서 유지 관리하지만 사용자 정의 이미지를 통합할 수도 있습니다.

각 스캐너에 대해 분석기는:

  • 감지 로직을 노출합니다.
  • 실행을 처리합니다.
  • 출력을 표준 형식으로 변환합니다.

공식 분석기#

SAST는 다음과 같은 공식 분석기를 지원합니다:

지원 버전#

공식 분석기는 GitLab 플랫폼과 별개로 컨테이너 이미지로 릴리스됩니다. 각 분석기 버전은 제한된 GitLab 버전 세트와 호환됩니다.

분석기 버전이 향후 GitLab 버전에서 더 이상 지원되지 않을 경우 이 변경 사항은 사전에 발표됩니다. 예를 들어 GitLab 17.0에 대한 공지를 참조하세요.

각 공식 분석기에 대한 지원되는 주요 버전은 SAST CI/CD 템플릿의 작업 정의에 반영됩니다. 이전 GitLab 버전에서 지원되는 분석기 버전을 보려면 SAST 템플릿 파일의 이전 버전(GitLab 16.11.0의 경우 v16.11.0-ee 등)을 선택하세요.

지원 종료(End of Support)에 도달한 분석기#

다음 GitLab 분석기는 지원 종료(End of Support) 상태에 도달했으며 업데이트를 받지 않습니다. GitLab 관리 규칙이 있는 Semgrep 기반 분석기로 대체되었습니다.

GitLab 17.3.1 이상으로 업그레이드하면 일회성 데이터 마이그레이션이 지원 종료에 도달한 분석기의 발견 결과를 자동으로 해결합니다. SpotBugs는 여전히 Groovy 코드를 스캔하기 때문에 아래 나열된 분석기 중 SpotBugs를 제외한 모든 분석기가 포함됩니다. 마이그레이션은 확인하거나 기각하지 않은 취약점만 해결하며, Semgrep 기반 스캔으로 자동 전환된 취약점에는 영향을 미치지 않습니다. 자세한 내용은 이슈 444926을 참조하세요.

분석기 스캔하는 언어 지원 종료 GitLab 버전
Bandit Python 15.4
Brakeman Ruby, Ruby on Rails 포함 17.0
ESLint (React 및 Security 플러그인 포함) JavaScript 및 TypeScript, React 포함 15.4
Flawfinder C, C++ 17.0
gosec Go 15.4
MobSF Android 애플리케이션 전용 Java 및 Kotlin, iOS 애플리케이션 전용 Objective-C 17.0
NodeJsScan JavaScript (Node.js 전용) 17.0
phpcs-security-audit PHP 17.0
Security Code Scan .NET (C#, Visual Basic 포함) 16.0
SpotBugs Java 전용1 15.4
SpotBugs Kotlin 및 Scala 전용1 17.0

각주:

  1. SpotBugs는 Groovy에 대해 지원되는 분석기로 남아 있습니다. Groovy 코드가 감지될 때만 활성화됩니다.

SAST 분석기 기능#

분석기가 일반 출시(GA)로 간주되려면 최소한 다음 기능을 지원해야 합니다:

포스트 분석기#

포스트 분석기는 분석기의 보고서 출력을 보강합니다. 포스트 분석기는 보고서 내용을 직접 수정하지 않습니다. 대신 다음을 포함한 추가 속성으로 결과를 향상시킵니다:

  • CWE.
  • 위치 추적 필드.

Semgrep 기반 스캔으로 전환#

GitLab Advanced SAST 분석기 외에도 GitLab은 여러 언어를 지원하는 Semgrep 기반 분석기도 제공합니다. GitLab은 분석기를 유지 관리하고 이를 위한 감지 규칙을 작성합니다. 이러한 규칙은 이전 릴리스에서 사용된 언어별 분석기를 대체합니다.

취약점 전환#

취약점 관리 시스템은 가능한 경우 이전 분석기에서 새 Semgrep 기반 발견 결과로 취약점을 자동으로 이동합니다. GitLab Advanced SAST 분석기로의 전환은 GitLab Advanced SAST 문서를 참조하세요.

이 경우 시스템은 각 분석기의 취약점을 단일 레코드로 결합합니다.

그러나 다음과 같은 경우 취약점이 일치하지 않을 수 있습니다:

  • 새로운 Semgrep 기반 규칙이 이전 분석기와 다른 위치 또는 다른 방식으로 취약점을 감지하는 경우.
  • 이전에 SAST 분석기를 비활성화한 경우.

이로 인해 각 취약점에 대한 필요한 식별자가 기록되지 않아 자동 전환이 방해받을 수 있습니다.

취약점이 일치하지 않는 경우:

  • 원래 취약점이 취약점 보고서에서 "더 이상 감지되지 않음"으로 표시됩니다.
  • 그런 다음 Semgrep 기반 발견 결과를 기반으로 새 취약점이 생성됩니다.

분석기 사용자 정의#

.gitlab-ci.yml 파일에서 CI/CD 변수를 사용하여 분석기의 동작을 사용자 정의하세요.

사용자 정의 Docker 미러 사용#

GitLab 레지스트리 대신 사용자 정의 Docker 레지스트리를 사용하여 분석기의 이미지를 호스팅할 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.
  • 사용자 정의 Docker 레지스트리는 모든 공식 분석기에 대한 이미지를 제공해야 합니다.
Note

이 변수는 SAST 분석기뿐만 아니라 모든 Secure 분석기에 영향을 줍니다.

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 분석기를 비활성화하고 사용자 정의 분석기만 활성화 상태로 둘 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.

모든 기본 분석기를 비활성화하려면 .gitlab-ci.yml 파일에서 CI/CD 변수 SAST_DISABLED"true"로 설정하세요.

예제:

include:
  - template: Jobs/SAST.gitlab-ci.yml

variables:
  SAST_DISABLED: "true"

특정 기본 분석기 비활성화#

분석기는 감지된 소스 코드 언어에 따라 자동으로 실행됩니다. 그러나 특정 분석기를 비활성화할 수 있습니다.

사전 요구사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 역할.

특정 분석기를 비활성화하려면 CI/CD 변수 SAST_EXCLUDED_ANALYZERS를 실행을 방지할 분석기를 나열하는 쉼표로 구분된 문자열로 설정하세요.

예를 들어 spotbugs 분석기를 비활성화하려면:

include:
  - template: Jobs/SAST.gitlab-ci.yml

variables:
  SAST_EXCLUDED_ANALYZERS: "spotbugs"

사용자 정의 분석기#

CI/CD 구성에서 작업을 정의하여 자체 분석기를 제공할 수 있습니다. 기본 분석기와의 일관성을 위해 사용자 정의 SAST 작업에 -sast 접미사를 추가해야 합니다.

사용자 정의 분석기 예제#

이 예제는 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