ZAP RootCA를 API와 Cli-Arguments로 제어하기

ZAP에 새로운 Addon이 추가됬습니다. 이 Addon을 이용하면 ZAP의 인증서, 즉 Root CA를 API나 Cli등으로 컨트롤할 수 있도록 기능이 지원됩니다. 이를 활용하면 Daemon 모드로 동작하거나 CI/CD Pipeline 등에서 사용 시 조금 더 쉽게 인증서 처리를 할 수 있게 됩니다.

Screenshot_20211205_015920

오늘은 ZAP의 RootCA, 즉 인증서를 API/CLI의 Arguments 등으로 쉽게 처리할 수 있는 Network addon과 어떻게 동작하는지 알아보도록 합시다 🚀

Network addon

Network addon은 특별한 기능이 있는 Addon은 아니고, ZAP의 Certificate 지원을 위해 추가된 Addon 입니다. REST API, Cli 그리고 options 패널에서의 설정이 추가됬고, 이를 통해서 API나 Cli 등으로 인증서 처리를 진행할 수 있습니다. CI/CD Pipeline 등 DevSecOps 환경에 구성된 상태라면 유용하게 사용할 수 있습니다.

ZAP Marketplace에서 Network addon을 설치하면 API와 Cli에서 RootCA 관련 처리 기능이 활성화됩니다.

Spec

가능/불가능한 기능을 정리해보면 이렇습니다.

Action API CLI
RootCA 재생성 O X
RootCA 가져오기 O O
RootCA Download/Dump - Only public key X O
RootCA Download/Dump - Include private key O O

RootCA 재생성

/JSON/network/action/generateRootCaCert 호출을 통해 인증서 재 생성이 가능합니다. 해당 API가 호출되면 ZAP의 RootCA가 교체됩니다.

GET http://localhost:8090/JSON/network/action/generateRootCaCert

파일로부터 RootCA 가져오기

RootCA 가져오기는 API, Cli 모두 지원하는 기능입니다. API는 /JSON/network/action/importRootCaCert 호출 시 filePath 파라미터를 통해 rootca 경로를 전달하고, Cli는 zap.sh 실행 시 -certload flag에 rootca 경로를 전달하여 ZAP 구동 또는 동작 중 지정한 RootCA를 사용할 수 있도록 설정할 수 있습니다.

GET http://localhost:8090/JSON/network/action/importRootCaCert/?filePath=<PATH>
./zap.sh -certload ./rootca

RootCA Download (api)

이번에 인증서 다운로드 API가 추가되었습니다. 사실 이는 Burpsuite는 예전부터 있던 기능인데, ZAP은 별도로 지원하지 않고 있던 상태여서 이 기종간 테스트 시 인증서를 옮기는데 약간 불편함이 있었습니다. 이제는 동일하게 API로 다운로드 가능하니 쉽게 처리할 수 있겠네요.

GET http://localhost:8090/OTHER/network/other/rootCaCert/

물론 하나의 인증서로 burp/zap 그리고 여러 기기를 동시에 사용하는 방법도 굉장히 편리하니 요건 아래 글을 한번 읽어주시면 좋을 것 같네요 :D

One custom certificate, Using all tools and your devices (for bug bounty/pentesting)

RootCA Dump (cli)

Cli에서 Dump 옵션은 2가지가 존재합니다.

  • -certpubdump <path>
  • -certfulldump <path>

-certpubdump는 public key만 덤프, -certfulldump는 private key가 포함된 RootCA를 덤프합니다.

./zap.sh -certfulldump /your/path/1234 -cmd
Found Java version 11.0.11
Available memory: 11924 MB
Using JVM args: -Xmx2981m
Root CA certificate written to /your/path/1234

dump 후 파일일 보면 인증서 파일임을 알 수 있습니다.

왜 필요한 기능인가요?

Runtime > CA Expire

ZAP을 서버에서 Daemon 등으로 사용하여 구동 시간이 인증서의 유효기간(최대 1년) 보다 길어지는 경우 의도하지 않게 인증서 에러가 발생할 수 있습니다. 그래서 만약 여러 디바이스에서 동일 인증서를 사용하는게 아니라면 부팅 시 마다 Root CA를 새로 생성해서 인증서를 갱신하는 것이 장애를 예방할 수 있는 좋은 포인트가 됩니다.

특수한 RootCA 사용이 필요한 경우

간혹 직접 생성한 RootCA 사용이 필요한 경우가 있습니다. 물론 GUI에서는 Import해서 쉽게 쓰겠지만, 여러대의 ZAP을 이용한 스캔 환경을 가지고 있다면 API나 Cli를 통해서 지정한 RootCA를 Import하고 즉시 사용할 수 있다는건 정말 매력적인 부분입니다.

Conclusion

제작년쯤인가 부터 ZAP이 Addon을 통해 업데이트 주기가 굉장히 빨라졌습니다. Burpsuite에 비해 모자랐던 부분들이 점점 빠르게 매꿔지면서 이제는 Burpsuite pro와 직접 비교해도 크게 차이가 없을 것 같단 생각이 듭니다. (물론 이건 개인의 취향이 가장 크겠지만요)

제가 원한 기능도 Network layer단에서 처리가 필요하다고 하는데, 과연 이 Addon을 통해서 업데이트될지, Core에서 업데이트될지 조금 궁금하긴 하네요 :D

https://twitter.com/psiinon/status/1464280720596160521