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