Análisis dinámico de aplicaciones web con OWASP ZAP
Tags: cybersecurity, vulnerabilities, spanish, testing
Published: 2023-09-25 00:33:56

#Introducción

La seguridad en aplicaciones web se ha convertido en un aspecto crítico en la actualidad, ya que cada vez más empresas y organizaciones dependen de estas para proporcionar servicios e interactuar con sus usuarios. Sin embargo, la creciente complejidad de estas aplicaciones también ha abierto nuevas puertas a las amenazas cibernéticas. En este contexto, es fundamental llevar a cabo análisis de seguridad exhaustivos para identificar y mitigar posibles riesgos.

En este post, se explora el análisis dinámico de aplicaciones web utilizando una herramienta de código abierto ampliamente reconocida: OWASP ZAP (Zed Attack Proxy). A modo de ejemplo se llevará a cabo el análisis de dos aplicaciones web intencionalmente vulnerables: Damn Vulnerable Web Application (DVWA) y OWASP Juice Shop.

El análisis dinámico permitirá identificar posibles vulnerabilidades en estas aplicaciones, evaluar su resistencia a ataques comunes y proporcionar recomendaciones para mejorar su seguridad. Además, se destacan las capacidades de OWASP ZAP como una herramienta esencial para cualquier persona interesada en la seguridad de aplicaciones web.

Se detallan los pasos clave para llevar a cabo un análisis dinámico de aplicaciones web con OWASP ZAP, desde la configuración inicial hasta la identificación de vulnerabilidades y la generación de informes detallados. También se analizan algunos de los resultados obtenidos en DVWA y OWASP Juice Shop para comprender mejor las amenazas a las que se enfrentan las aplicaciones web en la actualidad.

El objetivo es promover la conciencia sobre la importancia de la seguridad de las aplicaciones web y proporcionar a los profesionales de la seguridad y desarrolladores de aplicaciones una visión general de cómo utilizar OWASP ZAP para proteger sus aplicaciones contra amenazas cibernéticas. La seguridad es un proceso continuo, y el análisis dinámico de aplicaciones web desempeña un papel crucial en la identificación y mitigación de riesgos.

Finalmente, se debe recordar que este tipo de análisis solamente se realiza sobre aplicaciones e infraestructura propia o con la debida autorización de aquellos que sean responsables. Un escaneo de vulnerabilidades no autorizado constituye un delito informático, en Colombia particularmente puede acarrear penas de prisión y multas (Ley 1273 de 2009) [1].

#Desarrollo

##Herramientas

###Despliegue de DVWA
Para desplegar DVWA sobre Kali Linux se sigue la guía disponible en GoLinuxCloud [2]. 

Se debe configurar DVWA con el usuario y contraseña que se creará en la base de datos MySQL.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehuwzlie7tj51ee7zc7g.PNG)

Después de instalar MySQL, se debe crear el usuario en la base de datos con las mismas credenciales del punto anterior.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy0esq85f8nqtfmi23zk.PNG)

Se requiere instalar PHP, para este caso ya estaba instalada la versión 8.2, lo cual puede comprobarse con el comando `php -version`. Después deben instalarse las librerías.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/exqhy6hmynhk2g27ym8f.PNG)

Finalmente, se debe configurar el servidor apache
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulua6z41i159c5umyy5f.PNG)

Se inicia el servicio de apache con el siguiente comando:
```
sudo service apache2 start
```

Para acceder a DVWA debe dirigirse con el navegador web a la dirección `http://127.0.0.1/dvwa/`. Una vez allí, debe dar click en    "Create/Reset Database" y utilizar las credencias admin@password para terminar la configuración.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x4mahgbnce4f5rdtu3ug.PNG)

###OWASP ZAP

OWASP ZAP es una herramienta de código abierto ampliamente reconocida y respaldada por la comunidad de seguridad. Actúa como un proxy entre el navegador web y la aplicación objetivo, lo que permite interceptar y manipular las solicitudes y respuestas HTTP/HTTPS, facilitando la identificación de vulnerabilidades y el análisis de tráfico. Puede realizar un escaneo automático de la aplicación web para descubrir vulnerabilidades comunes, como inyecciones SQL, cross-site scripting (XSS), cross-site request forgery (CSRF) y muchas otras, permitiendo el ahorro de tiempo y esfuerzo en comparación con las pruebas manuales.

Esta herramienta permite configurar y controlar las exploraciones de manera efectiva, ver resultados y generar informes detallados. Es posible escribir scripts personalizados en varios lenguajes (como JavaScript, Python y Groovy) para automatizar tareas específicas de prueba y personalizar el análisis de seguridad. También permite el manejo de sesiones de usuario, lo que facilita la prueba de vulnerabilidades que pueden depender del estado de la sesión, como el acceso no autorizado. Genera informes detallados que documentan las vulnerabilidades encontradas, su impacto potencial y las recomendaciones para su corrección. Estos informes son valiosos para comunicar los riesgos a los equipos de desarrollo.

