DAST 프록시 기반 분석기 문제 해결
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에 3072 MB를 할당합니다.
-Xmx
뒤의 숫자를 필요한 메모리 양으로 변경하세요.
DAST 작업이 작업 타임아웃 초과
DAST 작업이 작업 타임아웃을 초과하고 스캔 시간을 줄여야 하는 경우, 블로그 게시물에서 DAST 스캔 최적화에 대한 몇 가지 팁을 공유했습니다.
경고 메시지 gl-dast-report.json: no matching files
이에 대한 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참조하세요.
dast job: chosen stage does not exist
오류 발생 시 DAST CI 템플릿 포함
다른 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 대상 엔드포인트의 웹 서버 접근 로그를 검토하는 것이 도움이 될 수 있습니다.