Curso de OWASP ZAP: Seguridad y Pruebas de Penetración (Pentesting)

Índice General

  1. Introducción a OWASP y Seguridad en Software
  2. Herramientas Estáticas Auxiliares (SAST)
  3. OWASP ZAP como Proxy Interceptor
  4. Instalación del Certificado Raíz de Seguridad
  5. Modos de Ejecución en ZAP
  6. Definición del Alcance (Scope) y Contextos
  7. Técnicas de Fuzzing (Inyección de Datos Maliciosos)
  8. Escaneos Autenticados y Gestión de Sesión
  9. Automatización y canalizaciones CI/CD

1. Introducción a OWASP y Seguridad en Software

OWASP (Open Worldwide Application Security Project) es una fundación sin fines de lucro y una comunidad global dedicada a mejorar la seguridad del software. Su proyecto más célebre, el OWASP Top 10, documenta periódicamente las diez vulnerabilidades web más críticas del mundo, sirviendo como estándar de auditoría global.

2. Herramientas Estáticas Auxiliares (SAST)

Antes de realizar pruebas dinámicas, se suelen emplear analizadores estáticos de código para identificar malas prácticas o contraseñas expuestas en el código fuente.

Análisis en Python con Bandit

Bandit encuentra fallos comunes de seguridad en proyectos Python. Para instalarlo y escanear un directorio de forma recursiva, se ejecuta:

pip install bandit
bandit -r .

Herramientas Especializadas para Django

3. OWASP ZAP como Proxy Interceptor

OWASP ZAP (Zed Attack Proxy) es una herramienta de código abierto para pruebas de seguridad dinámica (DAST). Funciona como un Proxy Interceptor situado entre el navegador web del auditor y el servidor de la aplicación.

Configuración de Red Local

Para comprobar que ZAP escucha correctamente el tráfico de la máquina anfitriona, se debe validar en el menú superior:

Tools -> Options -> Network (o Red) -> Local Servers/Proxies

La dirección IP predeterminada debe apuntar a localhost (o 127.0.0.1) en el puerto 8080.

4. Instalación del Certificado Raíz de Seguridad

Dado que la mayoría de los sitios web modernos viajan cifrados bajo HTTPS, ZAP necesita un certificado SSL/TLS intermedio para descifrar, inspeccionar y volver a cifrar los paquetes de datos sin que el navegador bloquee la conexión.

Procedimiento de Configuración Paso a Paso

  1. Generar el certificado en ZAP: Dirígete a Tools -> Options -> Dynamic SSL Certificates. Haz clic en Generate e importa o guarda el archivo con extensión .cer o .crt en tu equipo.
  2. Configurar el navegador: Cambia los ajustes de red del navegador para que redirija el tráfico HTTP/HTTPS a través del proxy manual localhost puerto 8080.
  3. Importar Autoridad de Certificación: En la sección de privacidad y seguridad del navegador, busca el apartado de certificados, selecciona Importar y elige el archivo generado por ZAP. Asegúrate de marcar la casilla "Confiar en esta CA para identificar sitios web".
  4. Activar la Intercepción: Asegúrate de que el botón circular del panel superior de ZAP cambie a color rojo (indica que el tráfico se interceptará y pausará para su inspección). El color verde permite el flujo libre de datos.

5. Modos de Ejecución en ZAP

ZAP dispone de cuatro modalidades de operación que restringen la agresividad de las herramientas en función del entorno:

6. Definición del Alcance (Scope) y Contextos

El Scope define las fronteras físicas de la auditoría de seguridad para evitar ramificaciones legales por atacar servidores ajenos. Para configurarlo:

Crear un Contexto Nuevo -> Clic derecho sobre la URL raíz en la pestaña 'Sites' -> Incluir en el Contexto

A partir de ese instante, se pueden aplicar filtros para excluir subdirectorios pesados o pasarelas de pago de terceros que no deben auditarse.

7. Técnicas de Fuzzing (Inyección de Datos Maliciosos)

El Fuzzing consiste en enviar de forma masiva datos de entrada inesperados, aleatorios o maliciosos (cargas útiles o payloads) hacia un parámetro de una petición HTTP (como campos de texto o parámetros URL) para verificar si la aplicación se rompe o expone fallos del sistema.

Metodología Operativa de Fuzzing en ZAP

  1. Crea un archivo de texto estructurado con extensión .txt que contenga un diccionario de ataques (por ejemplo: inyecciones SQL comunes como ' OR '1'='1 o scripts XSS).
  2. Navega en la pestaña Sites de ZAP, localiza la petición específica (por ejemplo, un método POST de inicio de sesión o un GET de búsqueda) y haz clic derecho -> Fuzz....
  3. Selecciona la palabra o variable exacta que deseas comprometer y haz clic en Add para cargar tu archivo de texto.
  4. Interpretación de Resultados: Evalúa los códigos de estado devueltos por el servidor. Si ante una carga maliciosa el servidor responde con un código 200 OK renderizando la base de datos o el script, el sistema es vulnerable. Una aplicación robusta debe atrapar la anomalía devolviendo errores controlados del cliente como 400 Bad Request.

8. Escaneos Autenticados y Gestión de Sesión

Muchas vulnerabilidades críticas se esconden detrás de los paneles de acceso restringido. Para que ZAP evalúe estas zonas de forma automática, se debe configurar una sesión autenticada:

  1. Entra a las propiedades del contexto y accede a la sección Authentication.
  2. Selecciona la tecnología deseada (por ejemplo, JSON-Based Authentication o formularios basados en peticiones HTTP).
  3. Indica la URL de inicio de sesión y mapea las variables donde se inyectan el usuario y el password correspondientes.
  4. Patrón Regex de Verificación: Define una expresión regular para que ZAP determine si sigue logueado o si la sesión expiró (por ejemplo, buscando la existencia de la palabra logout o tokens de autenticación dentro del cuerpo de la respuesta HTML).
  5. Activa el icono con forma de candado en la esquina superior derecha de la interfaz para forzar a ZAP a mantener la sesión de usuario activa de forma permanente durante el escaneo automatizado.

9. Automatización y Canalizaciones CI/CD

ZAP Automation Framework (AF)

Permite compilar planes de pruebas de seguridad completos dentro de un único archivo de configuración estructurado en formato YAML (zap.yaml), facilitando que el flujo se ejecute mediante consolas de comandos sin interacción humana.

ZAP API

ZAP expone una API REST nativa completa que permite manipular cualquier funcionalidad de la herramienta (iniciar escaneos, consultar alertas, exportar reportes) utilizando lenguajes como Python o JavaScript. Por defecto, una vez que ZAP se está ejecutando, se puede acceder a la interfaz interactiva de la API desde el navegador local en:

http://localhost:8080/

Integración en Flujos de Integración Continua (CI/CD)

Al integrarse en orquestadores como Jenkins, GitLab CI o GitHub Actions, ZAP realiza escaneos dinámicos automatizados ante cada nueva confirmación de código (push). Si el análisis detecta vulnerabilidades con severidad alta, se puede configurar para romper el pipeline e impedir el despliegue a producción de código vulnerable.