ZAP에서의 quickscan이나 spider, active scan 등을 기본적으로 다중 URL을 지원하지 않습니다. 그래서 예전에 아래 포스트와 같은 방법으로 API를 이용한 방법, 그리고 별도의 도구를 만들어서 스캔하는 방법을 사용하곤 했습니다.
https://www.hahwul.com/2020/08/22/scanspider-and-active-scan-multiple-targets-in-zap/
단 이 방식은 큰 단점이 하나 존재했는데, ZAP이 스캔 요청을 받아서 무조건 처리하기 떄문에 10개, 50개, 100개 등 갯수가 늘어난다면 ZAP 자체의 부하가 엄청나게 됩니다. (모두 동시에 처리하려고 하기 떄문에)
그래서 이것저것 찾아보던 중 지정된 수의 동시성을 유지하면서 다중 URL을 스캔할 수 있는 방법이 있어 글로 작성해둡니다.
ZAP context
ZAP에서의 context는 BurpSuite의 Scope와 유사합니다. (또는 프로젝트) 어찌보면 조금 더 넓은 개념인데, 기본적으로 Scope와 같이 점검할 대상이라는 의미 이외에도 해당 context에서 사용할 룰이나 각종 값들을 지정하고 테스트할 수 있도록 설정할 수 있습니다.
저도 최근까진 context를 단순히 scope의 목적으로만 사용하다가 이것저것 테스트해보고 사용해보면서 기능들을 손이 붙도록 익히는 중인데 context를 기반으로 여러 대상에 대해 스캔할 수 있는 방법이 있었습니다. (사실 설정에서 concurrence 관련 옵션이 있는게 좀 이상했죠.. 다중 host 스캔을 지원하지 않으면서 동시성 옵션이 있는게 이상..)
Multiple URL scanning with context
뭐 어려운건 아닙니다. 간단하게 봅시다.
Add URLs to context
원하는 URL & host 들을 하나의 context에 포함시켜줍니다. 보통은 새로 하나 만드는게 깔끔합니다.
추가하면 아래와 같이 URL들이 포함된걸 확인할 수 있습니다.
Spidering and Scanning with Context
spider / ajaxspider / active scan 에서 context 기반으로 스캔을 진행할 수 있습니다. 아래 탭의 New scan(spider, etc..) 나 좌측 context 트리에서 우클릭을 통해 스캔을 진행시킬 수 있습니다.
Concurrence
History 탭을 보면 다수 host에 대해 동시에 스캔을 진행하는 걸 볼 수 있는데, 이는 ZAP이 스캔에서 동시에 여러 호스트를 스캔할 수 있도록 지원해주기 때문입니다. 이에 대한 설정은 Options
> Active Scan
에서 Number of Hosts Scanned Concurrently
에서 조정할 수 있습니다.
Conclusion
ZAP이 거의 대다수 기능을 REST API로 지원하기 떄문에 이 Context에 대한 부분도 쉽게 제어할 수 있습니다. 이를 활용하면 CI/CD 단계에서도 Context 단위의 스캐닝을 쉽게 진행할 수 있습니다. 개인적으로 보기엔 활용 가치가 높습니다 :D