- Debug 수준의 로깅
- GitLab 관리 CI/CD 템플릿 변경으로 인한 파이프라인 오류
- 특정 분석기 작업에서 오류가 발생하는 경우
- 작업 로그에서
exec /bin/sh: exec format error
메시지 Error response from daemon: error processing tar file: docker-tar: relocation error
gl-sast-report.json: no matching files
경고 메시지 획득- 오류:
sast is used for configuration only, and its script should not be executed
- SAST 작업이 예기치 않게 실행됨
- SpotBugs UTF-8 매핑할 수 없는 문자 오류
- SpotBugs 오류:
프로젝트를 빌드할 수 없음
-
SpotBugs 오류:
java.lang.OutOfMemoryError
- SpotBugs 메시지:
Exception analyzing ... using detector ...
뒤이어 Java 스택 추적이 있는 경우 - Flawfinder 인코딩 오류
- Semgrep 느림, 예상치 못한 결과 또는 기타 오류
SAST 문제 해결
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 문서를 참조하십시오.