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