Tutorial de pruebas de fuzz (fuzzing): qué es, tipos, herramientas y amp; Ejemplo

Prueba de fuzz

Fuzz Testing o Fuzzing es una técnica de prueba de software para poner datos inválidos o aleatorios llamados FUZZ en el sistema de software para descubrir errores de codificación y lagunas de seguridad. El propósito de las pruebas de fuzz es insertar datos utilizando técnicas automatizadas o semiautomatizadas y probar el sistema en busca de varias excepciones, como fallas del sistema o fallas del código incorporado, etc.

La prueba de fuzz fue desarrollada originalmente por Barton Miller en la Universidad de Wisconsin en 1989. La prueba de fuzz o fuzzing es una técnica de prueba de software y es un tipo de prueba de seguridad .

¿Por qué realizar pruebas de fuzz?

  • Por lo general, las pruebas difusas encuentran la falla o defecto de seguridad más grave.
  • Las pruebas fuzz brindan resultados más efectivos cuando se utilizan con pruebas de caja negra, pruebas beta y otros métodos de depuración.
  • Las pruebas de fuzz se utilizan para comprobar la vulnerabilidad del software. Son técnicas de prueba muy rentables.
  • La prueba de fuzz es una de las técnicas de prueba de caja negra. Fuzzing es uno de los métodos más comunes que utilizan los piratas informáticos para encontrar la vulnerabilidad del sistema.

Cómo hacer pruebas de fuzz

Los pasos para la prueba difusa incluyen los pasos de prueba básicos:

Paso 1) Identificar el sistema de destino

Paso 2) Identificar las entradas

Paso 3) Genere datos difusos

Paso 4) Ejecute la prueba usando datos difusos

Paso 5) Monitorear el comportamiento del sistema

Paso 6) Registrar defectos

Ejemplos de Fuzzers

  • Los Fuzzers basados ​​en mutaciones modifican las muestras de datos existentes para crear nuevos datos de prueba. Este es el enfoque muy simple y directo, comienza con muestras válidas de protocolo y sigue modificando cada byte o archivo.

  • Los Fuzzers basados ​​en generaciones definen nuevos datos basados ​​en la entrada del modelo. Comienza a generar entradas desde cero según la especificación.

  • Fuzzer BASADO EN PROTOCOLO , el fuzzer más exitoso es tener un conocimiento detallado del formato de 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, mediante el uso de una técnica de generación de pruebas basada en modelos, pasar por 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. Etc. Fuzzer puede generar casos de prueba a partir de uno existente, o pueden usar entradas válidas o no válidas.

Hay dos limitaciones de la fuzzing basada en protocolos:

  1. Las pruebas no pueden continuar hasta que la especificación esté madura.
  2. Muchos protocolos útiles son una extensión de los protocolos publicados. Si la prueba de fuzz se basa en especificaciones publicadas, la cobertura de prueba para nuevos protocolos será limitada.

La forma más simple de técnica de fuzzing es enviar una entrada aleatoria al software como paquetes de protocolo o como un evento. Esta técnica de pasar entrada aleatoria 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 afirmación y fugas de memoria: esta metodología se utiliza ampliamente para aplicaciones grandes en las que los errores afectan la seguridad de la memoria, lo que constituye una vulnerabilidad grave.

  • Entrada inválida

    En las pruebas de fuzz, los fuzzers se utilizan para generar una entrada no válida que se utiliza para probar las rutinas de manejo de errores, y esto es importante para el software que no controla su entrada. El fuzzing simple se puede conocer como una forma de automatizar las pruebas negativas.

  • Errores de corrección

    Fuzzing también se puede utilizar para detectar algunos tipos de errores de "corrección". Como una base de datos dañada, 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 de fuzz como Burp Suite, Peach Fuzzer, etc.

  • Melocotón Fuzzer

    Peach Fuzzer proporciona una cobertura más sólida y de seguridad que un escáner. Otras herramientas de prueba solo pueden buscar 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 la inyección de SQL y las secuencias de comandos entre sitios, pero es una infraestructura de Python completamente abierta. SPIKE Proxy está disponible para Linux y Windows.

  • Webscarab

    Webscarab está escrito en Java, por lo que es portátil para muchas plataformas. Para analizar la aplicación se utiliza el framework Webscarab que se comunica mediante protocolos HTTP y HTTPS.

    Ejemplo : Webscarab funciona como un proxy de interceptación, permite al operador revisar y modificar la solicitud creada por el navegador antes de que el servidor la reciba. Y permite revisar y actualizar la respuesta generada por el servidor antes de que la reciba el navegador. De esta manera, si web scarab encuentra alguna laguna, hará la lista de los problemas reportados.

  • OWASP WSFuzzer

    WSFuzzer es un programa GPL escrito en Python. GPL es un programa que actualmente se dirige a los servicios web. En la versión actual de OWASPWSFuzzer, los servicios SOAP basados ​​en HTTP son el objetivo principal.

Ventajas de las pruebas de fuzz

  • Las pruebas de fuzz mejoran las pruebas de seguridad del software.
  • Los errores que se encuentran en el fuzzing a veces son graves y la mayoría de las veces los utilizan los piratas informáticos, incluidos bloqueos, pérdida de memoria, excepción no controlada, etc.
  • Si alguno de los errores no es detectado por los evaluadores debido a la limitación de tiempo y recursos, esos errores también se encuentran en las pruebas Fuzz.

Desventajas de las pruebas de fuzz

  • Las pruebas de fuzz por sí solas no pueden proporcionar una imagen completa de una amenaza o errores de seguridad en general.
  • Las pruebas de 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 de fuzz solo pueden detectar fallas o amenazas simples.
  • Para funcionar de manera efectiva, requerirá un tiempo considerable.
  • Establecer una condición de valor límite con entradas aleatorias es muy problemático, pero ahora, utilizando algoritmos deterministas basados ​​en las entradas de los usuarios, la mayoría de los probadores 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 de errores por completo en una aplicación. Pero al usar la técnica Fuzz, se asegura que la aplicación sea robusta y segura, ya que esta técnica ayuda a exponer la mayoría de las vulnerabilidades comunes.

Este artículo es una contribución de Priyanka Kothe.

Articulos interesantes...