Pentesting and Security Personal Blog

Pentesting and Security Personal Blog

ftw

Marco para probar WAFs (FTW)

Estado de la compilación Versión PyPI

Propósito

Este proyecto fue creado por investigadores de ModSecurity y Fastly para ayudar a proporcionar pruebas rigurosas para las reglas WAF. Utiliza el OWASP Core Ruleset V3 como referencia para probar reglas en un WAF. Cada regla del conjunto de reglas se carga en un archivo YAML que emite peticiones HTTP que activarán estas reglas.

Metas/Casos de uso, incluyen:

  • Encontrar regresiones en despliegues WAF mediante la integración continua y la emisión de ataques repetibles a un WAF
  • Proporcionar un marco de prueba para las nuevas reglas en ModSecurity, si una regla se presenta debe tener las pruebas positivas y negativas correspondientes
  • Evaluar WAFs en contra de un conjunto de reglas de base común y consensuada (OWASP)
  • Prueba y verifica reglas personalizadas para WAF que no forman parte del conjunto de reglas básicas

Instalación

  • Git clone git@github.com:fastly/ftw.git
  • Cd ftw
  • Asegúrese de que pip está instalado apt-get install python-pip
  • Pip install -r requirements.txt

Running Tests with HTML contains y verificaciones de código de estado

  • Crear archivos YAML que apuntan a su servidor web con un WAF delante de él
  • Py.test test/test_default.py --ruledir test/yaml

Provisioning Apache + Modsecurity + OWASP CRS

Si necesita un entorno para probar las reglas WAF, se ha creado una con Apache, Modsecurity y la versión 3.0.0 del conjunto de reglas principales de OWASP. Esto puede ser implementado por:

  • Comprobación del repositorio: git clone https://github.com/fastly/waf_testbed.git
  • Vagrant vagrant up

Ejecución de pruebas mientras se reemplaza la dirección de destino en los archivos yaml a dominio personalizado

  • Iniciar su servidor web de prueba
  • Py.test test/test_default.py --ruledir=test/yaml --destaddr=dominio.com --port 443 --protocol https

Ejecutar prueba de integración, servidor web local, puede tener que usar sudo

  • py.test test/integration/test_logcontains.py -s --ruledir=test/integration/

COMO INTEGRAR REGISTROS

  1. Cree un archivo *.py con las importaciones necesarias, se muestra un ejemplo en test/integration/test_logcontains.py
  2. Todas las funciones con test* en el principio serán ejecutadas por py.test, así que realice una función def test_somewaf
  3. Implementar una clase que hereda LogChecker
  4. Implementar la función get_logs(). FTW llamará a esta función después de ejecutar la prueba, y establecerá las fechas de self.start yself.end
  5. Utilice la información de las variables de fecha y hora para recuperar los archivos de su WAF, ya sea un archivo o una llamada de API
  6. Obtenga los registros, almacénelos en una matriz de cadenas y devuélvalos desde get_logs()
  7. Hacer uso de py.test fixtures. Utilice un decorador de funciones @pytest.fixture, devuelva su nuevo objeto LogChecker. Siempre que utilice un argumento de función en sus pruebas que coincida con el nombre de ese @pytest.fixture, instanciará su objeto y facilitará la ejecución de las pruebas. Un ejemplo de esto está en el archivo python del paso 1.
  8. Escriba una configuración de prueba en el formato *.yaml como se ve en test/integration/LOGCONTAINSFIXTURE.yaml, la línea log_contains requiere una cadena que sea un regex. FTW compilará la cadena log_contains de cada etapa del archivo YAML en una regex. Este regex se utilizará junto con las líneas de los registros pasados ​​de get_logs() para buscar una coincidencia. La cadena log_contains, entonces, debe ser una regla-ID única, ya que FTW es codiciosa y pasará la primera coincidencia. Los falsos positivos se mitigan desde el tiempo de inicio/fin pasado al objeto LogChecker, pero lo mejor es mantenerse seguro y usar expresiones regulares únicas.
  9. Para cada etapa, se llama a la función get_logs(), así que asegúrese de contabilizar las llamadas API si así es como recupera sus registros.

Realizar solicitudes HTTP mediante programación

Aunque se prefiere hacer peticiones usando el formato YAML, a menudo las pruebas automatizadas requieren hacer muchas peticiones dinámicas. En tal caso, se recomienda hacer uso del marco py.test para producir casos de prueba que se pueden ejecutar como parte del conjunto. Generalmente hacer una petición HTTP es simple:

  1. crear una instancia de la clase HttpUA()
  2. crear una instancia de la clase Input() proporcionando los parámetros que no quieras que se defaudan
  3. Proporcione la instancia de la clase input a HttpUA.send_request()

  4. Para ver ejemplos véanse las pruebas de integración http

Podéis obtenerlo aquí:

github: https://github.com/fastly/ftw/

¡Gracias por leer!

maninwire =D

Know your enemy!


Written by maninwire@gmail.com in Tools on vie 21 julio 2017. Tags: tool,