En la primera parte de este artículo analizamos las principales problemáticas de la seguridad en aplicaciones web, e hicimos un breve repaso por el OWASP Top 10 2013 y la importancia de la validación de datos. En esta parte, analizaremos dos herramientas de código abierto que podemos utilizar para realizar una auditoría de seguridad a nuestras aplicaciones web.
Laboratorio de Pruebas
Para montar un laboratorio de pruebas vamos a utilizar una instalación LAMP (Linux + Apache + PHP + MySQL), y le vamos a instalar la aplicación web Mutillidae, que es una aplicación intencionalmente vulnerable, que tiene el propósito de servir como laboratorio de prácticas, tanto para implementar medidas de defensa como para realizar auditorías de seguridad. Por este motivo, nuestras herramientas de seguridad encontrarán muchísimas vulnerabilidades, lo cual va a servirnos para realizar una comparativa de resultados.
Mutillidae puede descargarse desde: http://sourceforge.net/projects/mutillidae
OWASP Zed Attack Proxy (ZAP)
Zed Attack Proxy de OWASP (www.owasp.org) es una herramienta de código abierto, escrita en Java que sirve para realizar auditorías de seguridad a aplicaciones web de una forma muy sencilla, pero también potente. Entre las muchas características de ZAP, podemos notar las siguientes:
Proxy de interceptación: Permite ver todo el tráfico entre el servidor web y el navegador, permitiéndonos editar el tráfico en ambos sentidos de una forma muy sencilla.
Spider: Es una característica que ayuda a descubrir nuevas URL’s en el sitio auditado. Una de las maneras que realiza esto es analizando el código HTML de la página para descubrir etiquetas y seguir sus atributos href.
Forced Browsing: Intenta descubrir directorios y archivos no indexados en el sitio como pueden ser páginas de inicio de sesión. Para lograrlo cuenta por defecto con una serie de diccionarios que utilizará para realizar peticiones al servidor esperando status code de respuesta 200.
Active Scan: Genera de manera automatizada diferentes ataques web contro el sitio como CSRF, XSS, Inyección SQL entre otros.
Como la idea de este artículo es mostrar las herramientas más fáciles y rápidas de utilizar, nos enfocaremos en la característica de "Active Scan" que nos permite realizar una auditoría profunda de una aplicación web simplemente escribiendo la URL de la misma. El resultado que obtenemos luego de escanear las vulnerabilidades de Mutillidae es:
Como podemos observar, se encontraron 15 distintos tipos de vulnerabilidades que, a su vez, se encuentran presentes en más de un lugar de la aplicación. Por ejemplo, para nombrar las vulnerabilidades más críticas:
- 40 Cross Site Scripting (XSS)
- Un External Redirect
- 16 Path Traversal
- Un Remote File Inclusion
- Un Remote OS Command Injection
- Dos SQL Injection (MySQL)
- Cinco SQL Injection (Genéricos)
Evidentemente, una aplicación muy insegura. Cabe aclarar que la herramienta muestra muchísima más información sobre cada vulnerabilidad, aquí simplemente vemos el reporte general.
Vega
Vega, de Subgraph (www.subgraph.com) también está desarrollada en Java y cuenta con una interfaz gráfica muy intuitiva. Aunque no es tan personalizable como ZAP, es una excelente herramienta para correr un escaneo de vulnerabilidades web. Basta con escribir la URL de la aplicación a auditar, seleccionar los plugins de auditoría que queremos habilitar y, después de unos minutos, obtendremos un reporte como el siguiente:
En este caso también se han encontrado varias vulnerabilidades diferentes. Las catalogadas como "graves" son:
- Seis Cross Site Scripting (XSS)
- Un Local File Include
- Un "posible" SQL Injection
- Un SQL Injection comprobado
- Nueve posibles Local File Inclusion
Cabe aclarar que la herramienta muestra muchísima más información sobre cada vulnerabilidad, aquí simplemente vemos el reporte general.
Comparativa y Aclaraciones
Si bien, a primera impresión, en Vega fueron detectadas menos vulnerabillidades, ambas herramientas muestran mucha información de interés, y es muy importante mencionar que, algunas herramientas, cuentan la cantidad de vulnerabilidades de diferentes maneras, por ejemplo, eliminando las vulnerabilidades "duplicadas" que se encuentran en varias URLs de la aplicación, listandolas como vulnerabilidades únicas con presencia en diferentes URLs.
Debido a esto, no podemos limitarnos a decir que una herramienta es mejor que otra simplemente observando la cantidad de vulnerabilidades encontradas. Como son dos herramientas de muy fácil utilización, yo prefiero ejecutar ambas y comparar resultados, porque es muy probable que cada una de ellas encuentre vulnerabilidades que la otra aplicación no ha podido encontrar.
Por otra parte, son herramientas que terminan su ejecución muy rápido, generalmente, menos de diez minutos cada una, por lo que no hay problema en correr una y después la otra.
NOTA: Recomiendo no correr las pruebas en paralelo (es decir, no ejecutar las dos herramientas el mismo tiempo), eso va a darnos una mejor certeza en los reportes.
Otras Herramientas de Interés
Existen otras herramientas de código abierto que he dejado de lado en este artículo, principalmente por alguna/s de la siguientes razones:
- No siento que tengan una utilización tan sencilla
- Los reportes pueden tardar bastante más en generarse
- Tienden a generar más falsos positivos / negativos
- No parecen estar tan bien "terminadas"
De todos modos, nunca está de más realizar la prueba, y ver cuál es la herramienta que más nos satisface. Algunas de estas herramientas son:
Arachni: http://www.arachni-scanner.com
w3Af: http://w3af.org
Nikto: https://www.cirt.net/Nikto2
Wapiti: http://wapiti.sourceforge.net
En la próxima parte
En la próxima parte de esa serie de artículos analizaremos la tecnología Web Application Firewall, su facilidad de implementación y sus beneficios.
ciberseguridad web