Tutorial de prueba de fuzz (fuzzing)
¿Qué es la prueba Fuzz?
Prueba de fuzz o Fuzzing es una técnica de prueba de software que consiste en colocar datos no válidos o aleatorios llamados FUZZ en un sistema de software para descubrir errores de codificación y lagunas de seguridad. El propósito de las pruebas difusas es insertar datos utilizando técnicas automatizadas o semiautomáticas y probar el sistema para detectar diversas excepciones, como fallas del sistema o fallas del código integrado, etc.
Las pruebas de fuzz fueron desarrolladas originalmente por Barton Miller en la Universidad de Wisconsin en 1989. Las pruebas de fuzz o fuzzing son una técnica de prueba de software y es un tipo de Pruebas de seguridad.
¿Por qué hacer pruebas Fuzz?
- Por lo general, las pruebas difusas encuentran la falla o defecto de seguridad más grave.
- La prueba de fuzz proporciona resultados más eficaces cuando se utiliza con Negro Box Pruebas , Pruebas Beta y otros métodos de depuración.
- Las pruebas Fuzz se utilizan para comprobar la vulnerabilidad del software. Se trata de técnicas de prueba muy rentables.
- Las pruebas fuzz son una de las técnicas de pruebas de caja negra. El fuzzing es uno de los métodos más comunes que utilizan los hackers para encontrar vulnerabilidades en el sistema.
Cómo hacer pruebas difusas
Los pasos para las pruebas difusas incluyen los pasos de prueba básicos:
Paso 1) Identificar el sistema objetivo
Paso 2) Identificar entradas
Paso 3) Generar datos difusos
Paso 4) Ejecute la prueba utilizando datos difusos.
Paso 5) Monitorear el comportamiento del sistema
Paso 6) Defectos de registro
Ejemplos de fuzzers
- Fuzzers basados en mutaciones alterar muestras de datos existentes para crear nuevos datos de prueba. Este es un enfoque muy simple y directo, comienza con muestras válidas de protocolo y continúa alterando cada byte o archivo.
- Fuzzers basados en generación definir nuevos datos basados en la entrada del modelo. Comienza a generar información desde cero según la especificación.
- Fuzzer basado en protocolo, el fuzzer más exitoso es tener un conocimiento detallado del formato del protocolo que se está probando. La comprensión depende de la especificación. Implica escribir una matriz de la especificación en la herramienta y luego, utilizando una técnica de generación de pruebas basada en modelos, revisar la especificación y agregar irregularidades en el contenido de los datos, la secuencia, etc. Esto también se conoce como prueba de sintaxis, prueba de gramática, prueba de robustez, etc. Fuzzer puede generar casos de prueba a partir de uno existente, o puede utilizar entradas válidas o no válidas.
Existen dos limitaciones de la fuzzing basada en protocolos:
- Las pruebas no pueden continuar hasta que la especificación esté madura.
- Muchos protocolos útiles son una extensión de los protocolos publicados. Si las pruebas fuzz se basan en especificaciones publicadas, Cobertura de prueba para nuevos protocolos será limitado.
La forma más simple de técnica de fuzzing es enviar entradas aleatorias al software, ya sea como paquetes de protocolo o como un evento. Esta técnica de pasar entradas aleatorias es muy poderosa para encontrar errores en muchas aplicaciones y servicios. También hay otras técnicas disponibles y es muy fácil de implementar. Para implementar estas técnicas solo necesitamos cambiar las entradas existentes. Podemos cambiar la entrada simplemente intercambiando los bits de entrada.
Tipos de errores detectados por Fuzz Testing
- Fallos de aserción y pérdidas de memoria. Esta metodología se usa ampliamente para aplicaciones grandes donde los errores afectan la seguridad de la memoria, lo cual es una vulnerabilidad grave.
- Entrada inválida En las pruebas fuzz, los fuzzers se utilizan para generar una entrada no válida que se utiliza para probar rutinas de manejo de errores, y esto es importante para el software que no controla su entrada. La fuzzing simple puede considerarse una forma de automatizar las pruebas negativas.
- Errores de corrección La fuzzing también se puede utilizar para detectar algunos tipos de errores de "corrección". Como una base de datos corrupta, resultados de búsqueda deficientes, etc.
Herramientas de prueba de fuzz
Las herramientas que se utilizan en seguridad web se pueden utilizar ampliamente en pruebas difusas, como Burp Suite, Melocotón Fuzzer, etc.
- Melocotón Fuzzer: Peach Fuzzer proporciona una cobertura más sólida y segura que un escáner. Otras herramientas de prueba pueden buscar sólo subprocesos conocidos, mientras que Peach Fuzzer permite a los usuarios encontrar subprocesos conocidos y desconocidos.
- Proxy de pico: Es una herramienta de nivel profesional que busca vulnerabilidades a nivel de aplicación en aplicaciones web. SPIKE Proxy cubre los conceptos básicos, como SQL Inyección y secuencias de comandos entre sitios, pero está completamente abierto Python infraestructura. SPIKE Proxy está disponible para Linux y Windows.
- Webescarabajo: Webscarab está escrito en Java por lo tanto portátil a muchas plataformas. Para analizar la aplicación, se utiliza el marco Webscarab que se comunica mediante los protocolos HTTP y HTTPS.por ejemplo: Webscarab funciona como un proxy interceptor, permite al operador revisar y modificar las solicitudes creadas por el navegador antes de que sean recibidas por el servidor. También permite revisar y actualizar las respuestas generadas por el servidor antes de que sean recibidas por el navegador. De esta manera, si Webscarab encuentra alguna falla, creará una lista de los problemas informados.
- Fusible OWASP WSFuzzer: WSFuzzer es un programa GPL escrito en Python. Un programa con licencia GPL actualmente tiene como objetivo los servicios web. En la versión actual de OWASPWSFuzzer, la licencia HTTP está basada en Servicios SOAP son el objetivo principal.
Ventajas de las pruebas fuzz
- Las pruebas fuzz mejoran el software Pruebas de seguridad.
- Los errores encontrados en la fuzzing a veces son graves y la mayoría de las veces los utilizan los piratas informáticos, incluidos fallos, pérdida de memoria, excepciones no controladas, etc.
- Si los evaluadores no notan alguno de los errores debido a la limitación de tiempo y recursos, esos errores también se encuentran en las pruebas de Fuzz.
Desventajas de las pruebas Fuzz
- Las pruebas Fuzz por sí solas no pueden proporcionar una imagen completa de una amenaza o error de seguridad general.
- Las pruebas Fuzz son menos efectivas para lidiar con amenazas de seguridad que no causan fallas en el programa, como algunos virus, gusanos, troyanos, etc.
- Las pruebas fuzz solo pueden detectar fallas o amenazas simples.
- Para funcionar con eficacia, se necesitará mucho tiempo.
- Establecer una condición de valor límite con entradas aleatorias es muy problemático, pero ahora, al utilizar algoritmos deterministas basados en las entradas de los usuarios, la mayoría de los evaluadores resuelven este problema.
Resumen
En Ingeniería de Software, las pruebas Fuzz muestran la presencia de errores en una aplicación. Fuzzing no puede garantizar la detección completa de errores en una aplicación. Pero al utilizar la técnica Fuzz, se garantiza que la aplicación sea sólida y segura, ya que esta técnica ayuda a exponer la mayoría de las vulnerabilidades comunes.