¿Cuántas iteraciones de fuzzing es suficiente?

9

Fuzzing es una forma conveniente y de costo relativamente bajo para detectar algunos tipos de vulnerabilidades, particularmente en el código C / C ++.

Mi pregunta: ¿Cuánta confusión es suficiente? ¿Existen normas o mejores prácticas?

Ejemplo: el SDL de Microsoft requiere que la aplicación de fuzzing al código sensible a la seguridad que analiza la entrada basada en archivos. El SDL requiere un mínimo de 500,000 iteraciones de pruebas fuzz y al menos 250,000 iteraciones "limpias". ( Aquí hay una cita. Cualquier iteración fuzz que encuentre un error de seguridad restablece el conteo de "limpio" las iteraciones vuelven a cero.) El SDL también requiere que todos los datos de la red se borren durante al menos 100,000 iteraciones. ( Aquí hay una cita. )

¿Alguien conoce otras pautas o los criterios que utilizan otras organizaciones?

    
pregunta D.W. 07.08.2011 - 06:31
fuente

1 respuesta

7

No tengo números para usted, ni pautas específicas, pero creo que un tema importante a destacar, pero no se enfatizó lo suficiente en esos enlaces, es la Cobertura del Código.

No tiene mucho sentido ejecutar una gran cantidad de iteraciones fuzz, si todas son similares, desde el punto de vista de la ruta del código.
Es decir, la "confusión tonta" puede generar muchas entradas diferentes (archivo / red / RPC / lo que sea), que se ven lo suficientemente diferentes, pero todas tienen el mismo efecto en el código, lo que hace que el programa tome el control. mismo código de rutas. Obviamente, esto no es muy efectivo.

Microsoft también ha desarrollado herramientas internas (conozco a FuzzGuru) que implementan "fuzzing inteligente". (Consulte esta charla de hace unos años sobre su discusión ). Esto permite que MS ejecute fuzzing mucho más eficiente, con un número mucho menor de iteraciones (no oficialmente, por supuesto), simplemente porque pueden garantizar un porcentaje mucho mayor de cobertura de código en cada iteración.

En cualquier caso, es importante hacer su fuzzing, ya sea "inteligente" o "tonto", en combinación con las herramientas de cobertura de códigos, para asegurarse de que está obteniendo el valor apropiado de sus esfuerzos de fuzzing.

    
respondido por el AviD 10.08.2011 - 12:15
fuente

Lea otras preguntas en las etiquetas