🔍 OWASP ZAP 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

web-security scanner open-source DAST v2.15.0 2026.03

1. OWASP ZAP란?

Zed Attack Proxy (ZAP)는 OWASP가 주관하는 오픈소스 웹 애플리케이션 보안 스캐너입니다. 능동/수동 스캔, 퍼징, API 테스트 등 DAST(동적 분석) 기능을 제공하며, DevOps 파이프라인에 통합하기 쉬워 AI 정보보안 엔지니어와 데이터 엔지니어에게 필수 도구입니다.

3대 핵심 능력

🕷️ 자동 스캔

스파이더(Spider) + AJAX Spider로 웹 애플리케이션을 크롤링하고, 능동/수동 스캐너로 취약점을 자동 탐지합니다.

⚙️ 중간자 프록시

로컬 프록시로 트래픽을 가로채어 요청/응답을 분석·변조하며, AI 기반 페이로드 삽입도 가능합니다.

🔌 API & CI/CD

REST API, Java/Groovy 스크립팅, Docker 이미지를 제공하여 지속적 보안 테스트 파이프라인에 통합됩니다.

2. 왜 써야 하는가?

상용 스캐너(Burp Suite Pro, Acunetix)와 비교했을 때 ZAP은 무료이면서도 높은 확장성을 제공합니다. 특히 AI/데이터 환경에서는 커스텀 스크립트와 API 연계가 중요하므로 ZAP의 오픈소스 생태계가 강점입니다.

기능 ZAP (오픈소스) Burp Suite Pro Acunetix
라이선스 비용 무료 연 $399+ 연 $4,500+
능동 스캔 ✔️ 기본 제공 ✔️ 고급 ✔️ 고급
API 자동화 ✔️ REST + Python/CLI ✔️ 제한적 ✔️ 유료 API
AI 페이로드 커스터마이징 ✔️ Python 스크립팅 ❌ 번거로움 ❌ 제한적
CI/CD 연동 ✔️ Docker, CLI, 플러그인 ✔️ CLI (Pro) ✔️ 플러그인
💡 AI 엔지니어를 위한 포인트 ZAP의 Python API와 훅(hook) 시스템을 활용하면 머신러닝 모델의 입력/출력 취약점을 자동으로 검증할 수 있습니다.

3. 핵심 개념

ZAP은 크게 프록시 → 스파이더 → 스캐너 → 리포트 흐름으로 동작합니다. 아래 다이어그램은 기본 아키텍처를 보여줍니다.

+------------------+ +------------------+ +-------------------+ | Browser / AI | | ZAP Proxy | | Target Web App | | Client | ----> | (localhost:8080)| ----> | (내부/외부) | | | | intercepts | | | +------------------+ +------------------+ +-------------------+ | +------------------+ | Spider (기본) | | AJAX Spider | +------------------+ | +------------------+ | Passive Scan | | Active Scan | +------------------+ | +------------------+ | Report / Alert | | (JSON, HTML,..)| +------------------+

핵심 용어:

4. 퀵스타트

4.1 설치 (macOS/Linux 예시)

# macOS (Homebrew)
brew install owasp-zap

# Linux (Docker 권장)
docker pull ghcr.io/zaproxy/zaproxy:stable

4.2 기본 설정 (CLI)

ZAP을 헤드리스 모드로 실행하고 API 키를 발급받습니다.

# 헤드리스 실행 (포트 8080, API 키 "changeme")
zap.sh -daemon -port 8080 -api -config api.key=changeme

# 또는 Docker
docker run -u zap -p 8080:8080 -p 8090:8090 -i ghcr.io/zaproxy/zaproxy:stable \
  zap.sh -daemon -port 8080 -api -config api.key=changeme

4.3 첫 예제: Python으로 스파이더 + 능동 스캔

Python zapv2 라이브러리를 사용해 대상 사이트를 자동 스캔합니다.

# 설치: pip install python-owasp-zap-v2.4

from zapv2 import ZAPv2
import time

target = "https://example.com"   # ⚠️ 실제 사이트는 허가 필요
api_key = "changeme"

# ZAP 클라이언트 생성
zap = ZAPv2(apikey=api_key, proxies={'http':'http://127.0.0.1:8080',
                                       'https':'http://127.0.0.1:8080'})

# 스파이더 시작
print(f"[*] Spidering {target} ...")
scan_id = zap.spider.scan(target)
while int(zap.spider.status(scan_id)) < 100:
    time.sleep(2)
print("[+] Spider 완료")

# 능동 스캔 실행
print(f"[*] Active scanning {target} ...")
scan_id = zap.ascan.scan(target)
while int(zap.ascan.status(scan_id)) < 100:
    time.sleep(5)
print("[+] Active scan 완료")

# 결과 출력
alerts = zap.core.alerts()
print(f"\n⚠️ 발견된 취약점: {len(alerts)}개")
for alert in alerts[:5]:
    print(f"  - {alert['alert']} (Risk: {alert['risk']})")
⚠️ 주의 대상 웹사이트에 대한 사전 허가 없이 스캔을 실행하지 마세요. ZAP은 강력한 도구이므로 반드시 자신의 테스트 환경에서만 사용하십시오.

5. 핵심 설정 레퍼런스

설정 항목 설명 예시 값
api.key REST API 인증 키 changeme
proxy.ip 바인딩 IP (기본 127.0.0.1) 0.0.0.0
spider.maxDepth 스파이더 탐색 최대 깊이 5
ascan.maxRuleDurationInMins 능동 스캔 룰당 최대 시간(분) 30
connection.timeoutInSecs HTTP 타임아웃 120
globalExcludeUrl.regex 전역 제외 URL 패턴 .*\\.(gif|png|jpg)

설정은 ~/.ZAP/config.xml 또는 명령행 -config 옵션으로 적용합니다.

6. 실무 팁 & 트러블슈팅

자주 겪는 문제

문제 원인 해결책
스파이더가 페이지를 못 찾음 AJAX 기반 SPA AJAX Spider 사용 (Selenium/Chrome 필요)
능동 스캔이 너무 느림 기본 스레드 수 (5) ascan.threadPerHost=10 증가
인증된 세션 미적용 Context에 인증 정보 미설정 녹음(Record) → 세션 식별자 설정 → Context 저장
Docker에서 API 연결 안 됨 포트 매핑 또는 ZAP non-daemon -p 8080:8080 확인, -daemon 플래그 필수
Python API timed out ZAP이 아직 준비되지 않음 time.sleep(3) 후 retry, 또는 zap.core.alerts() 폴링
🔧 실무 팁 ZAP과 함께 zap-cli (Python 래퍼)를 사용하면 CI/CD에서 명령줄 인터페이스로 더 쉽게 자동화할 수 있습니다.

7. 참고 자료