La búsqueda de errores suele ser ordenada. Las pruebas de fuzz, por otro lado, se caracterizan por la adición de registros aleatorios. De esta forma, se pueden descubrir errores que con los mecanismos de prueba convencionales permanecen ocultos.
Leer: ¿Qué es Joomla?
Historia de prueba de fuzzing
En TI, un mito de la génesis no es necesariamente uno de los requisitos básicos para métodos bien implementados. Sin embargo, existe una historia muy clara del origen de lo que se conoce como prueba de fuzz.
A fines de la década de 1980, Barton Miller, un profesor de informática en Madison, Wisconsin, usó una conexión de línea fija para trabajar desde su casa en su terminal Unix en la universidad. Durante una tormenta, las señales no llegaron a través de la línea como se esperaba y el software recibió entradas casi aleatorias entre relámpagos y truenos. Incluso los programas robustos colapsaron por las entradas aleatorias, para gran sorpresa de Miller.
Miller y sus estudiantes destilaron esta experiencia en un procedimiento de prueba conocido como prueba de fuzzing. La estabilidad de un programa fue y será probada a través de la entrada de datos aleatoria y no estructurada si la entrada del usuario deja ciertos esquemas. El proceso sigue siendo popular en el desarrollo de software hoy en día, pero no está exento de dificultades.
Los beneficios de las pruebas de fuzz
Si los programas solo se prueban dentro de sus límites, las brechas de seguridad pueden persistir. Un error causado por una entrada inesperada es un potencial agujero de seguridad que podría explotarse en cualquier momento.
De hecho, los piratas informáticos y los ciberdelincuentes utilizan pruebas de fuzz y métodos similares con más frecuencia para encontrar vulnerabilidades en los sistemas. En consecuencia, los desarrolladores de software también deben integrar el fuzzing en su ciclo de prueba para encontrar puntos débiles en sus programas incluso bajo estrés.
Desventajas del fuzzing
En la práctica, las pruebas de fuzz han demostrado ser especialmente adecuadas para encontrar brechas de seguridad más graves. El método de fuzzing ofrece los mejores resultados junto con las pruebas de caja negra o como parte de una prueba beta. Precisamente porque los ciberdelincuentes a menudo utilizan métodos similares en la práctica, los programadores deberían anticiparlos mediante pruebas intensivas de fuzz. Sin embargo, una de las principales desventajas del fuzzing es el costo.
En principio, la prueba de fuzz, como con la tormenta de Miller, también es posible mediante el uso de entradas generadas de forma completamente aleatoria. Sin embargo, las debilidades más probables de un sistema difícilmente pueden identificarse de esta manera. Suele haber un número infinito de entradas aleatorias, pero para condensarlas en un período de prueba limitado, las pruebas de fuzz requieren un poco más de habilidad manual por parte del desarrollador.
Así es como funcionan las pruebas de fuzz en la práctica
La aplicación práctica de fuzzing se lleva a cabo en cuatro pasos fáciles de repetir.
- 1. Primero se prepara y se abre un archivo de entrada correcto.
- 2. En el segundo paso, cualquier parte del archivo se intercambia por datos aleatorios y …
- 3. … luego abierto por el programa.
- 4. Finalmente, los desarrolladores deben registrar qué parte del sistema ha cedido.
Esta última parte puede resultar bastante laboriosa, en muchos casos es la forma más sencilla de registrar pasadas y fallas. Partes de la prueba de fuzz se pueden escribir manualmente en Perl o AppleScript, por ejemplo.
Diferentes variantes de fuzzers
Los programas que permiten el fuzzing automático se denominan fuzzers. Por lo general, se basan en tres metodologías diferentes:
- Fuzzers basados en mutaciones: aquí, los conjuntos de datos correctos se cambian para generar nuevos datos de prueba. Los archivos o bits individuales se adaptan y cambian y los registros de errores generados aleatoriamente se crean automáticamente.
- Fuzzers basados en generación: este modelo no se basa en conjuntos de datos correctos, sino que crea entradas generadas en función de las especificaciones de entrada. Cada entrada es completamente reescrita por el fuzzer.
- Fuzzers basados en protocolos: los fuzzers más eficientes se encuentran en los fuzzers basados en protocolos. El requisito previo para la funcionalidad en este caso es que los programadores puedan utilizar pruebas de sintaxis, gramática o robustez como base para la generación de pruebas basadas en modelos. Los fuzzers basados en protocolos requieren un conocimiento más profundo del formato del protocolo que se va a probar y requieren especificaciones sofisticadas.
Hay varias herramientas de fuzzer disponibles para programadores, como Peach Fuzzer, Webscarab escrito en Java, Spike Proxy u OWASP WSFuzzer o el proyecto de código abierto American Fuzzy Loop.
Leer: ¿Qué es Moodle?
Prueba de fuzz como parte del ciclo de prueba
Las pruebas de fuzz han demostrado ser una adición particularmente eficiente a las pruebas de seguridad para encontrar fugas de memoria y fallas de afirmación o para verificar entradas incorrectas. En C y C ++ en particular, la gestión de la memoria es un punto crítico del sistema debido al control manual sobre la memoria y merece una atención adecuada en las pruebas de seguridad.
A pesar de la experiencia requerida, el tiempo y el gasto financiero, es aconsejable lidiar con las pruebas de fuzz, pero solo debe entenderse como parte de un control de seguridad integral. Por cierto, el nombre se deriva del término inglés «fuzzy», que se traduce como «poco claro, borroso» y ya da una clara indicación de la metodología de las pruebas de fuzz.
¿Qué es un candidato de lanzamiento (RC)? Definición
¿Qué es una aplicación para iOS? Definición | Programación
¿Qué es un error de programación? Definicion y tipos
¿Qué es una dirección IP? Definición | Dirección única
¿Qué es NetBeans? Definición | Entorno de desarrollo
¿Qué es UML? Definición | Lenguaje de modelado unificado
¿Qué es una vista previa para desarrolladores? Definición
¿Qué es QHD? Definición | Resolución Quad-HD explicada
¿Qué es un administrador de paquetes de software?