¿Qué es la prueba de fuzz?

La prueba de fuzz, o fuzzing, es un método de verificación para ver cómo un programa o sistema de computadora responderá a diversas entradas e información, a veces aleatorias. El proceso implica generar algún tipo de datos, ya sea completamente aleatorio o aleatorio dentro de ciertas restricciones, y luego introducir esos datos en el programa para probar cómo maneja la información inesperada. La forma más básica de prueba de fuzz consiste en enviar una secuencia aleatoria de pulsaciones de teclas o caracteres al programa y comprobar que los procesa correctamente. Una versión más compleja de las pruebas fuzz usa datos estructurados que luego se manipulan aleatoriamente y se envían al programa. Los datos pueden llegar al programa como eventos del sistema, entradas de teclado, señales de red simuladas o incluso como archivos que se van a cargar.

Hay varias partes de un programa de computadora que se pueden probar con un generador de fuzz. La interfaz gráfica de usuario (GUI) se puede probar creando una secuencia de eventos aleatorios de mouse y teclado y verificando que la GUI pueda manejar la entrada sin fallar, congelar o realizar una tarea inesperada. Los protocolos de red se pueden probar permitiendo que el generador de fuzz cambie aleatoriamente partes de un paquete de datos válido y luego asegurándose de que el protocolo pueda continuar funcionando después de recibir datos con formato incorrecto. Se puede verificar la capacidad de los elementos de entrada básicos de casi cualquier programa para resistir errores, como una entrada que es demasiado larga para el tipo de almacenamiento, una entrada que es de un tipo diferente al esperado y una entrada que de alguna manera es incompleta o incorrecta.

La industria de la seguridad informática puede utilizar pruebas de fuzz para asegurarse de que no existan agujeros de seguridad obvios en ciertos sistemas. Esto se puede hacer usando un generador de fuzz diseñado para probar la seguridad informática. Estos programas intentarán usar palabras clave del sistema, contraseñas de administrador predeterminadas conocidas, funciones dentro de las bibliotecas que usa el programa y llamadas aleatorias a funciones del sistema para ver cómo reaccionará el programa.

Los diferentes tipos de pruebas de fuzz se pueden personalizar para que estén dentro de ciertos rangos, o incluso para probar solo tipos específicos de entrada. Esto significa que un programa solo podría tener comandos válidos enviados, pero podrían estar en un orden sin sentido. Existen programas de prueba de fuzz más complejos que pueden tomar elementos del programa de destino y manipularlos para producir situaciones que podrían explotarse de forma malintencionada. Esto puede incluir cambiar el orden de los procesos que se generan, modificaciones de permisos o modificación de datos centrales y archivos de biblioteca.

El resultado final de la prueba fuzz es ver si un programa es seguro y se comporta como debería cuando se enfrenta a una situación inesperada. Cuando se utiliza junto con el software de análisis y creación de perfiles, también puede detectar fugas de memoria en áreas del programa, como la gestión de errores o los cuellos de botella en el rendimiento. En los casos de seguridad informática, los problemas peligrosos como los desbordamientos que pueden comprometer un sistema pueden detectarse con la configuración correcta. Sin embargo, las pruebas de fuzz no se pueden utilizar como el único método de prueba de software y deben ser parte de un proceso más amplio de control de calidad e inspección de software.