SAST 문제 해결

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

다음의 문제 해결 시나리오는 고객 지원 사례에서 수집되었습니다.

여기에서 다루지 않는 문제가 발생하거나 여기에 있는 정보가 문제를 해결하지 못하는 경우, 도움을 받을 수 있는 방법은 GitLab Support 페이지를 참조하세요.

디버그 수준 로깅

디버그 수준 로깅은 문제 해결에 도움이 될 수 있습니다. 자세한 내용은
디버그 수준 로깅을 참조하세요.

CI/CD 템플릿의 변경 사항

GitLab 관리 SAST CI/CD 템플릿은 어떤 분석기 작업이 실행되고 어떻게 구성되는지를 제어합니다. 템플릿을 사용하는 동안 작업 실패 또는 다른 파이프라인 오류를 경험할 수 있습니다. 예를 들어, 다음과 같은 메시지를 볼 수 있습니다:

  • 영향받는 파이프라인을 볼 때 '<your job>' needs 'spotbugs-sast' job, but 'spotbugs-sast' is not in any previous stage와 같은 오류 메시지가 표시됩니다.
  • CI/CD 파이프라인 구성에서 예상치 못한 다른 문제가 발생할 수 있습니다.

작업 실패가 발생하거나 SAST 관련 yaml invalid 파이프라인 상태가 보이는 경우, 문제를 조사하는 동안 파이프라인이 계속 작동하도록 템플릿의 이전 버전으로 일시적으로 되돌리는 것이 좋습니다. 템플릿의 이전 버전을 사용하려면 CI/CD YAML 파일에서 기존의 include 문을 특정 템플릿 버전을 참조하도록 변경하세요. 예를 들어 v15.3.3-ee와 같이 변경합니다:

include:  
  remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/v15.3.3-ee/lib/gitlab/ci/templates/Jobs/SAST.gitlab-ci.yml'  

GitLab 인스턴스의 네트워크 연결이 제한된 경우 파일을 다운로드하여 다른 곳에서 호스팅할 수도 있습니다.

이 솔루션은 일시적으로만 사용하고, 가능한 한 빨리 표준 템플릿으로 돌아가야 합니다.

특정 분석기 작업의 오류

