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

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하세요.

대상 브랜치 변경 사항 포함

대상 브랜치 보안 보고서가 오래됨

작업이 실패하거나 새로운 경고가 발생한 경우 등 여러 이유로 인해 이런 상황이 발생할 수 있습니다. Merge Request에서 보안 보고서가 오래된 것으로 표시되면 대상 브랜치에서 새로운 파이프라인을 실행해야 합니다. 새 파이프라인을 실행하려면 새 파이프라인을 선택하세요.

새 파이프라인 실행

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

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

이 메시지는 종종 파일이 없어 업로드할 파일이 없음 오류와 함께 나타납니다. 또한 JSON 보고서가 생성되지 않은 이유를 나타내는 기타 오류 또는 경고 메시지가 앞서 나타날 수 있습니다. 이러한 메시지를 확인하려면 전체 작업 로그를 확인하세요. 이러한 메시지를 찾을 수 없으면 SECURE_LOG_LEVEL: "debug"사용자 정의 CI/CD 변수로 설정한 후 실패한 작업을 다시 시도하세요. 이는 추가 정보를 제공하여 추가 조사를 할 수 있습니다.

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로 전환

템플릿을 덮어쓰기하여 작업 실행을 제어하는 경우, 이전의 only 또는 except 구문은 더 이상 호환되지 않으며 새로운 rules 문법으로 전환해야 합니다.

작업을 main에서만 실행하도록 하는 override의 이전 구문은 다음과 같이 보일 것입니다:

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

# 스캔이 main 또는 Merge Request에서만 실행되도록 합니다
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

위 구성을 새로운 rules 구문으로 전환하면 override는 다음과 같이 작성됩니다:

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

# 스캔이 main 또는 Merge Request에서만 실행되도록 합니다
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 구문으로 전환하려면 override를 다음과 같이 다시 작성하세요:

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 위젯, 또는 보안 대시보드에 표시됩니다.

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

GitLab 13.4에서의 변경 사항Security/Dependency-Scanning.gitlab-ci.ymlSecurity/SAST.gitlab-ci.yml 템플릿에서 sast 또는 dependency_scanning 작업을 rules 속성을 설정하여 활성화하는 경우, (작업)은 구성에만 사용되며 스크립트를 실행해서는 안됩니다 오류가 발생한다는 것을 의미합니다.

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

개선 가능성을 위해 개선 가능성을 제기한 이슈가 있습니다. 우선 순위 정하기에 도움을 주기 위해 해당 이슈에 투표할 수 있으며, 기여를 환영합니다.

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

파이프라인에 allow_failure: false 옵션을 가진 작업을 매뉴얼 단계로 사용하고 이 작업이 완료되지 않은 경우, GitLab은 보안 보고서에서 데이터를 열거하기 어렵습니다. 이러한 경우, 취약점 보고서, 의존성 디렉터리, 및 라이선스 디렉터리 페이지가 비어 있습니다. 이러한 보안 페이지는 파이프라인의 매뉴얼 단계에서 작업을 실행하여 채울 수 있습니다.

해당 시나리오를 처리하는 데 개설된 이슈가 있습니다. 우선 순위 정하기에 도움을 주기 위해 해당 이슈에 투표할 수 있으며, 기여를 환영합니다.