Why I Use ZAP

Army-Knife for AppSec

Application Security 또는 Pentest, Bugbounty 등 전반적인 Offensive security 관련 일에서 가장 핵심적인 도구는 Burp/ZAP 과 같은 Proxy 도구입니다. 초기에는 Proxy 도구라는 성향이 강했지만, 이제는 Proxy 도구라기 보단 Army-Knife 라고 보는게 더 적합할 것 같습니다.

(그래서 WHW에서도 Army-Knife 로 표기했죠)

어쨌던 이러한 도구들은 OWASP ZAP, PortSwigger BurpSuite 그리고 또 하나의 hetty 정도가 있습니다. hetty의 경우 시작된지 얼마 되지 않은 프로젝트라 아직은 조금 더 지켜봐야할 단계이긴 하구요.

이러한 도구들은 주로 MITM Proxy를 이용하여 Socket 위에 동작하는 다수의 프로토콜(HTTP/HTTPS/WebSocket/Etc..)을 대상으로 Request/Response 기반의 테스팅을 할 수 있다는 공통점을 가지고 있고, 더 나아가서 Security testing을 위해 En/Decoder, Fuzzing 등 굉장히 많은 기능들을 지원해주고 있습니다.

아무튼 이러다보니, AppSec을 하는 리서처/해커 입장에선 도구를 얼마나 더 잘 다루느냐도 개인적인 스펙 향상에 큰 영향을 미치기도 합니다. (디테일의 차이가 결과를 바꾸죠)

🤔 그래서 넌?

~ 2018 - BurpSuite 중독자

전 보안쪽을 시작했을 당시 즉, 초기부터 BurpSuite를 사용했던 것으로 기억납니다. 지금에 비하면 올드한 UI/UX이긴 하지만, 그래도 관련 도구중에선 가장 깔끔하다고 느꼈었던 것 같네요. (ZAP도 간간히 사용하긴 했는데, 주력은 아니였어요.)

~ 2020 - BurpSuite와 ZAP 동시사용

그러던 중 2018년 초기부터 도구에 대한 고민을 다시 시작했었습니다. 그 때 저의 생각으론 Burpsuite pro > ZAP > Burpsuite community 정도로 좋다고 생각했었고 분석 스타일의 변화를 주고자 한참동안 듀얼로 사용했었죠. (물론 듀얼은 정말 시스템 리소스를 많이 먹기 때문에 그리 추천하지는 않습니다..😁)

2020 ~ ZAP을 메인 분석 도구로 바꿈

그러던 ZAP 기능에 대해 하나씩 알아가다 보니 생각보다 좋았고, 저 평가 되어있던 도구란 생각이 많이 들었습니다. BurpSuite가 확장 기능이 많은게 장점이고 ZAP은 상대적으로 적은 확장 기능을 가지고 있습니다. 다만 이게 상반되어 오히려 필요한 확장 기능만 깔끔하게 들고 있는게 더 장점으로 느껴졌었네요.

세세한 부분은 아래서 더 이야기할게요! 아무튼 지금은 ZAP을 메인으로 사용합니다.
(어차피 회사에서 BurpSuite 라이선스를 계속 유지하고 있으니 과감하게 개인 라이선스를 버렸습니다. / 환율에 따라 1년에 40~50만원 사이인데 생각보단 커요.. )

😎 ZAP을 선택한 이유

사실 개인적으론 다크모드 지원이 가장 중요했습니다만, Burp는 2018년도 할로윈 때, ZAP은 2019년 초에 각각 다크모드 지원을 발표했습니다. 그래서 크게 상관없는 선택지가 되었네요.
(그래서 이짓거리도 했죠)

REST API

BurpSuite에 비해 ZAP은 굉장히 API 친화적입니다. 오픈소스인 부분도 한 몫한껀데요, 어찌되었던 도구 전반적인 기능에 대해 거의다 REST API로 제공해준다는 것은 큰 노력이 들어가는 부분이고, 활용성에 있어서도 굉장히 유용합니다.

대다수 기능에 대해 REST API를 지원합니다.

물론 BurpSuite의 경우 Enterprise(EP) 버전의 경우 GraphQL을 지원하기 때문에 비슷하긴하지만, EP 버전은 개인 분석용 도구라기 보단 DevSecOps를 고려하기 위해 만들어진 도구라 비교할 대상이 아닌 것 같긴 합니다.

HTTP Raw Request의 표현방법

이건 조금 사용해보셨으면 가장 먼저 눈의띄고, BurpSuite 사용자에겐 가장 불편한 부분이기도 합니다. 만약 제 사이트로 연결하는 Request를 본다면 아래와 같을겁니다.

BurpSuite

GET / HTTP/1.1
Host: www.hahwul.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Referer: https://www.hahwul.com/resources/
Cookie: _ga=GA1.2.117181321.1593755240; _gid=GA1.2.669019271.1606812260
Upgrade-Insecure-Requests: 1
If-Modified-Since: Wed, 02 Dec 2020 03:03:57 GMT
If-None-Match: W/"5fc7041d-10f73"


ZAP

GET https://www.hahwul.com/ HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: _ga=GA1.2.117181321.1593755240; _gid=GA1.2.669019271.1606812260
Upgrade-Insecure-Requests: 1
Host: www.hahwul.com


