InfoGrab DocsInfoGrab Docs

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

요약

애플리케이션 보안 기능을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. GitLab 분석기가 출력하는 로그의 상세 수준은 SECURE_LOG_LEVEL 환경 변수로 결정됩니다. 심각도가 높은 순서부터 로깅 수준은 다음과 같습니다.

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

로깅 수준#

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

심각도가 높은 순서부터 로깅 수준은 다음과 같습니다.

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

디버그 수준 로깅 켜기#

Warning

디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에 job 이 사용할 수 있는 환경 변수의 내용과 기타 시크릿이 포함될 수 있습니다. 이 출력은 GitLab 서버에 업로드되며 job 로그에서 볼 수 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한.

디버그 수준 로깅을 켜려면 .gitlab-ci.yml 파일에 다음을 추가합니다.

variables:
  SECURE_LOG_LEVEL: "debug"

이렇게 하면 모든 GitLab 분석기가 모든 메시지를 출력합니다. 자세한 내용은 로깅 수준을 참고합니다.

종료 코드 1로 실패하는 Secure job#

Secure job 이 실패하는데 원인이 분명하지 않다면 다음 단계를 따릅니다.

  1. 디버그 수준 로깅을 활성화합니다.
  2. job을 실행합니다.
  3. job 출력을 확인합니다.
  4. debug 로그 수준을 제거해 기본값인 info로 되돌립니다.

오래된 보안 보고서#

머지 리퀘스트에 대해 생성된 보안 보고서가 오래되면, 머지 리퀘스트의 보안 스캔 보고서에 경고 메시지가 표시되고 적절한 조치를 취하도록 안내합니다.

이 상황은 두 가지 경우에 발생합니다.

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

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

이 문제를 해결하려면 리베이스하거나 병합해 대상 브랜치의 변경 사항을 반영합니다.

대상 브랜치 보안 보고서가 오래된 경우#

job 실패나 새로운 보안 권고 등 여러 원인으로 발생할 수 있습니다. 머지 리퀘스트에서 보안 보고서가 오래되었다고 표시되면 대상 브랜치에서 새 파이프라인을 실행해야 합니다. new pipeline을 선택해 새 파이프라인을 실행합니다.

… report.json: no matching files 경고 메시지 발생#

Warning

디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에 job 이 사용할 수 있는 환경 변수의 내용과 기타 시크릿이 포함될 수 있습니다. 이 출력은 GitLab 서버에 업로드되며 job 로그에서 볼 수 있습니다.

이 메시지 뒤에는 No files to upload 오류가 이어지는 경우가 많고, 그 앞에는 JSON 보고서가 생성되지 않은 이유를 알려 주는 다른 오류나 경고가 나타납니다. job 로그 전체에서 이러한 메시지를 확인합니다. 해당 메시지를 찾지 못했다면 프로젝트 CI/CD 변수로 SECURE_LOG_LEVEL: "debug"를 설정한 뒤 실패한 job을 다시 실행합니다. 그러면 추가 정보를 확인해 더 자세히 조사할 수 있습니다.

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

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

Unable to run pipeline

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

이 오류는 포함된 job의 rules 구성이 더 이상 사용되지 않는 only 또는 except 구문으로 재정의되었을 때 나타납니다. 이 문제를 해결하려면 다음 중 하나를 수행합니다.

자세한 내용은 SAST job 재정의를 참고합니다.

only/except 구문을 rules로 전환#

job 실행을 제어하기 위해 템플릿을 재정의할 때, 기존의 only 또는 except는 더 이상 호환되지 않으므로 rules 구문으로 전환해야 합니다.

job 이 main 에서만 실행되도록 제한하려는 재정의라면, 기존 구문은 다음과 비슷합니다.

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

# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

기존 구성을 새 rules 구문으로 전환하면 재정의는 다음과 같이 작성합니다.

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

# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_MERGE_REQUEST_ID

job 이 태그가 아닌 브랜치에서만 실행되도록 제한하려는 재정의라면, 다음과 비슷합니다.

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

# Ensure that the scanning is not executed on tags
spotbugs-sast:
  except:
    - tags

새 rules 구문으로 전환하면 재정의는 다음과 같이 다시 작성합니다.

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

# Ensure that the scanning is not executed on tags
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_TAG == null

자세한 내용은 rules를 참고합니다.

더 이상 사용되지 않는 버전으로 템플릿 고정#

최신 지원을 받으려면 rules로 마이그레이션합니다.

CI/CD 구성을 즉시 업데이트할 수 없다면, 이전 템플릿 버전으로 고정하는 여러 우회 방법이 있습니다. 예를 들면 다음과 같습니다.

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

