- DAST 작업 디버깅
- 메모리 부족 문제
- DAST 작업이 작업 타임아웃 초과
- 경고 메시지
gl-dast-report.json: no matching files
dast job: chosen stage does not exist
오류 발생 시 DAST CI 템플릿 포함- DAST CI/CD 템플릿 사용 시
shell not found
오류 발생 - IPv6 지원 부족
- DAST 스캔 활동에 대한 추가 통찰
DAST 프록시 기반 분석기 문제 해결
다음 문제 해결 시나리오는 고객 지원 사례에서 수집되었습니다.
여기에서 다루지 않는 문제가 발생하거나 여기의 정보로 문제가 해결되지 않는 경우, 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 대상 엔드포인트의 웹 서버 접근 로그를 검토하는 것이 도움이 될 수 있습니다.