
Herramientas para auditar WAFS
LightBulb es un framework Python de código abierto para auditar firewalls y filtros de aplicaciones web.
El framework consta de dos algoritmos principales:
GOFA: Un algoritmo de aprendizaje activo que infiere representaciones simbólicas de autómatas en el modelo estándar de consultas de pertenencia/equivalencia.
Los algoritmos de aprendizaje activo permiten el análisis de programas de filtrado y sanitización de forma remota, es decir, dada solo la capacidad de consultar el programa objetivo y observar la salida.
SFADiff: Un algoritmo de prueba diferencial de caja negra basado en el aprendizaje de Autómatas Finitos Simbólicos (SFA)
Encontrar diferencias entre programas con funcionalidad similar es un problema de seguridad importante, ya que dichas diferencias pueden usarse para la toma de huellas digitales o la creación de ataques de evasión contra software de seguridad como los Firewalls de Aplicaciones Web (WAF), diseñados para detectar entradas maliciosas en aplicaciones web.
LightBulb está disponible en BApp Store como extensión para Burp Suite. Puedes instalar LightBulb directamente navegando a la pestaña Burp Extender. También puedes importar la última versión standalone de la extensión.
Los Firewalls de Aplicaciones Web (WAF) son componentes fundamentales de la seguridad moderna de aplicaciones. Por ejemplo, el estándar PCI para organizaciones que manejan transacciones con tarjetas de crédito dicta que cualquier aplicación que enfrente a internet debe estar protegida por un WAF o pasar con éxito un proceso de revisión de código. Sin embargo, a pesar de su popularidad e importancia, auditar firewalls de aplicaciones web sigue siendo una tarea desafiante y compleja. Encontrar ataques que eludan el firewall generalmente requiere conocimiento experto del dominio para una clase de vulnerabilidad específica. Por lo tanto, los evaluadores de penetración que no poseen este conocimiento se quedan con listas disponibles públicamente de cadenas de ataque, como la XSS Cheat Sheet, que suelen ser insuficientes para evaluar a fondo la seguridad de un producto WAF.
En esta presentación introducimos un enfoque novedoso y eficiente para eludir WAFs utilizando algoritmos de aprendizaje de autómatas. Mostramos que los algoritmos de aprendizaje de autómatas se pueden utilizar para obtener modelos útiles de los WAF. Dado dicho modelo, mostramos cómo construir, ya sea manual o automáticamente, una gramática que describa el conjunto de posibles ataques que luego se prueban contra el modelo obtenido del firewall. Además, si nuestro sistema falla en encontrar un ataque, se genera un modelo de expresión regular del firewall para un análisis más detallado. Usando esta técnica, encontramos más de 10 vulnerabilidades previamente desconocidas en WAF populares como Mod-Security, PHPIDS y Expose, lo que nos permitió montar ataques de Inyección SQL y XSS que eludían los firewalls. Finalmente, presentamos LightBulb, un framework Python de código abierto para auditar firewalls de aplicaciones web utilizando las técnicas descritas anteriormente. En el lanzamiento incluimos el conjunto de gramáticas utilizadas para encontrar las vulnerabilidades presentadas.
Comandos de la interfaz principal:
Comandos de módulo:
Comandos de biblioteca:
Primero debes verificar que tu sistema soporte flex, python dev, pip y utilidades de compilación:
Para plataformas apt (ubuntu, debian...):
sudo apt-get install flex
sudo apt-get install python-pip
sudo apt-get install python-dev
sudo apt-get install build-essential
(Opcional para apt) Si deseas agregar soporte para pruebas MySQL:
sudo apt-get install libmysqlclient-dev
Para plataformas yum (centos, redhat, fedora...) con el repositorio extra packages ya instalado (epel-release):
sudo yum install -y python-pip
sudo yum install -y python-devel
sudo yum install -y wget
sudo yum groupinstall -y 'Development Tools'
(Opcional para yum) Si deseas agregar soporte para pruebas MySQL:
sudo yum install -y mysql-devel
sudo yum install -y MySQL-python
Para usar la aplicación sin instalación completa del paquete:
git clone https://github.com/lightbulb-framework/lightbulb-framework
cd lightbulb-framework
make
lightbulb status
Para realizar la instalación completa del paquete. También puedes instalarlo desde el repositorio pip. Esto requiere instalar primero la última versión de setuptools:
pip install setuptools --upgrade
pip install lightbulb-framework
lightbulb status
Si deseas usar virtualenv:
pip install virtualenv
virtualenv env
source env/bin/activate
pip install lightbulb-framework
lightbulb status
El comando "lightbulb status" te guiará para instalar el soporte de MySQLdb y OpenFst. Si usas virtualenv en linux, el comando "sudo" será necesario solo para la instalación del paquete libmysqlclient-dev.
Cabe señalar que el comando "lightbulb status" no es necesario si vas a usar la Extensión de Burp. La razón es que este comando instala los enlaces "openfst" y "mysql", y la extensión por defecto usa Jython, que no soporta enlaces C. Se recomienda usar el comando solo si deseas cambiar la configuración de la extensión Burp desde los ajustes y habilitar el soporte nativo.
También es posible usar una instancia docker:
docker pull lightbulb/lightbulb-framework
Si deseas usar la nueva GUI, puedes usar la extensión para Burp Suite.
La extensión ya está disponible en BApp Store. Puedes instalar LightBulb directamente navegando a la pestaña Burp Extender.
También puedes usar los siguientes pasos para instalar manualmente la última versión de la extensión desde este repositorio en Burp.
Primero, se recomienda aumentar la memoria disponible para Burp usando el siguiente comando:
java -jar -Xmx2048M /ruta/al/ejecutable/burp
Además, Lightbulb utiliza el binario nativo del analizador flex. Como resultado, se recomienda instalar flex antes de usar la herramienta. En sistemas Debian se puede instalar con el siguiente comando:
apt install flex
Luego, debes configurar un entorno de trabajo con Burp Proxy y Jython
*Puedes omitir este paso e instalar la versión standalone que contiene todos los paquetes Python requeridos. Puedes descargarla aquí
** Se soporta el último Jython 2.7.X. Sin embargo, MySQL Differential Learning puede requerir una versión anterior (ej. Jython 2.5.X) ya que el conector MySQL jar no puede importarse dinámicamente en el classpath.
Consulta la página Wiki para ver ejemplos de uso.
Esta investigación fue parcialmente apoyada por el proyecto ERC CODAMODA, #259152.
Licencia MIT según lo descrito en el archivo LICENSE
| Comando | Descripción |
|---|
| core | Muestra los módulos principales disponibles |
| utils | Muestra los manejadores de consultas disponibles |
| info <módulo> | Muestra información del módulo |
| library | Entra en la biblioteca |
| modules | Muestra los módulos de aplicación disponibles |
| use <módulo> | Entra en el módulo |
| start <móduloA> <móduloB> | Inicia el algoritmo |
| help | Muestra la ayuda |
| status | Comprueba e instala los paquetes requeridos |
| complete | Imprime el comando de completado de bash |
| Comando | Descripción |
|---|
| back | Volver al menú principal |
| info | Muestra información del módulo actual |
| library | Entra en la biblioteca |
| options | Muestra las opciones disponibles |
| define <opción> <valor> | Establece un valor de opción |
| start | Inicia el algoritmo |
| complete | Imprime el comando de completado de bash |
| Comando | Descripción |
|---|
| back | Volver al menú principal |
| info <carpeta\módulo> | Muestra la información del módulo solicitado (la carpeta debe estar en lightbulb/data/) |
| cat <carpeta\módulo> | Muestra el módulo solicitado (la carpeta debe estar en lightbulb/data/) |
| modules <carpeta> | Muestra los módulos de biblioteca disponibles en la carpeta solicitada (la carpeta debe estar en lightbulb/data/) |
| search <palabras clave> | Busca módulos de biblioteca disponibles usando palabras clave separadas por comas |
| complete | Imprime el comando de completado de bash |