Make and change default scan policy in ZAP cli interface

ZAP Scan Policy

ZAP은 Passive/Active Scan에 대한 정책을 커스텀하게 관리할 수 있도록 제공하고 있습니다. 이는 단순히 해당 스캔 모듈의 사용 여부 뿐만 아니라 Risk level도 조정할 수 있어 스캐너로 활용하기에도 좋습니다. 그래서인지 DevSecOps를 구축할 때 ZAP은 자주 거론되는 DAST 스캐너이기도 하죠.

이러한 Policy는 .policy 파일(사실상 xml)로 관리할 수 있어서 여러개의 ZAP에서 동일한 Scan Policy를 가지고 스캔 작성을 진행할 수 있도록 도와줍니다.

오늘은 ZAP Policy를 만들고 관리하고, cli 환경에서 import 하여 사용할 수 있는 방법에 대해 정리해둡니다.

Make and Export Scan Policy

우선 Policy를 하나 만들어봅시다. 메뉴바에 break 쪽 버튼 근처에 있는 버튼으로 Scan Policy Manager를 열어줍니다.

Default Policy가 하나 있습니다. 저건 ZAP 전체 공통인 Policy죠.

여기서 Add로 하나 만들어보면 아래와 같이 스캔에 관련된 여러가지 항목에 대해서 제어할 수 있습니다. 저는 Optimazation 이란 이름으로 만들었습니다.

Threshold, Strength 등도 수정할 수 있어 사용하지 않는건 제거하고, 리스크도 바꿀 수 있습니다.

대충 하나 만들고 Export를 통해 파일로 만들어줍시다. 확장자는 .policy 입니다.

파일을 열어서 확인해보면 설정 정보에 대한 XML 포맷인 걸 알 수 있습니다.

Change Default Policy in CLI

ZAP의 cli 구동 스크립트인 zap.sh 에선 -config flag를 통해 여러가지 설정 정보를 미리 지정해줄 수 있습니다. GUI의 경우 매번 설정 정보가 저장되어서 그냥 사용하면 되지만 DAST 등 스캐너로 활용 시 구성 환경에 따라 매번 배포가 필요할 수 있습니다. 이 때 -config-configfile 을 활용하면 좀 더 쉽게 설정과 Policy를 적용시킬 수 있습니다.

Path of scan policy

ZAP에서 Policy를 등록하면 아래 zapHome 디렉토리에 파일로 관리됩니다. ZAP의 대다수 기능은 이러한 형태로 동작하기 떄문에 zapHome 디렉토리는 미리 체크해두면 여러모로 도움됩니다.

소스코드에서 실행한 경우 해당 디렉토리가 zapHome 디렉토리이며, 패키지 설치의 경우 OS 별로 다른 경로를 가집니다.

MacOS 기준으론 zapHome은 아래 경로입니다.

~/Library/Application Support/ZAP

scan policy 경로는 zapHome/policies 이기 때문에 결국 아래 경로로 보시면 됩니다.

~/Library/Application Support/ZAP/policies

Copy policy to zapHome/policies directory

이제 아까 만든 Optimazation.policy 파일을 policies 경로에 복사해줍니다.

cp ~/Optimazation.policy ~/Library/Application\ Support/ZAP/policies/

해당 경로에 넣어주면 ZAP은 boot 시 자동으로 policy 파일을 로드해서 가지고 있게 됩니다.

Run by changing the default policy

이제 실행 시 -config flag를 통해 default policy를 변경하여 실행해봅시다.

./zap.sh -config scanner.defaultPolicy=Optimazation

구동되고 active scan 등을 통해 기본 정책을 확인해보면 Optimazation 이름의 정책이 기본값으로 들어간 것을 확인할 수 있습니다.

이를 configfile로 만들면…

[ myzap.config ]

ajaxSpider.macDuration=3
api.disablekey=true
scanner.defaultPolicy=Optimazation
./zap.sh -configfile myzap.config