ZAP Automation GUI

ZAP Automation GUI

최근에 ZAP Automation framework가 0.4 버전으로 업데이트 됬습니다. 사실 제가 0.4 버전을 기다린 것은 아래 내용 때문인데요, StackHawk에서 스트리밍으로 진행한 Automation Framework에 대한 소개 내용 중 ZAP에서 UI로 Automation Framework를 컨트롤하는 장면이 잡혔었고, Simon에게 물어보니 0.4 버전대 기능이라고 합니다.

https://twitter.com/hahwul/status/1423145897232265220

오늘은 Automation Framework에 새로 추가된 GUI 부분에 대해서 살펴보려고 합니다.

ZAP Automation Framework

우선 이 Automation Frakework에 대해 간략히 소개하자면, yaml 포맷의 config 파일을 두고 ZAP 내부의 스캔이나 설정등을 자동으로 처리할 수 있는 기능을 의미합니다. 이 과정은 생각보다 디테일해서 개인 분석 환경을 빠르게 구성하거나, CI/CD에 연동되어 DAST로 동작 시 활용할 부분도 많습니다.

관련해선 제가 전에 작성한 글이 있으니 참고해주시길 바래요 😁

https://www.hahwul.com/2021/06/22/zap-automation/

Automation GUI

일단 0.4 버전으로 업데이트하면 아래와 같이 하단 탭에 Automation이 추가됩니다.

GUI에서 Automaion은 Plan 단위로 동작합니다. Plan은 미리 정의된 템플릿을 사용하거나 또는 사용자가 커스텀할 수 있으며 아래 이미지처럼 여러가지 Job이 세팅되어 있습니다. 이는 ZAP Core 또는 각 AddOn에서 Automation을 지원하는 경우에 나타나며 이를 기반으로 Plan에 원하는 Job을 추가하여 세팅할 수 있습니다.

미리 정의된 Plan을 선택하면 Job도 정해진 세팅에 맞춰 선택됩니다.

저는 Baseline Plan으로 하나 생성해봤습니다. 아래 이미지에도 표기했지만, 미리 정의된 Plan을 사용하여도 Job이나 Test를 컨트롤할 수 있습니다.

실행하면 정의된 포맷에 맞게 작업을 진행하는 것을 볼 수 있습니다.

이제 저장버튼을 눌러서 yaml 파일을 저장하고, 확인해보면 automation config yaml 파일이 생성된 것을 볼 수 있습니다.

---
env:
  contexts:
  - name: "Test"
    urls:
    - "https://www.hahwul.com"
    includePaths:
    - "https://www.hahwul.com.*"
    excludePaths: []
  parameters:
    failOnError: true
    failOnWarning: false
    progressToStdout: true
  vars: {}
jobs:
- parameters:
    updateAddOns: true
  name: "addOns"
  type: "addOns"
- parameters:
    scanOnlyInScope: true
    enableTags: false
  rules: []
  name: "passiveScan-config"
  type: "passiveScan-config"
- parameters: {}
  tests:
  - onFail: "INFO"
    statistic: "automation.spider.urls.added"
    operator: ">="
    value: 100
    type: "stats"
    name: "At least 100 URLs found"
  name: "spider"
  type: "spider"
- parameters: {}
  tests:
  - onFail: "INFO"
    statistic: "spiderAjax.urls.added"
    operator: ">="
    value: 100
    type: "stats"
    name: "At least 100 URLs found"
  name: "spiderAjax"
  type: "spiderAjax"
- parameters: {}
  name: "passiveScan-wait"
  type: "passiveScan-wait"
- parameters:
    template: "modern"
    reportDir: "/Users/hahwul"
  name: "report"
  type: "report"

이제 zap.sh로 cli 실행을 할 때 -autorun 플래그를 주어 이 yaml 파일을 넘겨주면 ZAP 실행과 동시에 아까 만들었던 작업이 그대로 수행됩니다.

./zap.sh -autorun hahwul.com-test.yaml

-cmd flag를 같이 넘겨주면 deamon 모드로 동작하기 떄문에 ZAP UI를 띄우지 않고 cli로만 수행하고 지정한 리포트 디렉토리에 결과 파일을 받을 수도 있습니다.

 $ ./zap.sh -autorun hahwul.com-test.yaml -cmd

References