SAST 문제 해결

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

Debug 수준의 로깅

문제 해결 시 Debug 수준의 로깅을 도와줄 수 있습니다. 자세한 내용은 debug-level logging를 참조하세요.

GitLab 관리 CI/CD 템플릿 변경으로 인한 파이프라인 오류

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

  • ‘Spotbugs-sast’가 이전 스테이지에 없지만 ‘'이 'spotbugs-sast' 작업 필요로 하는 경우 `'' 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#pinning-to-minor-image-version).

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

작업 로그에서 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 이상으로 업데이트하는 것을 고려해보세요. 이전 버전에는 영향을 받지 않습니다. 자세한 내용은 이 문제를 참조하세요.

gl-sast-report.json: no matching files 경고 메시지 획득

이에 대한 자세한 내용은 일반적인 애플리케이션 보안 문제 해결 섹션을 참조하세요.

오류: 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 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의 기본 도구 목록은 SpotBugs의 asdf dependencies을 참조하십시오.

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

SpotBugs 오류: java.lang.OutOfMemoryError

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

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

  • 낮은 노력 수준을 선택합니다.
  • CI/CD 변수 JAVA_OPTS를 기본값 -XX:MaxRAMPercentage=80으로 대체하는 -XX:MaxRAMPercentage=90와 같은 값으로 설정합니다.
  • spotbugs-sast 작업에 더 큰 러너를 태그합니다.

링크

SpotBugs 메시지: Exception analyzing ... using detector ... 뒤이어 Java 스택 추적이 있는 경우

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

메시지의 첫 번째 “…” 부분은 분석 중인 클래스입니다. 이 클래스가 프로젝트의 일부가 아니라면 메시지와 뒤이어 나오는 스택 추적을 무시해도 될 것입니다.

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

Flawfinder 인코딩 오류

이 오류는 Flawfinder가 잘못된 UTF-8 문자를 만났을 때 발생합니다. 이를 해결하려면 문서화된 조언을 전체 리포지토리에 적용하거나 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 문서를 참조하십시오.