애플리케이션 보안 문제 해결

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

애플리케이션 보안 기능을 사용할 때 다음과 같은 문제가 발생할 수 있습니다.

로깅 레벨

GitLab 분석기에 의해 출력되는 로그의 자세함은 SECURE_LOG_LEVEL 환경 변수에 의해 결정됩니다. 이 로깅 수준 이상의 메시지가 출력됩니다.

가장 심각한 것부터 가장 낮은 심각도로, 로깅 수준은 다음과 같습니다.

  • fatal
  • error
  • warn
  • info (기본값)
  • debug

디버그 수준 로깅

caution
디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에는 작업에서 사용 가능한 환경 변수 및 기타 비밀이 포함될 수 있습니다. 출력물은 GitLab 서버에 업로드되며 작업 로그에서 볼 수 있습니다.

디버그 수준 로깅을 활성화하려면 .gitlab-ci.yml 파일에 다음을 추가하십시오.

variables:
  SECURE_LOG_LEVEL: "debug"

이는 모든 GitLab 분석기에게 모든 메시지를 출력하도록 지시합니다. 자세한 내용은 로깅 레벨을 참조하십시오.

종료 코드 1로 실패하는 보안 작업

만약 보안 작업이 실패하고 그 이유가 명확하지 않다면:

  1. 디버그 수준 로깅을 활성화합니다.
  2. 작업을 실행합니다.
  3. 작업 출력을 조사합니다.
  4. 기본 info 값으로 돌아가려면 debug 로그 레벨을 제거합니다.

오래된 보안 보고서

Merge Request에 대해 생성된 보안 보고서가 오래되면, 해당 Merge Request에 대한 보안 위젯에 경고 메시지가 표시되고 적절한 조치를 취하도록 요구됩니다.

이는 다음 두 가지 시나리오에서 발생할 수 있습니다:

소스 브랜치가 대상 브랜치보다 뒤쳐진 경우

가장 최근 공통 조상 커밋이 대상 브랜치와 소스 브랜치 사이의 가장 최근 커밋이 아닌 경우 보안 보고서가 오래될 수 있습니다.

이 문제를 해결하려면 변경 내용을 통합하기 위해 리베이스하거나 머지합니다.

대상 브랜치 변경 사항 통합

대상 브랜치의 보안 보고서가 오래되었을 경우

실패한 작업이나 새로운 고려사항을 포함하여 여러 이유로 이 문제가 발생할 수 있습니다. Merge Request에서 보안 보고서가 오래된 것으로 표시되면 대상 브랜치에서 새로운 파이프라인을 실행해야 합니다. 새 파이프라인을 실행하려면 새 파이프라인을 선택하십시오.

새 파이프라인 실행

report.json: no matching files 경고 메시지 받기

caution
디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에는 작업에서 사용 가능한 환경 변수 및 기타 비밀이 포함될 수 있습니다. 출력물은 GitLab 서버에 업로드되며 작업 로그에서 볼 수 있습니다.

이 메시지는 종종 파일이 없음 오류를 발생시킬 것입니다. 그리고 이 오류의 이유를 나타내는 기타 오류 또는 경고가 앞서 있고 이 메시지가 뒤를 이을 것입니다. 이러한 메시지들을 확인해주기 위해 전체 작업 로그를 확인하십시오. 이러한 메시지를 찾을 수 없다면, 사용자 지정 CI/CD 변수SECURE_LOG_LEVEL: "debug"를 설정한 후 실패한 작업을 재시도하십시오. 이는 추가 정보를 제공하여 추가 조사할 수 있게 합니다.

sast job: config key may not be used with 'rules': only/except 오류 메시지 받기

.gitlab-ci.yml 템플릿을 포함시킬SAST.gitlab-ci.yml와 같은 오류가 발생할 수 있습니다. GitLab CI/CD 구성에 따라 다음 오류가 발생할 수 있습니다.

파이프라인을 만들 수 없음
    
    jobs:sast config key may not be used with `rules`: only/except

