Fuzzing y su impacto en el entorno de prueba

4

Hice esta pregunta en StackOverflow pero no obtuve respuestas, así que pensé que probaría suerte aquí ya que fuzzing está estrechamente relacionado con la seguridad y se usa a menudo en pruebas de evaluación de vulnerabilidad.

Actualmente estoy escribiendo un fuzzer que generará una carga útil basada en un formato de especificación personalizado.

Todo está bien y estoy contento con la primera versión que escribí, pero tuve un problema al intentar aplicar este fuzzer a una tarea que no era mi caso de uso inicial.

El problema está relacionado con cómo la entrada del fuzzer afectará el entorno de prueba.

E.g:

  • Si el método probado construye un búfer con tamaño variable, ¿qué pasaría si el valor generado es 2^64 y provocaría un error de falta de memoria (OOM)?

  • Si el método de prueba elimina un archivo especificado por un nombre de archivo variable, ¿qué pasaría si el valor generado es * y se eliminara todo el directorio?

Por supuesto, estos son solo algunos ejemplos ingenuos, pero el punto es que estoy tratando de encontrar una manera de reducir las consecuencias de la confusión en el entorno de prueba (aunque aún sea portátil).

Esto haría que fuzzer sea más seguro de usar pero también más fluido, ya que los casos de prueba fuzz podrían encadenarse fácilmente y ejecutarse en paralelo sin romper o dañar el medio ambiente cada otra carga útil.

Hay algunas soluciones radicales como:

  • no usar fuzzing en métodos que podrían tener efectos secundarios críticos y consecuencias
  • entradas negras en listas negras / listas blancas en ciertos casos de uso

En mi opinión, ambos serían realmente limitantes y dificultarían el uso genérico del fuzzer en las pruebas de fuzz de caja negra.

Otras posibles soluciones como:

  • ejecutar pruebas en una máquina virtual sin cabeza como Vagrant
  • ejecutar pruebas en un contenedor de Linux como Docker
  • interceptar ciertos syscalls como llamadas de E / S y desinfectar sus entradas

son válidos, pero todos sufren el problema de que son de muy alto nivel. Syscalls y Docker también tienen el problema de no ser muy portátiles.

¿Cómo manejan este problema más fuzzers profesionales / empresariales?

Me imagino que el software de prueba de caja negra probablemente solucionó este problema de manera portátil, ¿no?

    
pregunta Awake Zoldiek 02.01.2015 - 22:59
fuente

2 respuestas

3

Cualquier prueba, no solo el difuminado, debe realizarse en algún tipo de caja de arena (por ejemplo, una máquina virtual). Esto tiene dos ventajas principales: 1) puedes restablecer rápidamente las cosas a una configuración conocida y 2) los errores (como una eliminación recursiva fuera de control que incluye .. en la lista de directorios) no pueden dañar datos importantes.

    
respondido por el Mark 03.01.2015 - 10:28
fuente
0

El marco de Sulley Fuzzing se anunció junto con el libro "Fuzzing: Brute Force Vulnerability Discovery" y más información sobre ambos están disponibles en fuzzing.org

Otros marcos de prueba de fuzz, probablemente antes de Sulley, y algunos después, utilizan una técnica de VM invitada. También hay máquinas virtuales para probar los hipervisores como el iofuzz ISO de Tavis Ormandy. Otra técnica mencionada en el libro es hacer un seguimiento de las fallas, los bloqueos y el estado (como el orden de los paquetes y la secuencia), por lo que vale la pena una lectura completa.

Potencialmente, el libro más reciente sobre pruebas fuzz que cubre Sulley es la cuarta edición más reciente de "Gray Hat Hacking: The Ethical Hacker's Handbook". Si Sulley o los recursos de estos libros no son útiles, quizás pueda ayudarme a concentrarme en lo que está buscando exactamente.

Si bien hay suites, motores e incluso dispositivos de prueba Enterprise fuzz, podría sugerirle que consulte con las personas que escriben y ejecutan pruebas fuzz especializadas como la que le interesa y busca construir. Por ejemplo, Deja Vu Security ha escalado los motores de prueba de fuzz de máquinas virtuales durante muchos años. La experiencia veterana de sus investigadores probablemente se puede encontrar en su blog, en sus bases de códigos y durante sus charlas en DEF CON, BlackHat y otras conferencias de seguridad de la información.

    
respondido por el atdre 03.01.2015 - 09:03
fuente

Lea otras preguntas en las etiquetas