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

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

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

로깅 수준

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

가장 심각한(severity) 순서로 로깅 수준은 다음과 같습니다:

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

디버그 수준 로깅

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

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

variables:
  SECURE_LOG_LEVEL: "debug"

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

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

보안 작업이 실패하고 그 이유가 명확하지 않은 경우:

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

오래된 보안 보고서

병합 요청을 위해 생성된 보안 보고서가 오래되면, 병합 요청은 보안 위젯에 경고 메시지를 표시하고 적절한 조치를 취하도록 당신에게 요청합니다.

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

소스 브랜치가 대상 브랜치를 따라있을 때

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

이 문제를 해결하려면, 대상 브랜치의 변경 사항을 포함하기 위해 재베이스하거나 병합하세요.

대상 브랜치 변경 사항 통합

대상 브랜치 보안 보고서가 오래되었을 때

실패한 작업이나 새로운 공지 사항을 포함하여 여러 이유로 이러한 상황이 발생할 수 있습니다. 병합 요청이 보안 보고서가 오래됐다는 메시지를 표시하면, 대상 브랜치에서 새로운 파이프라인을 실행해야 합니다. 새 파이프라인을 실행하려면 새 파이프라인을 선택하세요.

새 파이프라인 실행

경고 메시지 확인 … report.json: no matching files

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

이 메시지는 종종 에러 No files to upload 뒤에 나오며, JSON 보고서가 생성되지 않은 이유를 나타내는 다른 에러나 경고 메시지로 전후됩니다. 이러한 메시지를 위해 전체 작업 로그를 확인하세요. 이러한 메시지를 찾을 수 없다면, 사용자 정의 CI/CD 변수SECURE_LOG_LEVEL: "debug"를 설정한 후 실패한 작업을 다시 실행합니다. 이는 추가 정보를 조사하기 위한 추가 정보를 제공합니다.

에러 메시지 sast job: config key may not be used with 'rules': only/except

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

파이프라인을 생성할 수 없음

    jobs:sast config key may not be used with `rules`: only/except

이 오류는 포함된 작업의 rules 구성이 사용되었을 때 나타납니다. 이 문제를 해결하려면 다음 중 하나를 수행해야 합니다:

  • 규칙으로의 전환.
  • (임시로) 템플릿을 더 이상 사용되지 않는 버전으로 고정하는 것](#템플릿을-더-이상-사용되지-않는-버전으로-고정). 더 많은 정보는 SAST 작업 재정의를 참조하세요.

only/except 구문을 rules로 전환하기

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

작업을 main에서만 실행하도록 제한하려는 경우, 이전 구문은 다음과 유사할 것입니다:

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

# 스캔이 오직 main 또는 병합 요청에 대해서만 실행될 수 있도록 보장합니다
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

위의 구성을 새로운 rules 구문으로 전환하려면, 다음과 같이 재정의됩니다:

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

# 스캔이 오직 main 또는 병합 요청에 대해서만 실행될 수 있도록 보장합니다
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_MERGE_REQUEST_ID

작업을 브랜치에서만 실행하도록 제한하려는 경우, 태그가 아닌 경우에 유사할 것입니다:

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

# 스캔이 태그에서 실행되지 않도록 보장합니다
spotbugs-sast:
  except:
    - tags

새로운 rules 구문으로 전환하기 위해, 재정의는 다음과 같이 다시 작성됩니다:

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를 사용하려는 모든 사용자에게 유용합니다.

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

취약점 발견, 그러나 작업이 성공하는 경우. 대신에 파이프라인을 실패하도록하려면 어떻게 해야합니까?

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

오류: 작업 중 구성 전용으로 사용되며 해당 스크립트를 실행하지 않아야합니다

Security/Dependency-Scanning.gitlab-ci.ymlSecurity/SAST.gitlab-ci.yml에서 GitLab 13.4에서 변경 내용rules 속성을 설정하여 sast 또는 dependency_scanning 작업을 활성화하는 경우, 오류 (작업)은 구성 전용으로 사용되며 해당 스크립트를 실행하지 않아야합니다가 발생합니다.

sast 또는 dependency_scanning 구저은 variables 또는 stage과 같은 변경 사항을 만들 수 있지만, 공유 rules를 정의하는 데 사용할 수는 없습니다.

확장성을 향상하기 위해 개선 중인 이슈가 있습니다. 우선 순위 설정에 도움을 주려면 이 문제에 투표할 수 있으며, 기여가 환영됩니다.

빈 취약점 보고서, 종속성 목록, 라이선스 목록 페이지

파이프라인에 allow_failure: false 옵션이 있는 작업을 수동 단계로 사용하고 이 작업이 완료되지 않은 경우, GitLab은 보안 보고서의 데이터로 페이지를 채우지 못할 수 있습니다. 이 경우, 취약점 보고서, 종속성 목록, 및 라이선스 목록 페이지가 비어 있을 수 있습니다. 이러한 보안 페이지는 파이프라인의 수동 단계에서 작업을 실행하여 채울 수 있습니다.

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