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

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

다음은 고객 지원 사례에서 수집된 문제 해결 시나리오입니다. 여기서 다루지 않은 문제가 발생하거나 여기에 있는 정보가 문제를 해결하지 못하는 경우 지원 티켓을 만들어주세요. 자세한 내용은 GitLab Support 페이지를 참조하세요.

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 크롤러 디버그 로깅 문구 활성화
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에 3072MB를 할당합니다. 필요한 메모리 양에 따라 -Xmx 뒤의 숫자를 변경하세요.

DAST 작업이 작업 제한 시간을 초과하는 경우

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을 사용하기 시작했거나 새 메이저 릴리스로 업그레이드하고 이 오류가 발생하는 경우, 다른 단계와 함께 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 대상 엔드포인트의 웹 서버 액세스 로그를 검토하는 것이 도움이 될 수 있습니다.