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

References