또한 버전별 레거시 템플릿이 담긴 전용 프로젝트도 제공됩니다. 오프라인 환경이나 Auto DevOps를 사용하려는 경우에 활용할 수 있습니다.

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

취약점이 발견되었는데도 job 이 성공하는 경우 파이프라인을 실패시키는 방법#

이 상황에서 job 이 성공하는 것은 기본 동작입니다. job의 상태는 분석기 자체의 성공 또는 실패를 나타냅니다. 분석기 결과는 job 로그, 머지 리퀘스트 보고서, 보안 대시보드에 표시됩니다.

오류: job is used for configuration only, and its script should not be executed#

Security/Dependency-Scanning.gitlab-ci.yml과 Security/SAST.gitlab-ci.yml 템플릿을 사용하는 경우, rules 속성을 설정해 sast 나 dependency_scanning job을 활성화하면 (job) is used for configuration only, and its script should not be executed 오류와 함께 실패합니다.

sast 또는 dependency_scanning 스탠자는 variables 나 stage 변경처럼 SAST 전체 또는 의존성 스캐닝 전체에 변경을 적용할 때 사용할 수 있지만, 공유 rules를 정의하는 데는 사용할 수 없습니다.

확장성 개선을 위한 이슈가 열려 있습니다. 우선순위 결정에 도움이 되도록 이슈에 추천할 수 있으며, 기여도 환영합니다.

빈 취약점 보고서, 의존성 목록 페이지#

파이프라인에 allow_failure: false 옵션이 설정된 job 이 포함된 수동 단계가 있고 해당 job 이 완료되지 않았다면, GitLab은 보안 보고서 데이터로 해당 페이지를 채울 수 없습니다. 이 경우 취약점 보고서와 의존성 목록 페이지가 비어 있습니다. 파이프라인의 수동 단계에서 job을 실행하면 이 보안 페이지를 채울 수 있습니다.

이 시나리오를 처리하기 위한 이슈가 열려 있습니다. 우선순위 결정에 도움이 되도록 이슈에 추천할 수 있으며, 기여도 환영합니다.

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

GitLab v19.5
Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

애플리케이션 보안 기능을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. GitLab 분석기가 출력하는 로그의 상세 수준은 SECURE_LOG_LEVEL 환경 변수로 결정됩니다. 심각도가 높은 순서부터 로깅 수준은 다음과 같습니다.

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

로깅 수준#

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

심각도가 높은 순서부터 로깅 수준은 다음과 같습니다.

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

디버그 수준 로깅 켜기#

Warning

디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에 job 이 사용할 수 있는 환경 변수의 내용과 기타 시크릿이 포함될 수 있습니다. 이 출력은 GitLab 서버에 업로드되며 job 로그에서 볼 수 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한.

디버그 수준 로깅을 켜려면 .gitlab-ci.yml 파일에 다음을 추가합니다.

variables:
  SECURE_LOG_LEVEL: "debug"

이렇게 하면 모든 GitLab 분석기가 모든 메시지를 출력합니다. 자세한 내용은 로깅 수준을 참고합니다.

종료 코드 1로 실패하는 Secure job#

Secure job 이 실패하는데 원인이 분명하지 않다면 다음 단계를 따릅니다.

  1. 디버그 수준 로깅을 활성화합니다.
  2. job을 실행합니다.
  3. job 출력을 확인합니다.
  4. debug 로그 수준을 제거해 기본값인 info로 되돌립니다.

오래된 보안 보고서#

머지 리퀘스트에 대해 생성된 보안 보고서가 오래되면, 머지 리퀘스트의 보안 스캔 보고서에 경고 메시지가 표시되고 적절한 조치를 취하도록 안내합니다.

이 상황은 두 가지 경우에 발생합니다.

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

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

이 문제를 해결하려면 리베이스하거나 병합해 대상 브랜치의 변경 사항을 반영합니다.

대상 브랜치 보안 보고서가 오래된 경우#

job 실패나 새로운 보안 권고 등 여러 원인으로 발생할 수 있습니다. 머지 리퀘스트에서 보안 보고서가 오래되었다고 표시되면 대상 브랜치에서 새 파이프라인을 실행해야 합니다. new pipeline을 선택해 새 파이프라인을 실행합니다.

… report.json: no matching files 경고 메시지 발생#

Warning

디버그 로깅은 심각한 보안 위험이 될 수 있습니다. 출력에 job 이 사용할 수 있는 환경 변수의 내용과 기타 시크릿이 포함될 수 있습니다. 이 출력은 GitLab 서버에 업로드되며 job 로그에서 볼 수 있습니다.

