ZAP context based scanning

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 트리에서 우클릭을 통해 스캔을 진행시킬 수 있습니다.

Spidering...

Active scanning...

Concurrence

History 탭을 보면 다수 host에 대해 동시에 스캔을 진행하는 걸 볼 수 있는데, 이는 ZAP이 스캔에서 동시에 여러 호스트를 스캔할 수 있도록 지원해주기 때문입니다. 이에 대한 설정은 Options > Active Scan 에서 Number of Hosts Scanned Concurrently 에서 조정할 수 있습니다.

Conclusion

ZAP이 거의 대다수 기능을 REST API로 지원하기 떄문에 이 Context에 대한 부분도 쉽게 제어할 수 있습니다. 이를 활용하면 CI/CD 단계에서도 Context 단위의 스캐닝을 쉽게 진행할 수 있습니다. 개인적으로 보기엔 활용 가치가 높습니다 :D