ZAP (Zed Attack Proxy) - 웹 앱 보안 스캐너 치트시트
ZAP (Zed Attack Proxy, Checkmarx에서 관리, 이전에 OWASP 플래그십)는 무료 오픈소스 동적 애플리케이션 보안 테스팅 (DAST) 도구다. 브라우저와 타겟 사이에 인터셉팅 프록시로 작동하면서 웹 앱과 API를 패시브 및 액티브 스캔하여 취약점을 찾는다. 스파이더/크롤러, 퍼저, 액티브 스캐너, WebSocket 지원, REST/GraphQL/SOAP API 스캔을 결합한다 — GUI를 통해 대화형으로 사용하거나 CI/CD를 위해 CLI와 API를 통해 헤드리스로 사용할 수 있다.
설치
| 플랫폼 | 명령어 |
|---|
| Docker (CI 권장) | docker pull zaproxy/zap-stable |
| Debian/Ubuntu | ZAP 사이트에서 인스톨러 다운로드 |
| macOS (Homebrew) | brew install --cask zap |
| 크로스 플랫폼 | 크로스 플랫폼 패키지 다운로드 (Java 필요) |
| 확인 | zap.sh -version (또는 Windows에서는 zap.bat) |
실행 모드
| 명령어 | 설명 |
|---|
zap.sh | 데스크톱 GUI 시작 |
zap.sh -daemon -host 0.0.0.0 -port 8080 | API를 사용하는 헤드리스 데몬 |
zap.sh -cmd -quickurl https://target -quickout report.html | 보고서로 원샷 빠른 스캔 |
docker run -t zaproxy/zap-stable zap-baseline.py -t https://target | Docker에서 기본 (패시브) 스캔 |
자동화 프레임워크 (스크립트된 스캔)
ZAP의 패키지된 스캔 스크립트는 CI 통합으로 가장 빠른 경로다.
| 스크립트 | 목적 |
|---|
zap-baseline.py -t URL | 패시브 스캔 + 스파이더 (빠름, CI-안전) |
zap-full-scan.py -t URL | 기본 + 액티브 공격 스캔 |
zap-api-scan.py -t openapi.json -f openapi | OpenAPI/SOAP/GraphQL 정의에서 API 스캔 |
-r report.html | HTML 보고서 작성 |
-J report.json | JSON 보고서 작성 |
-c config.conf | 알림 필터 / 규칙 설정 |
# CI-친화적 기본 스캔, 발견 사항에서 빌드 실패
docker run -t zaproxy/zap-stable zap-baseline.py \
-t https://staging.example.com -r zap-report.html
핵심 구성 요소
| 구성 요소 | 역할 |
|---|
| Proxy | HTTP(S) 트래픽 인터셉트/검사/수정 |
| Spider | 앱을 크롤링하여 URL 발견 |
| Ajax Spider | 실제 브라우저를 통해 JS-집약적 앱 크롤링 |
| Passive Scan | 관찰된 트래픽에서 문제 플래그 (공격 없음) |
| Active Scan | 공격 페이로드를 전송하여 취약점 발견 |
| Fuzzer | 요청에 페이로드 리스트 삽입 |
프록시 설정
| 단계 | 방법 |
|---|
| 브라우저 프록시 설정 | 브라우저를 localhost:8080으로 지정 |
| ZAP CA 인증서 설치 | HTTPS를 인터셉트하기 위해 ZAP의 루트 인증서 가져오기 |
| 수동 탐색 | 앱 브라우징; ZAP가 트래픽 기록 |
| 그 후 스캔 | 발견된 트리 스파이더 + 액티브 스캔 |
API (자동화)
데몬이 실행 중이면, HTTP 위에서 ZAP를 제어한다.
| 엔드포인트 | 작업 |
|---|
/JSON/spider/action/scan/?url=... | 스파이더 시작 |
/JSON/ascan/action/scan/?url=... | 액티브 스캔 시작 |
/JSON/core/view/alerts/ | 발견 사항 검색 |
/OTHER/core/other/htmlreport/ | HTML 보고서 생성 |
| API 키 | 요청과 함께 apikey=... 전달 |
인증 및 컨텍스트
| 개념 | 사용 |
|---|
| Context | 타겟 범위 및 인증 정의 |
| Session mgmt | 쿠키/HTTP/스크립트-기반 세션 |
| Authentication | 폼, JSON, HTTP, 또는 스크립트 인증 |
| Users | 인증된 사용자로 테스트 |
일반적인 워크플로우
# CI의 스테이징에 대한 빠른 패시브 기본 테스트
zap-baseline.py -t https://staging.example.com -r report.html
# OpenAPI 스펙에서 REST API 스캔
zap-api-scan.py -t https://api.example.com/openapi.json -f openapi -J out.json
# 전체 액티브 스캔 (승인된 타겟만)
zap-full-scan.py -t https://target.example.com -r full.html
ZAP vs 다른 DAST 도구
| 측면 | ZAP | Nuclei | Burp Suite | Nikto |
|---|
| 모델 | Proxy + crawl + active DAST | Template CVE scanner | Proxy + manual + scanner | Server misconfig scanner |
| 비용 | 무료/오픈소스 | 무료/오픈소스 | 무료 + 유료 Pro | 무료 |
| API/CI | 강함 (API + 스크립트) | 강함 | Pro 확장 | CLI |
| 최고 | 풀 앱 DAST, CI | 빠른 알려진 CVE 체크 | 수동 펜테스팅 | 빠른 서버 체크 |
일반적인 페어링: 빠른 알려진 CVE 감지를 위한 Nuclei + 크롤링 애플리케이션 수준 DAST를 위한 ZAP.
자료