SAST 문제 해결

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

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

디버그 수준 로깅

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

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 템플릿과 관련이 없는 새로운 오류가 보인다면 해당 분석기를 특정 이전 버전으로 고정하는 것을 시도할 수 있습니다.

분석기 프로젝트에는 각 사용 가능한 버전의 변경 사항이 나열된 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이나 그 이상으로 업데이트하는 것을 고려해주세요. 오래된 버전은 영향을 받지 않습니다. 자세한 내용은 이슈 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 인코딩이 SpotBugs 빌드에서 활성화되지 않고 소스 코드에 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의 메모리가 부족한 경우 발생합니다.

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

  • 낮은 노력 수준 선택
  • 기본 -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-0 작업에 before_script 섹션을 추가하여 .cpp 확장자를 가진 모든 파일을 변환하는 예시입니다.

실행 정책 YAML 예시

---
scan_execution_policy:
- name: SAST
  description: 'C++ 애플리케이션에 대한 SAST 실행'
  enabled: true
  rules:
  - type: pipeline
    branch_type: all
  actions:
  - scan: sast
  - scan: custom
    ci_configuration: |-
      flawfinder-sast-0:
          before_script:
            - pip install cvt2utf
            - cvt2utf convert "$PWD" -i cpp

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

Semgrep가 느리거나 너무 많은 잘못된 양성 또는 음성을 보고하거나 충돌하거나 실패하는 경우 또는 기타 방법으로 문제가 발생하는 경우, GitLab SAST 문제 해결을 위해 Semgrep 문서를 참조하세요.