네 바로 URI Path 부분인데요, Burp의 경우 표준인 GET / HTTP/1.1 , ZAP은 GET https://www.hahwul.com/ HTTP/1.1 의 형태로 사용하고 있습니다. 이는 Burp는 target에 대한 정보를 별도로 저장하고 있기 때문에 가능한 부분입니다.

당연히 가독성적인 측면에선 내용 자체가 짧은 BurpSuite쪽의 표현방식이 좋을 수 있으나, 다른 도구로의 Pipeline, 분석한 이력을 기록하는 부분에선 ZAP의 방식이 대상을 명확하게 알 수 있어서 훨씬 좋다고 생각이 들었습니다.

Custom 환경

Burp/ZAP 모두 분석을 위한 도구이다 보니 세세한 설정과 커스텀 환경을 통해 엄청나게 많은 부분을 개선하고 편리하게 사용할 수 있습니다. 이는 디자인쪽 장인분들이 일러스트, 각종 편집 프로그램 등등을 사용할 떄 굉장히 빠르게 작업할 수 있는 것과 비슷한 이치인데요, 어차피 회사에서 일을하던, 버그바운티를 하던 프리랜서로 지내던 어차피 본인에게 주어진 시간은 한정적이고, 시간 안에 빠르게 분석할 수 있어야 결과와 개인의 삶 모두를 찾을 수 있는 방법이라고 생각합니다.

자 그러면 도구에 대한 세밀한 컨트롤이 필요한데, 당연히 오픈소스에 기능/REST 등의 지원 폭이 넓은 ZAP이 훨씬 유리합니다. (옵션 메뉴들 잘 찾아보시면 아시겠지만, ZAP의 설정은 정말 디테일합니다. 사이먼 만세!)

HUD and WebSwing

이건 ZAP의 방향성과도 같은 중요한 부분입니다. 제가 제작년 말에도 간단하게 포스팅하긴 했었는데, HUD의 목적은 결국 브라우저상에서 ZAP을 컨트롤하고 분석할 수 있는 환경을 구성하는 것 입니다. (차량용 HUD보다 상위호환이에요. 그건 컨트롤 기능이 미흡하잖아요..)

이게 처음엔 좀 어색한데, 사용하다보면 생각보다 긍정적인 면이 있습니다.

당장 활용을 많이하는건 아니지만, 고성능의 피씨 또는 서버를 ZAP Deamon 모드로 동직시키고, HUD를 이용해서 진단하는 방법도 가능합니다. 이는 분석을 진행하는 피씨의 리소스를 많이 줄일 수 있는 부분이라 필요한 부분이구요. (저의 경우는 맥북에 ZAP을 띄우고, 서버에 HUD용 ZAP을 별도로 띄어놓습니다 😎)

또한 WebSwing을 지원하기도 해서, 아래와 같이 브라우저로 ZAP을 쓰는 것 처럼 컨트롤 할수도 있구요.

💭 ZAP과 Burp의 비교하기

혹시나 고민하시는 분들을 위해서 주로 체크해야할 부분에 대해 간단하게 정리해봅니다.

  OWASP ZAP BurpSuite Comments
Proxy O O  
Passive Scan O O  
Active Scan O O 🎖 Only Pro/EP version
Scope 관리 O (Context) O (Scope)  
Project 관리 O O  
OOB Testing O (Callback) O (Collaborator) 🎖 다만 ZAP이 좀 부족함
Extensions O O 🎖  
Scripting O 🎖 O (일부만 지원)  
API O 🎖 O Only Pro/EP version
Dark Mode O O  
Manual testing O (Requester) O (Repeater)  
Datail Manual testing O O 🎖  
Fuzzing O (Fuzzing) O (Intruder / Turbo intruder)  
Dirsearch O (Forced Browse) 🎖 O (Intruder / Turbo intruder)  
Dashboard X O  
State manage O (Statd) X  
WebSocket O O  
Hotkeys O O  
Embedded Browser O O  
New tech O O 🎖 Burp가 지원이 빠름
외부도구 연동 O 🎖 O  
Customize O 🎖 O  
Price OpenSource Free/$399/$3999  

🚀 또 다른 선택지? Hetty!

올 중순부터 시작된 오픈소스 프로젝트입니다. go + nextjs 기반의 도구로 아직은 Army-Knife로 부르긴 좀 그렇고, Proxy 도구 수준으로 생각하시면 될 것 같습니다.

어쨌던 go 자체가 속도도 속도지만, 현재 대다수의 테스팅 도구들이 go 기반으로 만들어지기 때문에 라이브러리로 include하고, 연동되어 사용된다면 어쩌면 ZAP / Burp / Hetty 이렇게 3개가 메인 도구로 올라가는 일이 나타나지 않을까 싶습니다.

아직은 부족한 부분이 많지만, 아직 프로젝트 초기인만큼 직접 contribute 하시는 것도 배울 것도 많고 재미도 있을 것 같으니 추천드려봅니다. ZAP의 HUD와 웹스윙과 비슷한 느낌이 있지만, 결국 웹 기반으로 동작시키기 때문에 고성능 또는 scale 관리가 되는 클러스터 등에 올려놓고 다른 사람과 같이쓰기에도 괜찮은 도구입니다.

🙏🏼 Conclusion

어쨌던 주력도구의 선택은 굉장히 중요하고, 여러 도구를 경험하고 자기 스타일을 만드는게 현재까지 느끼기론 이 일을 함에 있어 중요한 부분이라고 생각됩니다. ZAP / Burp / Hetty 이 3개는 꼭 한번 써보시고, 결정해보시길 바래요 😎