DAST 프록시 기반 분석기 문제 해결

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

다음은 고객 지원 사례에서 수집된 문제 해결 시나리오입니다. 여기에 언급되지 않은 문제가 발생하거나 여기의 정보로 문제를 해결할 수 없는 경우 도움을 받는 방법은 GitLab 고객 지원 페이지를 확인하세요.

DAST 작업 디버깅

DAST 작업에는 두 개의 실행 프로세스가 있습니다:

  • ZAP 서버.
  • ZAP 서버를 시작, 제어 및 중지하는 일련의 스크립트.

DAST_DEBUG CI/CD 변수를 사용하여 스크립트를 디버깅할 수 있습니다. 이는 작업을 해결하는 데 도움이 되며 스캔이 완료된 백분율을 나타내는 문장을 출력합니다. 변수 사용에 대한 자세한 내용은 DAST 템플릿 재정의을 참조하세요.

ZAP 서버의 디버그 모드는 DAST_ZAP_LOG_CONFIGURATION 변수를 사용하여 활성화할 수 있습니다. 다음 표에는 설정할 수 있는 값의 예와 출력에 미치는 영향에 대한 내용이 나와 있습니다. 세미콜론으로 구분하여 여러 값을 지정할 수 있습니다.

예를 들어, log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG입니다.

로그 구성 값 영향
log4j.rootLogger=DEBUG 모든 디버그 로깅 문장을 활성화합니다.
log4j.logger.org.apache.commons.httpclient=DEBUG ZAP 서버에서 수행된 모든 HTTP 요청 및 응답을 기록합니다.
log4j.logger.org.zaproxy.zap.spider.SpiderController=DEBUG 대상의 스파이더 스캔에서 찾은 URL을 기록합니다.
log4j.logger.com.crawljax=DEBUG Ajax Crawler 디버그 로깅 문장을 활성화합니다.
log4j.logger.org.parosproxy.paros=DEBUG ZAP 서버 프록시의 디버그 로깅 문장을 활성화합니다.
log4j.logger.org.zaproxy.zap=DEBUG 일반 ZAP 서버 코드의 디버그 로깅 문장을 활성화합니다.

메모리 부족 문제

기본적으로 DAST가 의존하는 ZAProxy에는 호스트의 총 메모리의 25%에 해당하는 메모리가 할당됩니다. 스캔 중에 대부분의 정보를 메모리에 유지하므로 대규모 애플리케이션을 스캔하는 동안 DAST 메모리가 부족해질 수 있습니다. 이로 인해 다음과 같은 오류가 발생합니다:

[zap.out] java.lang.OutOfMemoryError: Java heap space

다행히도, DAST_ZAP_CLI_OPTIONS CI/CD 변수를 사용하여 DAST에 사용 가능한 메모리량을 쉽게 늘릴 수 있습니다.

include:
  - template: DAST.gitlab-ci.yml

variables:
  DAST_ZAP_CLI_OPTIONS: "-Xmx3072m"

이 예제는 DAST에 3072 MB를 할당합니다. 필요한 메모리 양에 따라 -Xmx 뒤의 숫자를 변경하세요.

작업 시간 초과 문제

DAST 작업이 작업 시간을 초과하는 경우 스캔 기간을 줄이고 싶으면 블로그 글에서 DAST 스캔을 최적화하는 팁을 확인하세요.

경고 메시지 gl-dast-report.json: no matching files이 표시되는 경우

이에 대한 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참조하세요.

DAST CI 템플릿을 포함할 때 dast job: chosen stage does not exist 오류가 발생하는 경우

타 CI 파일에서 스테이지를 덮어쓰지 않도록 하기 위해, 최신 버전의 DAST CI 템플릿에서는 스테이지를 정의하지 않습니다. 최신 버전의 DAST.latest.gitlab-ci.yml을 최근에 사용하기 시작했거나 새로운 GitLab 주요 릴리스로 업그레이드한 경우 이 오류를 받게 됩니다. 다른 스테이지와 함께 dast 스테이지를 정의해야 합니다. DAST 스캔을 실행할 수 있도록 파이프라인에 애플리케이션이 설정되어 있다면, 해당 애플리케이션을 dast 스테이지 전에 배포해야 합니다.

stages:
  - deploy # DAST가 스캔할 실행 중인 애플리케이션이 필요합니다
  - dast

include:
  - template: DAST.latest.gitlab-ci.yml

DAST CI/CD 템플릿을 사용할 때 shell not found 오류가 발생하는 경우

문서에서 설명한대로 DAST CI/CD 템플릿을 포함하는 경우 작업이 실패할 수 있으며, 작업 로그에 다음과 같은 오류가 기록될 수 있습니다.

shell not found

이 오류를 피하려면 최신 안정 버전의 Docker를 사용하는지 확인하세요. 자세한 내용은 issue 358847를 참조하세요.

IPv6 지원 부족

기반이 되는 ZAProxy 엔진이 IPv6을 지원하지 않기 때문에 DAST는 IPv6 기반 애플리케이션을 스캔하거나 크롤할 수 없습니다.

DAST 스캔 활동의 추가 정보

특정 시점에서 DAST 스캔이 수행 중인 작업에 대한 추가 정보를 얻으려면 DAST 대상 엔드포인트의 웹 서버 액세스 로그를 검토하는 것이 도움이 될 수 있습니다.