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"

이 예시에서는 3072MB를 DAST에 할당합니다. -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를 사용하는지 확인하세요. 더 많은 정보는 이슈 358847에서 확인할 수 있습니다.

IPv6 지원 부족

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

DAST 스캔 활동에 대한 추가적인 통찰력

특정 시점에서 DAST 스캔이 무엇을 하고 있는지에 대한 추가 통찰력을 얻기 위해, DAST 대상 엔드포인트의 웹 서버 액세스 로그를 검토하는 것이 도움이 될 수 있습니다.