GitLab SAST 분석기는 컨테이너 이미지로 출시됩니다.
GitLab 관리 SAST CI/CD 템플릿(index.md#configure-sast-in-your-cicd-yaml)이나 귀하의 프로젝트의 변경 사항과 관련되지 않는 새로운 오류가 발생하는 경우 영향을 받는 분석기를 특정 이전 버전에 고정해보세요.

분석기 프로젝트에는 각 버전에서의 변경 사항을 나열한 CHANGELOG.md 파일이 있습니다.

작업 로그 메시지

SAST 작업의 로그에는 문제의 근본 원인을 파악하는 데 도움이 되는 오류 메시지가 포함될 수 있습니다. 아래는 일부 오류 메시지 및 권장 조치입니다.

실행 형식

exec /bin/sh: exec format error` 메시지가 작업 로그에 표시됨  

GitLab SAST 분석기는 단지 amd64 CPU 아키텍처에서만 실행을 지원합니다.
이 메시지는 작업이 arm과 같은 다른 아키텍처에서 실행되고 있음을 나타냅니다.

도커 오류

Error response from daemon: error processing tar file: docker-tar: relocation error  

이 오류는 SAST 작업을 실행하는 Docker 버전이 19.03.0일 때 발생합니다.
Docker 19.03.1 이상으로 업데이트하는 것을 고려하세요. 이전 버전은 영향을 받지 않습니다.
자세한 내용은 문제 13830 - “현재 SAST 컨테이너가 실패합니다.”를 참조하세요.

일치하는 파일 없음

gl-sast-report.json: 일치하는 파일 없음

이와 관련된 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참조하세요.

구성 전용

sast는 구성 전용으로 사용되며, 해당 스크립트는 실행되어서는 안 됩니다

이와 관련된 정보는 GitLab Secure 문제 해결 섹션을 참조하세요.

SAST 작업이 예상치 않게 실행됨

SAST CI 템플릿rules:exists 매개변수를 사용합니다. 성능상의 이유로 지정된 glob 패턴에 대해 최대 10000개의 일치 항목이 발생합니다. 일치 항목 수가 최대를 초과하면 rules:exists 매개변수는 true를 반환합니다. 리포지토리의 파일 수에 따라 SAST 작업이 트리거될 수 있으며, 스캐너가 프로젝트를 지원하지 않을 수 있습니다. 이 제한에 대한 자세한 내용은 rules:exists 문서를 참조하세요.

SpotBugs 오류

아래는 발생할 수 있는 가장 일반적인 SpotBugs 오류에 대한 세부정보와 권장 작업입니다.

UTF-8 매핑 불가능한 문자 오류

이 오류는 SpotBugs 빌드에서 UTF-8 인코딩이 활성화되지 않고 소스 코드에 UTF-8 문자가 있을 때 발생합니다. 이 오류를 해결하려면 프로젝트의 빌드 도구에서 UTF-8을 활성화하세요.

Gradle 빌드의 경우, build.gradle 파일에 다음을 추가하세요:

compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

Maven 빌드의 경우, pom.xml 파일에 다음을 추가하세요:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

프로젝트를 빌드할 수 없음

작업이 “프로젝트를 빌드할 수 없음” 메시지와 함께 빌드 단계에서 실패하면, 이는 작업이 SpotBugs가 기본 도구에 포함되지 않은 도구로 빌드하도록 요청하고 있기 때문일 가능성이 높습니다. SpotBugs 기본 도구 목록은 SpotBugs의 asdf 종속성을 참조하세요.

해결책은 사전 컴파일을 사용하는 것입니다. 사전 컴파일은 SpotBugs에서 요구하는 이미지가 작업의 컨테이너에 있을 수 있도록 합니다.

Java ​​메모리 부족 오류

SAST 작업이 실행되는 동안 java.lang.OutOfMemoryError라는 오류가 발생할 수 있습니다. 이 문제는 Java의 메모리가 부족할 때 발생합니다.

이 문제를 해결하기 위해 할 수 있는 방법은 다음과 같습니다:

  • 노력 수준을 낮추세요.
  • CI/CD 변수 JAVA_OPTS를 설정하여 기본값 -XX:MaxRAMPercentage=80를 대체하세요. 예: -XX:MaxRAMPercentage=90.
  • spotbugs-sast 작업에서 더 큰 러너 태그를 지정하세요.

관련 주제

예외 분석

작업 로그에 “Exception analyzing … using detector …” 형태의 메시지와 Java 스택 추적이 포함되어 있다면, 이는 SAST 파이프라인의 실패가 아닙니다. SpotBugs는 예외가 복구 가능하다고 판단하고, 이를 기록한 후 분석을 계속 진행합니다.

메시지의 첫 번째 “…” 부분은 분석 중인 클래스입니다 - 만약 이 클래스가 귀하의 프로젝트의 일부가 아니라면, 메시지와 그에 따르는 스택 추적을 무시해도 될 것입니다.

반면에, 분석 중인 클래스가 귀하의 프로젝트의 일부라면, GitHub에서 SpotBugs 프로젝트와 함께 문제를 제기하는 것을 고려해 보세요.

Flawfinder 인코딩 오류

Flawfinder가 잘못된 UTF-8 문자를 발견했을 때 발생합니다. 이를 해결하기 위해 그들의 문서화된 조언을 전체 리포지토리에 적용하거나, 특정 작업에 대해 before_script 기능을 사용하여 적용하세요.

.gitlab-ci.yml 파일에 before_script 섹션을 구성할 수 있으며, 인코더를 설치하고 변환 명령을 실행하기 위해 파이프라인 실행 정책을 사용할 수 있습니다. 예를 들어, 보안 스캐너 템플릿에서 생성된 flawfinder-sast 작업에 .cpp 확장자를 가진 모든 파일을 변환하기 위해 before_script 섹션을 추가할 수 있습니다.

예시 파이프라인 실행 정책 YAML

---
pipeline_execution_policy:
- name: SAST
  description: 'C++ 애플리케이션에서 SAST 실행'
  enabled: true
  pipeline_config_strategy: inject_ci
  content:
    include:
    - project: my-group/compliance-project
      file: flawfinder.yml
      ref: main

flawfinder.yml:

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

flawfinder-sast:
  before_script:
    - pip install cvt2utf
    - cvt2utf convert "$PWD" -i cpp

Semgrep 느림, 예상치 못한 결과 또는 기타 오류

Semgrep이 느리거나, 너무 많은 거짓 양성 또는 거짓 음성을 보고하거나, 충돌하거나, 실패하거나, 기타 문제가 발생하는 경우, Semgrep 문서의 GitLab SAST 문제 해결을 참조하세요.