Adicionalmente ZAP es altamente programable y se puede integrar en flujos de trabajo CI/CD (Integración Continua/Entrega Continua) para realizar pruebas de seguridad automáticamente en cada versión de una aplicación web.

Para realizar su instalación en Kali Linux se sigue la guía disponible en `https://www.kali.org/tools/zaproxy/`. Solamente debe ejecutarse el comando:
```
sudo apt install zaproxy
```

Una vez instalado, se observa una interfaz similar a la mostrada en la imagen:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i7goq1cf2skbgxijy1hb.PNG)

###Habilitar HTTPS en Apache

Para generar e instalar el certificado SSL se puede seguir la guía disponible en DigitalOcean [3]. Se configura la información del certificado dependiendo del caso:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bx4yxh0wm7t6hacckel.PNG)

Una vez instalado el certificado, se puede acceder al sitio a través de https. Tenga en cuenta que no se ha configurado para que el sitio web obligue a que el tráfico http vaya a través de https, por lo cual ambos protocolos siguen disponibles.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l361u16ld4p242a6lyvr.PNG)

##Ejecución de los análisis

###Análisis sobre DVWA

DVWA permite practicar sobre algunas de las vulnerabilidades web más comunes, y configurar el nivel de seguridad general que presentarán cada uno de los retos. 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cyua2yn5cqhmk47h8dn3.PNG)

Se realizaron varias pruebas, cambiando el modo de ZAP entre estándar y ataque, el nivel se seguridad en DVWA y el protocolo de comunicación (http/https). A continuación se resume la cantidad de vulnerabilidades encontradas para cada caso.

| Análisis | Seguridad | Protocolo | Alto | Medio | Bajo | Informacional |
| -------- | --------- | --------- | ---- | ----- | ---- | ------------- |
| estándar | baja      | http      | 0    | 4     | 5    | 3             |
| ataque   | baja      | http      | 0    | 5     | 5    | 3             |
| estándar | imposible | http      | 0    | 4     | 5    | 3             |
| ataque   | imposible | http      | 0    | 5     | 5    | 3             |
| estándar | imposible | https     | 0    | 5     | 7    | 4             |
| ataque   | imposible | https     | 0    | 5     | 7    | 4             |

Se observa que no hay diferencia al realizar el análisis con OWASP ZAP cambiando el nivel de seguridad de DVWA. El modo ataque identifica una vulnerabilidad de nivel medio adicional al modo estándar, la cual es Directory Browsing  `https://www.zaproxy.org/docs/alerts/0/`.

La otra vulnerabilidad de tipo medio con la confianza más alta (18.8%) fue Content Security Policy (CSP) Header Not Set `https://www.zaproxy.org/docs/alerts/10038/`. 

Utilizando el protocolo https se identifican dos alertas adicionales de tipo bajo: Cookie Without Secure Flag `https://www.zaproxy.org/docs/alerts/10011/` y Strict-Transport-Security Header `https://www.zaproxy.org/docs/alerts/10035/`. También se identifico una alerta adicional de tipo informacional: Re-examine Cache-control Directives `https://www.zaproxy.org/docs/alerts/10015/`. 

###Análisis sobre OWASP Juice Shop

En un servidor en una red local controlada se realizó la instalación de OWASP Juice Shop `https://owasp.org/www-project-juice-shop/`. Posteriormente se realizó el análisis con ZAP obteniendo el siguiente resultado: 

| Análisis | Alto | Medio | Bajo | Informacional |
| -------- | ---- | ----- | ---- | ------------- |
| estándar | 1    | 4     | 4    | 2             |
| ataque   | 2    | 4     | 4    | 3             |

Se identifican las vulnerabilidades de nivel alto Cloud Metadata Potentially Exposed `https://www.zaproxy.org/docs/alerts/90034/` y SQL Injection `https://www.zaproxy.org/docs/alerts/40018/`. La vulnerabilidad media con la confianza más alta fue Session ID in URL Rewrite
`https://www.zaproxy.org/docs/alerts/3/`.

##Explicación sobre algunas de las vulnerabilidades encontradas

A continuación se explican algunas de las vulnerabilidades encontradas a partir de los análisis realizados con OWASP ZAP. Igualmente puede consultar el OWASP TOP 10 `https://owasp.org/www-project-top-ten/`, dónde se explican las 10 vulnerabilidades más comunes en aplicaciones web.

Directory Browsing (Exploración de Directorios) ocurre cuando un atacante puede navegar a través de los directorios en un servidor web para acceder a archivos y directorios que no deberían ser públicos. Esto puede exponer datos confidenciales y facilitar ataques adicionales, por ello se debe configurar adecuadamente el servidor web para deshabilitar la exploración de directorios y asegurarse de que los directorios y archivos sensibles no sean accesibles públicamente.

Content Security Policy Header (Encabezado de Política de Seguridad de Contenido) es un mecanismo de seguridad que ayuda a prevenir ataques de scripts entre sitios (XSS) y otras amenazas relacionadas con la ejecución de código en el navegador. Sin CSP, un atacante podría ejecutar scripts maliciosos en el navegador de un usuario, lo que podría llevar al robo de información confidencial o la toma de control de cuentas.

