comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Encontrando crashes en bibliotecas [Fuzzing] AFL

  • 2 Respuestas
  • 2038 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jimeno

  • *
  • Underc0der
  • Mensajes: 367
  • Actividad:
    0%
  • Reputación -1
  • NULL
    • Ver Perfil
    • Twitter
  • Skype: migueljimeno96
  • Twitter: "><<img src=y onerror=prompt();>
« en: Junio 26, 2015, 06:20:36 pm »
Buenas a todos.

Como muchos de vosotros sabréis habitualmente se utilizan herramientas denominadas "fuzzers" para encontrar diferentes crashes en bibliotecas y después analizarlos en busca de uno explotable.
Me gustaría presentaros y hacer una pequeña demo con uno de los mejores fuzzers conocidos: American Fuzzy Lop (+ info y descarga: No tienes permisos para ver links. Registrate o Entra con tu cuenta)

Una vez instaladas las dependencias necesarias y AFL podemos pasar a fuzzear la biblioteca en cuestión.
Para ello necesitaremos (aunque no es imprescindible) el código fuente de la misma. En caso de no tenerlo deberemos hacer uso del flag "-n", lo que hará que seguramente no encontremos crashes o que tardemos demasiado porque vamos a ciegas.

Para este post yo usaré bmp2tiff, que es parte de libtiff. Para facilitar las cosas voy a utilizar una de las versiones más viejas, en concreto la versión 3.7.0 (descarga de cualquier versión antigua en No tienes permisos para ver links. Registrate o Entra con tu cuenta)


Tras descomprimir el paquete en la ruta que queramos debemos indicar al compilador que usaremos el gcc y el g++ pertenecientes a American Fuzzy Lop en vez de los habituales y preparar la compilación.
Código: Bash
  1. export CC=afl-gcc
  2. export CXX=afl-g++
  3. ./configure --disable-shared

Limpiamos compilaciones anteriores y compilamos con los nuevos gcc y g++:
Código: Bash
  1. make clean
  2. make

Como siguiente paso comprobamos que se haya instalado correctamente la biblioteca:
Código: Bash
  1. ./tools/bmp2tiff

¡Bien! Está instalada correctamente.

Ahora deberemos conseguir varias entradas (cuantas más y más diversas mejor). En el caso de este tutorial bajaremos unas 57 imágenes con extensión .bmp y las meteremos en el directorio input/
Ahora dejaremos que AFL elija las entradas más apropiadas:
Código: Bash
  1. afl-cmin -i input -o input_final -- /rutabiblioteca/bmp2tiff @@ /dev/null



Nuestra entrada quedará ahora reducida a menos archivos.
Como siguiente paso comenzaremos el proceso de fuzzing mediante afl-fuzz:
Código: Bash
  1. afl-fuzz -i input_final -o output -- /rutabiblioteca/bmp2tiff @@ /dev/null

Comenzará así el proceso de fuzzing, que, naturalmente, depende de las capacidades de nuestro equipo y del buen desarrollo del ejecutable que queramos fuzzear.
Una vez obtengamos unos pocos crashes diferentes (unique) podremos utilizar variaciones de los mismos para obtener otros crashes nuevos y completamente diferentes.

Código: Bash
  1. afl-fuzz -i output/crashes/ -o output_final -C /rutabiblioteca/bmp2tiff @@ /dev/null

Tras un determinado tiempo comenzaremos a obtener crashes (o no).


Nota: si no especificamos otra cosa se utilizan 50 MB para cada test durante el fuzzeo.


Ahora deberemos analizar cada crash para comprobar si es o no explotable, pero eso queda para un futuro post (:

[+ info] ---> No tienes permisos para ver links. Registrate o Entra con tu cuenta
[+ info] ---> No tienes permisos para ver links. Registrate o Entra con tu cuenta
[+ info] ---> No tienes permisos para ver links. Registrate o Entra con tu cuenta


¡Saludos!



« Última modificación: Junio 26, 2015, 06:28:19 pm por Jimeno »
Contacto: @migueljimeno96 -

Desconectado .:UND3R:.

  • *
  • Underc0der
  • Mensajes: 226
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Junio 27, 2015, 10:54:58 pm »
Excelente aporte, que bueno encontrar alguien muy interesado en el tema de fallos de seguridad, saludos y gracias.

Desconectado Alvares97

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
  • Todo es tan Dificil antes de ser sencillo
    • Ver Perfil
    • Playa de bits
    • Email
« Respuesta #2 en: Julio 09, 2015, 05:38:48 pm »
que interesante
esta permitido caerse pero levantarse es obligatorio

 

¿Te gustó el post? COMPARTILO!