
Framework para probar WAFs (FTW!)
Este proyecto fue creado por investigadores de ModSecurity y Fastly para ayudar a proporcionar pruebas rigurosas para reglas de WAF. Utiliza el OWASP Core Ruleset V3 como línea base para probar reglas en un WAF. Cada regla del conjunto de reglas se carga en un archivo YAML que emite solicitudes HTTP que activarán estas reglas.
Objetivos / Casos de uso incluyen:
git clone [email protected]:fastly/ftw.gitcd ftwapt-get install python-pippip install -r requirements.txtpy.test test/test_default.py --ruledir test/yamlSi necesitas un entorno para probar reglas de WAF, se ha creado uno con Apache, Modsecurity y la versión 3.0.0 del conjunto de reglas base de OWASP. Esto se puede implementar mediante:
git clone https://github.com/fastly/waf_testbed.gitvagrant uppy.test test/test_default.py --ruledir=test/yaml --destaddr=domain.com --port 443 --protocol httpspy.test test/integration/test_logcontains.py -s --ruledir=test/integration/*.py con las importaciones necesarias, un ejemplo se muestra en test/integration/test_logcontains.pytest* serán ejecutadas por py.test, así que crea una función def test_somewafLogCheckerget_logs(). FTW llamará a esta función después de ejecutar la prueba, y establecerá las fechas y horas de self.start y self.endget_logs()fixtures de py.test. Usa un decorador de función @pytest.fixture, devuelve tu nuevo objeto . Cada vez que uses un argumento de función en tus pruebas que coincida con el nombre de ese , instanciará tu objeto y hará más fácil ejecutar pruebas. Un ejemplo de esto está en el archivo Python del paso 1.Aunque se prefiere hacer solicitudes usando el formato YAML, a menudo las pruebas automatizadas requieren hacer muchas solicitudes dinámicas. En tal caso, se recomienda usar el marco py.test para producir casos de prueba que se puedan ejecutar como parte del todo. Generalmente, hacer una solicitud HTTP es simple:
HttpUA()Input() proporcionando los parámetros que no quieras que tengan valores por defectoHttpUA.send_request()Para algunos ejemplos, consulta las pruebas de integración http
LogChecker@pytest.fixture*.yaml como se ve en test/integration/LOGCONTAINSFIXTURE.yaml. La línea log_contains requiere una cadena que sea una expresión regular. FTW compilará la cadena log_contains de cada etapa en el archivo YAML en una expresión regular. Luego, esta expresión regular se usará junto con las líneas de logs pasadas desde get_logs() para buscar una coincidencia. La cadena log_contains debe ser un identificador de regla único, ya que FTW es codicioso y pasará a la primera coincidencia. Los falsos positivos se mitigan con la hora de inicio/fin pasada al objeto LogChecker, pero es mejor mantenerse seguro y usar expresiones regulares únicas.get_logs(), así que asegúrate de tener en cuenta las llamadas API si así es como recuperas tus logs.