send
Grupo de Telegram
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
  • 1735 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: You are not allowed to view links. Register or Login)

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 You are not allowed to view links. Register or Login)


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] ---> You are not allowed to view links. Register or Login
[+ info] ---> You are not allowed to view links. Register or Login
[+ info] ---> You are not allowed to view links. Register or Login


¡Saludos!



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

Conectado .: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: 69
  • 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!