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 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"

이 예시에서는 DAST에 3072MB를 할당합니다. 필요한 메모리 양에 따라 -Xmx 뒤의 숫자를 변경하십시오.

작업 제한 시간 초과

DAST 작업이 작업 제한 시간을 초과하면 스캔 기간을 줄여야 하는 경우, 블로그 게시물에서 DAST 스캔을 최적화하는 몇 가지 팁을 공유했습니다.

gl-dast-report.json: no matching files 경고 메시지 획득

이에 대한 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참조하십시오.

DAST CI 템플릿 포함 시 dast job: chosen stage does not exist 오류 획득

기존의 다른 CI 파일에서 stage를 덮어쓰지 않게 하기 위해 DAST CI 템플릿의 최신 버전은 stage을 정의하지 않습니다. 최근에 DAST.latest.gitlab-ci.yml을 사용하기 시작하거나 GitLab의 새로운 주요 릴리스로 업그레이드하고 이 오류를 받기 시작한 경우, 다른 stage와 함께 dast stage를 정의해야 합니다. DAST를 스캔할 실행 중인 애플리케이션이 있어야 합니다. 파이프라인에 애플리케이션이 설정되어 있으면 dast stage 단계에서 배포되어 있어야 합니다:

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 대상 엔드포인트의 웹 서버 액세스 로그를 확인하는 것이 도움이 될 수 있습니다.