이 오류는 포함된 작업의 rules 구성이 사용 중단된 only 또는 except 구문으로 재정의되었을 때 발생합니다. 이 문제를 해결하려면 반드시 다음 중 하나를 수행해야 합니다:

자세한 내용은 SAST 작업 재정의를 참조하십시오.

기존의 only/except 구문을 rules로 전환

작업 실행을 제어하기 위해 템플릿을 재정의할 때, 이전 예전 구문은 더 이상 호환되지 않으며 새로운 rules 구문으로 전환해야 합니다.

만약 재정의가 main에서만 실행되도록 하는 것에 목적이 있다면, 이전 구문은 다음과 같이 보일 것입니다:

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

# 스캔이 main 또는 MR에서만 실행되도록 보장
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

위의 구성을 새 rules 구문으로 전환하면 재정의는 다음과 같이 작성될 것입니다:

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

# 스캔이 태그가 아닌 브랜치에서만 실행되도록 보장
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_MERGE_REQUEST_ID

만약 재정의가 브랜치만 실행되도록 하는 것에 목적이 있다면, 다음과 같이 보일 것입니다:

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

# 스캔이 태그가 아닌 브랜치에서만 실행되도록 보장
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_TAG == null

자세한 정보는 rules를 참조하십시오.

오래된 버전의 템플릿을 고정시키세요

최신 지원을 보장하기 위해, rules로 마이그레이션하는 것을 강력히 권장합니다.

CI 구성을 즉시 업데이트할 수 없는 경우, 이전 템플릿 버전을 고정하는 몇 가지 해결책이 있습니다. 예를 들면:

  include:
    remote: 'https://gitlab.com/gitlab-org/gitlab/-/raw/12-10-stable-ee/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml'

추가적으로, 버전이 지정된 레거시 템플릿이 포함된 전용 프로젝트를 제공합니다. 이는 오프라인 설정이나 Auto DevOps를 사용하고자 하는 모든 사용자에게 적합합니다.

지침은 레거시 템플릿 프로젝트에서 확인할 수 있습니다.

취약점이 발견되었지만 작업은 성공합니다. 대신에 파이프라인을 실패시키려면 어떻게 해야 합니까?

이러한 상황에서 작업이 성공하는 것이 기본 동작입니다. 작업의 상태는 분석기 자체의 성공 또는 실패를 나타냅니다. 분석기 결과는 작업 로그, Merge Request 위젯, 또는 보안 대시보드에 표시됩니다.

오류: 작업 구성에만 사용되며 해당 스크립트를 실행해서는 안 됩니다

Security/Dependency-Scanning.gitlab-ci.ymlSecurity/SAST.gitlab-ci.yml에서 GitLab 13.4에서의 변경 사항rules 속성을 설정하여 sast 또는 dependency_scanning 작업을 활성화하는 경우, 이러한 작업은 (job) is used for configuration only, and its script should not be executed 오류로 실패합니다.

sast 또는 dependency_scanning 구절은 variables 또는 stage를 변경하는 등 모든 SAST 또는 Dependency Scanning에 변경 사항을 적용하는 데 사용될 수 있지만, 공유 rules를 정의하는 데 사용할 수는 없습니다.

이에 대한 대처하는 문제가 열려 있습니다. 우선순위 설정에 도움을 주기 위해 문제에 투표할 수 있으며, 기여가 환영됩니다.

빈 취약점 보고서, 의존성 디렉터리, 라이선스 디렉터리 페이지

파이프라인에 allow_failure: false 옵션을 갖는 작업을 수행 중이지 않거나 이 작업이 완료되지 않으면, GitLab은 보안 보고서에서 데이터를 가져와 디렉터리된 페이지를 채울 수 없습니다. 이 경우, 취약점 보고서, 의존성 디렉터리, 그리고 라이선스 디렉터리 페이지가 비어 있습니다. 이러한 보안 페이지는 파이프라인의 매뉴얼 단계에서 작업을 실행하여 채울 수 있습니다.

이러한 시나리오를 처리하기 위한 문제가 열려 있습니다. 이 문제에 투표하여 우선순위 설정에 도움을 줄 수 있으며, 기여가 환영됩니다.