Security Crawl Maze와 ZAP

이번달 초 쯤이였나요? ZAP의 메인 개발자인 Simon이 이런 트윗을 남겼었습니다.

Anyone able to recommend any open source tools that are good at crawling modern web apps? Out of the box rather than toolkits. Apart from @zaproxy I’m looking for comparisons 😁

제가 아는 선에선 ZAP과 Burpsuite의 Spider/Crawler가 가장 좋다고 느꼈기 때문에 ZAP과 Burpsuite를 이야기 했었는데요. 문뜩 이 때 ZAP이 Spidering을 개선할 것 같은 느낌이 들었었습니다.

시간이 좀 지난 후 ZAP은 StackHawk ZAP Fund를 통해 오래된 버그들에 대한 버그바운티(우리가 아는 버그바운티랑 약간 달라요. 오픈소스 컨트리뷰트에 대한 리워드입니다)를 진행하게 되었고. 여기에 Security Crawl Maze의 커버리지를 늘리기 위한 이슈도 보입니다.

그래서 오늘은 이 Security Crawl Maze가 뭔지 이야기해볼까 합니다 😊

Security Crawl Maze

Security Crawl Maze는 구글에서 만든 Testbed 프로젝트로 보안 스캐너 내 크롤링/스파이더링의 성능 측정과 개선을 위한 프로젝트입니다.

  • https://security-crawl-maze.app
  • https://github.com/google/security-crawl-maze

웹 서비스로 단순한 Static 페이지부터 여러가지 FE 프레임워크와 트릭, DOM 구조로 이루어져 있습니다.

link 헤더나 refresh 헤더도 있네요.

Structure

구조 자체는 굉장히 단순합니다. .found 확장자의 페이지가 실제로 찾아야할 페이지이고, 나머지는 이를 가리키는 페이지들입니다. 그리고 이런 .found 페이지는 test 하위 경로에 위치합니다.

그래서 test 하위의 페이지 수를 세면 Maze를 해결한 갯수를 측정할 수 있습니다.

Online Env

Github에 소스코드로 제공되지만 구글이 구성해둔 퍼블릭 환경도 있습니다.

https://security-crawl-maze.app

Local Env

도커 이미지로 제공하고 있어서 쉽게 로컬에 구성할 수 있습니다.

git clone https://github.com/google/security-crawl-maze
cd security-crawl-maze
docker build .

build

run

API

단순히 SiteTree 만이 아닌 크롤링 시 수집될 것으로 예상되는 URL 리스트 API로 제공합니다.

GET http://<HOST>/fetch-expected-results?path=<PATH> HTTP/1.1

/html/body/ 하위에서 탐지할 수 있는 URLs

ZAP’s Action

ZAP Team은 Security Crawl Maze를 이용해서 Spidering의 성능을 개선하려고 하는 것 같습니다. 하위 경로를 얼마나 잘 찾는지 나타내는 페이지를 만들어두고, 이를 해결해가며 전체적인 Spidering 성능을 올리려는 것 같네요.

https://www.zaproxy.org/docs/scans/crawlmaze/

약간 의외였던건 SPA 등의 앱 때문에 Ajax Spidering이 느려도 결과를 많이 잡을 줄 알았지만, 오히려 기본 Spidering이 준수하게 잘 찾아내는 것 같네요.

Conclusion

Security Crawl Maze가 오래된 프로젝트이지만 이제서야 알게 되었네요. 혹시나 웹 스파이더링/크롤링을 하는 도구들을 만드신다면 주기적인 테스트나 CI에 연동하여 성능 테스트를 해보는 것도 추천드려요.

References

  • https://github.com/zaproxy/zaproxy/issues/7152
  • https://www.zaproxy.org/docs/scans/crawlmaze/
  • https://twitter.com/psiinon/status/1502231110146793474