ZAP Automation
올 초에 처음 열린 ZAPCon 2021에서 ZAP Automation at Scale이란 세션이 있었습니다. 그 때 당시에는 그냥 ZAP Automation Addon을 통해 기존 자동화 작업을 좀 더 쉽게 구성할 수 있다 정도로 받아드렸었는데, 최근에 Scan Policy 관련해서 비슷한 고민을 하다보니 ZAP Automation의 장점이 눈에 보였습니다.
개인적으론 zap.sh나 API등을 이용해 자동화를 구성하던 방식보단 yaml 파일이 훨씬 직관적이고 관리하기도 좋기 때문에 가급적이면 제 시스템들에 ZAP Automation을 적용해보려고 합니다. 그래서 오늘은 ZAP Automation에 대한 내용으로 글을 작성해봅니다.
ZAP Automain이란?
ZAP Automation framework는 ZAP에서 제공하는 AddOn으로 ZAP의 자동화 과정을 좀 더 쉽게 구성할 수 있도록 yaml 포맷의 config 파일을 지원해주는 도구입니다. https://www.zaproxy.org/docs/desktop/addons/automation-framework/
기본적으로 4가지의 flag를 가지고 있고 이를 통해 ZAP에 yaml 파일을 적용하거나, 반대로 zap에서 yaml 파일을 export 할 수 있습니다.
flag | description |
---|---|
-autorun <filename> |
yaml 파일을 가지고 automain 작업을 수행합니다. |
-autogenmin <filename> |
특정한 parameter로 automation 파일을 생성합니다. |
-autogenmax <filename> |
모든 parameter로 automation 파일을 생성합니다. |
-autogenconf <filename> |
기존 config를 통해 automation 파일을 생성합니다. |
그래서 이것을 아래와 같이 ZAP 실행 시 flag로 같이 전달하여 수행할 수 있습니다.
./zap.sh -autorun config.yml
또한.. -cmd
옵션을 주면 GUI를 띄우지 않고 deamon 모드와 비슷하게 동작시킬 수 있습니다.
./zap.sh -autorun config.yml -cmd
Jobs
yaml 파일로 기존 config를 아래와 같이 설정할 수 있습니다.
Spider
- type: spider
parameters:
context:
url:
failIfFoundUrlsLessThan:
warnIfFoundUrlsLessThan:
maxDuration:
maxDepth:
maxChildren:
acceptCookies:
handleODataParametersVisited:
handleParameters:
maxParseSizeBytes:
parseComments:
parseGit:
parseRobotsTxt:
parseSitemapXml:
parseSVNEntries:
postForm:
processForm:
requestWaitTime:
sendRefererHeader:
threadCount:
userAgent:
ActiveScan
- type: activeScan
parameters:
context:
policy:
maxRuleDurationInMins:
maxScanDurationInMins:
addQueryParam:
defaultPolicy:
delayInMs:
handleAntiCSRFTokens:
injectPluginIdInHeader:
scanHeadersAllRequests:
threadPerHost:
policyDefinition:
defaultStrength:
defaultThreshold:
rules:
- id:
name:
strength:
threshold:
PassiveScan
passiveScan 은 설정 부분인 passiveScan-config
와 maxDuration 관련 부분인 passiveScan-wait
로 나뉘어져 있습니다. (굳이?)
- type: passiveScan-config
parameters:
maxAlertsPerRule: 10
scanOnlyInScope: true
maxBodySizeInBytesToScan:
rules:
- id:
name:
threshold:
- type: passiveScan-wait
parameters:
maxDuration: 5
AddOns
- type: addOns
parameters:
updateAddOns: true
install:
uninstall:
Env
env:
contexts :
- name: context 1
url:
includePaths:
excludePaths:
authentication:
parameters:
failOnError: true
failOnWarning: false
progressToStdout: true
더 디테일한 설정을 위해선..
ZAP의 실제 구동 관련 XML 파일은 아래 경로에 있습니다.
MacOS
~/Library/Application\ Support/ZAP/config.xml
Linux
~/.ZAP/config.xml
여기서 실제 구동에 들어가는 상세 xml 파일을 확인할 수 있는데요, 이를 참고하여 yml 파일의 내용을 출가로 구성할 수 있습니다.
Conclusion
분명히.. ZAP 자체가 원래 API화도 잘 되어있고, Documentation도 굉장히 잘 되어 있습니다. 그래서 그런지 기존 XML, API를 통한 상세 제어도 굉장히 유연했는데요, 이번 ZAP Automation으로 인해 yml파일 사용이 가능하고, 조금 더 쉽게 자동화 환경을 구성할 수 있게 되었습니다.
아 물론 많은 분들이 제가 ZAP에 대한 이야기를 많이 하는게 의아하실 수 있습니다. 보통 BurpSuite가 가장 좋은 도구로 알려져 있고, 저 또한 BurpSuite를 아주 많이 사용했던 유저였는데요.. 다른 글에도 이야기했었지만, ZAP이 아주 디테일한 설정이 가능해서 자동화 이외에도 개인 분석도구로도 정말 좋은 도구입니다. 익숙해지면 Burpsuite에 별로 손이 안갈겁니다. 아래 글 약간 읽어보시면, 조금은 저희 마음을 이해하실 수 있을거에요 🤩
참고로 사이먼이 발표한 내용도 한번 보시면 좋을 것 같습니다 :D