ZAP (Zed Attack Proxy) - Hoja de Referencia del Escáner de Seguridad Web
ZAP (Zed Attack Proxy, mantenido por Checkmarx, anteriormente un proyecto insignia de OWASP) es una herramienta gratuita y de código abierto de pruebas dinámicas de seguridad de aplicaciones (DAST). Se sitúa entre tu navegador y un objetivo como un proxy de interceptación, y luego escanea de forma pasiva y activa aplicaciones web y APIs en busca de vulnerabilidades. Combina un spider/crawler, un fuzzer, un escáner activo, soporte de WebSocket y escaneo de APIs REST/GraphQL/SOAP — utilizable de forma interactiva vía una GUI o sin cabeza vía CLI y API para CI/CD.
Instalación
| Plataforma | Comando |
|---|
| Docker (recomendado para CI) | docker pull zaproxy/zap-stable |
| Debian/Ubuntu | descarga el instalador desde el sitio de ZAP |
| macOS (Homebrew) | brew install --cask zap |
| Multiplataforma | descarga el paquete multiplataforma (requiere Java) |
| Verificar | zap.sh -version (o zap.bat en Windows) |
Modos de Ejecución
| Comando | Descripción |
|---|
zap.sh | Iniciar la GUI de escritorio |
zap.sh -daemon -host 0.0.0.0 -port 8080 | Demonio sin cabeza con la API |
zap.sh -cmd -quickurl https://target -quickout report.html | Escaneo rápido de una sola vez a un informe |
docker run -t zaproxy/zap-stable zap-baseline.py -t https://target | Escaneo de línea base (pasivo) en Docker |
Framework de Automatización (Escaneos con Script)
Los scripts de escaneo empaquetados de ZAP son la vía más rápida para la integración con CI.
| Script | Propósito |
|---|
zap-baseline.py -t URL | Escaneo pasivo + spider (rápido, apto para CI) |
zap-full-scan.py -t URL | Línea base + escaneo de ataque activo |
zap-api-scan.py -t openapi.json -f openapi | Escanear una API desde una definición OpenAPI/SOAP/GraphQL |
-r report.html | Escribir un informe HTML |
-J report.json | Escribir un informe JSON |
-c config.conf | Configuración de filtros de alertas / reglas |
# Escaneo de línea base apto para CI, falla la compilación ante hallazgos
docker run -t zaproxy/zap-stable zap-baseline.py \
-t https://staging.example.com -r zap-report.html
Componentes Principales
| Componente | Rol |
|---|
| Proxy | Interceptar/inspeccionar/modificar el tráfico HTTP(S) |
| Spider | Rastrear la aplicación para descubrir URLs |
| Ajax Spider | Rastrear apps con mucho JS mediante un navegador real |
| Escaneo pasivo | Señala problemas a partir del tráfico observado (sin ataques) |
| Escaneo activo | Envía cargas de ataque para encontrar vulnerabilidades |
| Fuzzer | Inyectar listas de cargas en las solicitudes |
Configuración del Proxy
| Paso | Cómo |
|---|
| Configurar el proxy del navegador | Apuntar el navegador a localhost:8080 |
| Instalar el certificado CA de ZAP | Importar el certificado raíz de ZAP para interceptar HTTPS |
| Exploración manual | Navegar la app; ZAP registra el tráfico |
| Luego escanear | Spider + escaneo activo del árbol descubierto |
La API (Automatización)
Con el demonio en ejecución, controla ZAP sobre HTTP.
| Endpoint | Acción |
|---|
/JSON/spider/action/scan/?url=... | Iniciar un spider |
/JSON/ascan/action/scan/?url=... | Iniciar un escaneo activo |
/JSON/core/view/alerts/ | Recuperar hallazgos |
/OTHER/core/other/htmlreport/ | Generar un informe HTML |
| Clave de API | Pasar apikey=... con las solicitudes |
Autenticación y Contexto
| Concepto | Uso |
|---|
| Contexto | Definir el alcance del objetivo y la autenticación |
| Gestión de sesión | Sesiones basadas en cookies/HTTP/script |
| Autenticación | Autenticación por formulario, JSON, HTTP o script |
| Usuarios | Probar como usuarios autenticados |
Flujos de Trabajo Comunes
# Línea base pasiva rápida contra staging en CI
zap-baseline.py -t https://staging.example.com -r report.html
# Escanear una API REST desde su especificación OpenAPI
zap-api-scan.py -t https://api.example.com/openapi.json -f openapi -J out.json
# Escaneo activo completo (solo objetivos autorizados)
zap-full-scan.py -t https://target.example.com -r full.html
ZAP frente a Otras Herramientas DAST
| Aspecto | ZAP | Nuclei | Burp Suite | Nikto |
|---|
| Modelo | Proxy + rastreo + DAST activo | Escáner de CVE por plantillas | Proxy + manual + escáner | Escáner de configuración de servidor |
| Coste | Gratis/código abierto | Gratis/código abierto | Gratis + Pro de pago | Gratis |
| API/CI | Fuerte (API + scripts) | Fuerte | Extensiones Pro | CLI |
| Mejor para | DAST completo de apps, CI | Comprobaciones rápidas de CVE conocidos | Pentesting manual | Comprobaciones rápidas de servidor |
Emparejamiento común: Nuclei para la detección rápida de CVE conocidos más ZAP para el DAST a nivel de aplicación con rastreo.
Recursos