How to set ZAP active scan input vector in daemon mode

What is ZAP Active Scan Input Vector?

Active Scan Input Vector는 ZAP에서 Active Scan 시 Injection 영역을 의미합니다. 물론 특정 Injection 취약점을 의미하는 건 아니고 점검할 부분이라고 보시는게 더 적합합니다. ZAP의 기본값은 URL + POST로 기본적으로 URI/Param 등에 대해서 테스트를 진행하지만 쿠키나 헤더등에는 테스트를 진행하지 않습니다. (시간이 오래걸려서, 이는 ZAP이 CICD에 많이 들어가기 때문)

그래서 보통 옵션에서 이를 일부 조정하여 사용하지만, CICD 환경 등 GUI 컨트롤이 어려운 경우엔 config 나 API를 통해 수정하는 방법을 사용할 수 있습니다.

Using cli options for startup

다른 config 값과 다르게 Active Scan Input Vector는 각 범위를 숫자의 합으로 처리합니다. (2진수로 옵션 값 처리하듯이) 제가 직접 설정하면서 config.xml 파일을 확인해서 얻은 값들은 아래와 같습니다.

  • URL + POST + Path = 19
  • URL + POST + Path + Headers = 27
  • URL + POST + Path + Headers + Cookie = 31

이를 config로 바꿔보면 이렇습니다.

scanner.injectable=31

만약 -config 를 통해 적용한다면..

./zap.sh -config scanner.injectable=31

-configfile 로 파일로 옵션을 관리하면 아래와 같이 파일을 만든 후 실행 시 옵션으로 포함해주면 됩니다.

testzap.conf

connection.timeoutInSecs=60
scanner.injectable=31
./zap.sh -configfile ./testzap.conf

Using API for runtime

당연히 ZAP은 대다수 옵션 설정 또한 API로 지원하고 있기 때문에 localhost:port로 부터 API Doc을 확인해보면 쉽게 찾을 수 있습니다. (제 기준에선 8090 포트)

localhost:8090 => ascan => action => setOptionTargetParamsInjectable

아래 API 이며 실제로 호출해보면 정상적으로 바뀌는걸 볼 수 있습니다.

http://localhost:8090/JSON/ascan/action/setOptionTargetParamsInjectable/?Integer=19

QueryParam?

좀 웃긴건 ADd Query Param의 경우 별도의 옵션 값으로 분리되어 있습니다.

scanner.addQueryParam=true

이럴거면 URL, Cookie, Headers 등도 다 true/false로 나눴으면 훨씬 보기 좋았을 것 같단 생각이 좀 많이 드네요. 이건 ZAP 개발팀쪽으로 건의 해야겠어요.