¿Qué es la prueba de fuzz?
La prueba de fuzz, o fuzzing, es un método de verificación para ver cómo responderá un programa o sistema informático a varias entradas e información, a veces aleatorias. El proceso implica generar algún tipo de datos, ya sea completamente al azar o al azar dentro de ciertas restricciones, y luego alimentar esos datos al 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 verificar que los procesa correctamente. Una versión más compleja de las pruebas fuzz utiliza 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 deben 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, bloquearse 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 mal formados. Los elementos de entrada básicos de casi cualquier programa pueden verificarse por su capacidad para resistir errores, como la entrada que es demasiado larga para el tipo de almacenamiento, la entrada que es de un tipo diferente al esperado y la entrada que de alguna manera es incompleta o incorrecta.
La industria de la seguridad informática puede utilizar pruebas fuzz para garantizar que no existan agujeros de seguridad obvios en ciertos sistemas. Esto se puede hacer utilizando un generador de fuzz diseñado para probar la seguridad de la computadora. 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 las funciones del sistema para ver cómo reaccionará el programa.
Los diferentes tipos de prueba de fuzz se pueden personalizar para estar dentro de ciertos rangos, o incluso para probar solo tipos específicos de entrada. Esto significa que un programa solo podría recibir comandos válidos, pero podría 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 maliciosamente. 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 las pruebas 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 pérdidas de memoria en áreas del programa, como el manejo de errores o los cuellos de botella en el rendimiento. En casos de seguridad informática, problemas peligrosos como desbordamientos que pueden comprometer un sistema pueden detectarse con la configuración correcta. Sin embargo, las pruebas fuzz no pueden usarse como el único método de prueba de software y deben formar parte de un proceso más amplio de garantía de calidad e inspección de software.