SAST 문제 해결

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

다음은 고객 지원 사례에서 수집된 문제 해결 시나리오입니다. 여기서 다루지 않는 문제가 발생하거나 여기 있는 정보가 문제를 해결하지 못하는 경우 GitLab 지원 페이지를 참조하여 도움을 받을 수 있습니다.

디버그 수준 로깅

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

CI/CD 템플릿의 변경

GitLab 관리 SAST CI/CD 템플릿분석기 작업이 실행되는 방식과 구성 방법을 제어합니다. 템플릿을 사용하는 동안 작업 실패나 다른 파이프라인 오류가 발생할 수 있습니다. 예를 들어, 다음과 같은 문제가 발생할 수 있습니다.

  • 영향을 받는 파이프라인을 확인할 때 '<작업 이름>'이(가) 'spotbugs-sast' 작업을 필요로 하지만 'spotbugs-sast'가 이전 단계에 없음과 같은 오류 메시지를 볼 수 있습니다.
  • CI/CD 파이프라인 구성에 대한 예상치 못한 다른 유형의 문제가 발생할 수 있습니다.

작업 실패가 발생하거나 SAST 관련 yaml invalid 파이프라인 상태가 보인다면 문제를 조사하는 동안 파이프라인이 계속 작동하도록 이전 버전의 템플릿으로 일시적으로 복원할 수 있습니다. 이전 버전의 템플릿을 사용하려면 CI/CD YAML 파일의 기존 include 문을 특정 템플릿 버전을 참조하도록 변경하세요. 예를 들어, 다음과 같이 할 수 있습니다:

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#pinning-to-minor-image-version).

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

작업 로그 메시지

SAST 작업 로그에는 루트 원인을 확인하는 데 도움이 되는 오류 메시지가 포함될 수 있습니다. 아래는 일부 오류 메시지와 권장 조치입니다.

실행 파일 형식

exec /bin/sh: exec format error` message in job log

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

Docker 오류

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

이 오류는 SAST 작업을 실행하는 Docker 버전이 19.03.0일 때 발생합니다. Docker를 19.03.1 이상으로 업데이트하는 것을 고려해보세요. 이전 버전에는 영향을 미치지 않습니다. 자세한 내용은 issue 13830 - “Current SAST container fails”를 참조하세요.

일치하는 파일 없음

gl-sast-report.json: no matching files

이에 대한 정보는 일반 Application Security 문제 해결 섹션을 참조하세요.

구성 전용

sast is used for configuration only, and its script should not be executed

이에 대한 정보는 GitLab Secure 문제 해결 섹션을 참조하세요.

예상치 않게 SAST 작업 실행

SAST CI 템플릿rules:exists 매개변수를 사용합니다. 성능상의 이유로 주어진 Glob 패턴에 대해 최대 10000개의 일치 항목까지만 찾아집니다. 일치 항목 수가 최대값을 초과하면 rules:exists 매개변수가 true를 반환합니다. 귀하의 저장소에 파일 수에 따라 SAST 작업이 트리거될 수 있습니다. 이 스캐너가 프로젝트를 지원하지 않더라도 자세한 내용은 rules:exists 문서를 참조하세요.

SpotBugs 오류

다음은 발생하는 가장 흔한 SpotBugs 오류의 세부 정보와 권장 조치입니다.

UTF-8 맵핑할 수 없는 문자 오류

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 dependencies를 참조하세요.

해결책은 사전 컴파일을 사용하는 것입니다. 사전 컴파일은 SpotBugs에서 필요로 하는 이미지가 작업의 컨테이너에서 사용 가능한지 확인합니다.

Java 메모리 부족 오류

SAST 작업을 실행하는 동안 java.lang.OutOfMemoryError라는 오류가 발생할 수 있습니다. 이 문제는 Java가 메모리를 모두 사용한 경우에 발생합니다.

이 문제를 해결하려면 다음을 시도할 수 있습니다:

  • 낮은 노력 수준을 선택합니다.
  • 기본값인 -XX:MaxRAMPercentage=80을 대체하는 CI/CD 변수 JAVA_OPTS를 설정합니다. 예: -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가 느리거나, 너무 많은 잘못된 양성 또는 음성을 보고하거나, 충돌하거나, 실패하거나, 기타 방식으로 작동하지 않으면 GitLab SAST의 문제 해결을 위해 Semgrep 문서를 참조하세요.