How to set ZAP active scan input vector in daemon mode

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 개발팀쪽으로 건의 해야겠어요.