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에 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 대상 엔드포인트의 웹 서버 접근 로그를 검토하는 것이 도움이 될 수 있습니다.