이 메시지 뒤에는 No files to upload 오류가 이어지는 경우가 많고, 그 앞에는 JSON 보고서가 생성되지 않은 이유를 알려 주는 다른 오류나 경고가 나타납니다. job 로그 전체에서 이러한 메시지를 확인합니다. 해당 메시지를 찾지 못했다면 프로젝트 CI/CD 변수로 SECURE_LOG_LEVEL: "debug"를 설정한 뒤 실패한 job을 다시 실행합니다. 그러면 추가 정보를 확인해 더 자세히 조사할 수 있습니다.

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

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

Unable to run pipeline

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

이 오류는 포함된 job의 rules 구성이 더 이상 사용되지 않는 only 또는 except 구문으로 재정의되었을 때 나타납니다. 이 문제를 해결하려면 다음 중 하나를 수행합니다.

자세한 내용은 SAST job 재정의를 참고합니다.

only/except 구문을 rules로 전환#

job 실행을 제어하기 위해 템플릿을 재정의할 때, 기존의 only 또는 except는 더 이상 호환되지 않으므로 rules 구문으로 전환해야 합니다.

job 이 main 에서만 실행되도록 제한하려는 재정의라면, 기존 구문은 다음과 비슷합니다.

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

# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
  only:
    refs:
      - main
      - merge_requests

기존 구성을 새 rules 구문으로 전환하면 재정의는 다음과 같이 작성합니다.

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

# Ensure that the scanning is only executed on main or merge requests
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_MERGE_REQUEST_ID

job 이 태그가 아닌 브랜치에서만 실행되도록 제한하려는 재정의라면, 다음과 비슷합니다.

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

# Ensure that the scanning is not executed on tags
spotbugs-sast:
  except:
    - tags

새 rules 구문으로 전환하면 재정의는 다음과 같이 다시 작성합니다.

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

# Ensure that the scanning is not executed on tags
spotbugs-sast:
  rules:
    - if: $CI_COMMIT_TAG == null

자세한 내용은 rules를 참고합니다.

더 이상 사용되지 않는 버전으로 템플릿 고정#

최신 지원을 받으려면 rules로 마이그레이션합니다.

CI/CD 구성을 즉시 업데이트할 수 없다면, 이전 템플릿 버전으로 고정하는 여러 우회 방법이 있습니다. 예를 들면 다음과 같습니다.

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

또한 버전별 레거시 템플릿이 담긴 전용 프로젝트도 제공됩니다. 오프라인 환경이나 Auto DevOps를 사용하려는 경우에 활용할 수 있습니다.

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

취약점이 발견되었는데도 job 이 성공하는 경우 파이프라인을 실패시키는 방법#

이 상황에서 job 이 성공하는 것은 기본 동작입니다. job의 상태는 분석기 자체의 성공 또는 실패를 나타냅니다. 분석기 결과는 job 로그, 머지 리퀘스트 보고서, 보안 대시보드에 표시됩니다.

오류: job is used for configuration only, and its script should not be executed#

Security/Dependency-Scanning.gitlab-ci.yml과 Security/SAST.gitlab-ci.yml 템플릿을 사용하는 경우, rules 속성을 설정해 sast 나 dependency_scanning job을 활성화하면 (job) is used for configuration only, and its script should not be executed 오류와 함께 실패합니다.

sast 또는 dependency_scanning 스탠자는 variables 나 stage 변경처럼 SAST 전체 또는 의존성 스캐닝 전체에 변경을 적용할 때 사용할 수 있지만, 공유 rules를 정의하는 데는 사용할 수 없습니다.

확장성 개선을 위한 이슈가 열려 있습니다. 우선순위 결정에 도움이 되도록 이슈에 추천할 수 있으며, 기여도 환영합니다.

빈 취약점 보고서, 의존성 목록 페이지#

파이프라인에 allow_failure: false 옵션이 설정된 job 이 포함된 수동 단계가 있고 해당 job 이 완료되지 않았다면, GitLab은 보안 보고서 데이터로 해당 페이지를 채울 수 없습니다. 이 경우 취약점 보고서와 의존성 목록 페이지가 비어 있습니다. 파이프라인의 수동 단계에서 job을 실행하면 이 보안 페이지를 채울 수 있습니다.

이 시나리오를 처리하기 위한 이슈가 열려 있습니다. 우선순위 결정에 도움이 되도록 이슈에 추천할 수 있으며, 기여도 환영합니다.