La alerta Cookie Without Secure Flag (Cookie sin la Bandera Secure) indica que las cookies son vulnerables cuando no se establece la bandera "Secure". Esto significa que pueden enviarse a través de conexiones no seguras (HTTP) en lugar de conexiones seguras (HTTPS), lo que las hace vulnerables a ataques de interceptación. Un atacante que intercepta una cookie no segura podría robar sesiones de usuario, lo que permitiría la toma de control de cuentas.

Strict-Transport-Security Header (Encabezado de Seguridad de Transporte Estricto) garantiza que una aplicación web solo se cargue a través de conexiones seguras HTTPS, lo que evita que los usuarios accedan a la aplicación a través de HTTP no seguro. Los atacantes podrían forzar a los usuarios a utilizar conexiones HTTP e interceptar los mensajes.

Re-examine Cache-control Directives (Reexaminar Directivas Cache-control) es una vulnerabilidad que se refiere a la incorrecta configuración de las directivas de control de caché en las respuestas del servidor. Esto puede permitir a un atacante acceder a información obsoleta o confidencial en el caché del navegador, lo que podría llevar a la exposición de información confidencial.

Cloud Metadata Potentially Exposed (Posible Exposición de Metadatos en la Nube) es una vulnerabilidad que ocurre cuando una aplicación en la nube expone accidentalmente información de metadatos de la instancia, lo que podría incluir claves de acceso u otra información confidencial, lo que podría llevar a un compromiso de la infraestructura en la nube.

SQL Injection (Inyección SQL) es una vulnerabilidad en la que los atacantes insertan comandos SQL maliciosos en las entradas de una aplicación para manipular la base de datos subyacente. Esto puede permitir la extracción, modificación o eliminación de datos de la base de datos, lo cual puede llevar a la exposición de datos confidenciales, la corrupción de datos y la toma de control del sistema de base de datos. Para prevenir la inyección SQL, se deben utilizar consultas parametrizadas o funciones de escape de entrada de datos y se debe validar y sanitizar las entradas del usuario.

La alerta Session ID in URL Rewrite (Reescritura del ID de Sesión en la URL) indica que al colocar identificadores de sesión en la URL, un atacante podría obtener acceso no autorizado si intercepta la URL o si se produce un reenvío, haciendo posible robar sesiones de usuario y tomar el control de cuentas. Por lo cual se debe almacenar los identificadores de sesión de forma segura en cookies en lugar de incluirlos en la URL, lo cual ayuda a prevenir este tipo de ataque.

#Conclusiones

En este post se explora el análisis dinámico de aplicaciones web mediante ejemplos prácticos con Damn Vulnerable Web Application (DVWA) y OWASP Juice Shop, se muestra como OWASP ZAP puede identificar vulnerabilidades, evaluar la resistencia a ataques comunes y proporcionar recomendaciones para mejorar la seguridad de las aplicaciones web.

En los análisis realizados en DVWA, se observó que cambiar el nivel de seguridad de la aplicación no tuvo un impacto significativo en la detección de vulnerabilidades por parte de OWASP ZAP. Sin embargo, el modo de ataque identificó una vulnerabilidad adicional en comparación con el modo estándar.

En OWASP Juice Shop, se identificaron vulnerabilidades de nivel alto, medio y bajo. Estas vulnerabilidades incluyeron Cloud Metadata Potentially Exposed, SQL Injection y Session ID in URL Rewrite. Estos resultados resaltan la importancia de evaluar y corregir activamente las vulnerabilidades en las aplicaciones web.

Las vulnerabilidades identificadas, como Directory Browsing, Content Security Policy Header Not Set y Cookie Without Secure Flag, son ejemplos de riesgos comunes en aplicaciones web que pueden poner en peligro la seguridad de los datos y la privacidad de los usuarios.

La seguridad de las aplicaciones web es un proceso continuo y dinámico. Además de utilizar herramientas como OWASP ZAP, es esencial seguir las mejores prácticas de seguridad, mantenerse actualizado sobre las amenazas cibernéticas y garantizar que las aplicaciones estén protegidas adecuadamente.

#Referencias

[1] Avance Jurídico Casa Editorial Ltda., “Leyes desde 1992 - Vigencia expresa y control de constitucionalidad [LEY_1273_2009],” Avance Jurídico Casa Editorial Ltda., Senado De La República De Colombia. http://secretariasenado.gov.co/senado/basedoc/ley_1273_2009.html

[2] T. Gidraph, “Install DVWA on Kali Linux (Step-by-Step) | GoLinuxCloud,” GoLinuxCloud, Oct. 2021, [En línea]. Disponible: https://www.golinuxcloud.com/install-dvwa-kali-linux/
‌
[3] A. Wan, “How To Create a SSL Certificate on Apache for Debian 8,” DigitalOcean, Jun. 2015, [En línea]. Disponible: https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-debian-8
‌