domingo, 15 de septiembre de 2013

HOTFUZZ: EASY FUZZING

En este artículo realizaremos tareas de fuzzing utilizando la herramienta Hotfuzz.

Hotfuzz es una herramienta que utiliza peach y disectores de Wireshark para crear un man-in-the-middle (proxy) based fuzzer el cual dispone de la opcion de crear los peach Pit. HotFuzz es una implementación de un grupo de estudiantes de Praga.

Dicho de otra forma, con hotfuzz dispondremos de una herramienta con interfaz gráfica, capaz de “entender” el protocolo que se le indica (soporta muchos de los que soporta wireshark) y generar el archivo xml con todos los datos necesarios para realizar las tareas de fuzzing con peach, todo esto de forma casi automática. También nos dará toda la información necesaria en caso de producirse un crash. Es una herramien fácil y flexible, ideal para tareas de Fuzzing sobre protocolos conocidos como FTP,HTTP,etc.


Podéis descargarlo aquí: http://hotfuzz.sourceforge.net/   

(Debéis tener instalado Python para ejecutarlo)

Para realizar nuestro ejemplo  utilizaremos un servidor FTP vulnerable:
PCMan´s FTP Server 2.0.7 Buffer Overflow Exploit

http://www.exploit-db.com/exploits/26471/




Una vez descargado el servidor FTP, podemos ver los archivos que los componen con el ejecutable que Fuzearemos:
 

  El primer paso será abrir HotFuzz haciendo doble click en el archivo indicado en la captura de pantalla.



Una vez abierto, podemos ver a continuación una captura de la pantalla principal.

Esta primera pestaña “Recording” es la que contiene los campos necesarios para configurar la herramienta, y que de forma automática analice el protocolo que usamos y nos genere el xml para el Peach Pit.




 Empecemos con nuestro ejemplo:


1. Pestaña “Recording”: En primer lugar debemos tener en cuenta en la parte superior la sección dedicada al Cliente y al Servidor:

     a) Cliente: En esta sección indicaremos a hotfuzz la aplicación cliente con la que conectaremos al servidor FTP que fuzearemos en la sección Program, en este caso será Filezilla, pero puede usarse cualquier cliente FTP.  También se indican los comandos a utilizar.Finalmente la IP y el puerto sobre el que se creará el proxy que usará el cliente para conectarse al servidor. Este punto es muy importante, ya que recordemos que hotfuzz monta un proxy intermedio para utilizar los disectores de Wireshark.  De este modo, las configuraciones quedarían de la siguiente forma:

  • Proxy IP: 127.0.0.1
  • Port: 5150   (El puerto debe ser cualquier puerto que no tengamos utilizándose que esté por encima de los primeros 1024)
  • Program: C:/FileZilla FTP Client/filezilla.exe ftp://Anonymous:@localhost:5150

Debemos fijarnos que en la parte “Program” estamos usando el cliente FTP Filezilla para conectar con el usuario Anonymous a localhost por el puerto 5150. 


     b) Server: En esta sección es donde indicamos la IP, puerto y programa a Fuzear, en este caso le indicamos la IP local por el puerto del  servidor FTP 21 y la ruta al archivo ejecutable del servidor FTP. De este modo, las configuraciones quedarían de la siguiente forma: 
  •  Target IP:  127.0.0.1
  • Port: 21
  • Program: C: /9fceb6fefd0f3ca1a8c36e97b6cc925d-PCMan/PCManFTPD2.exe




Una vez indicados esos parámetros debemos fijarnos en la parte inferior de la aplicación en la que tenemos unas cajas de salida de información de salida del cliente, servidor y del propio Hotfuzz. Podemos ver que tenemos en cada sección una serie de botones para inicios, paradas y limpiado de datos. 


Como vemos en la anterior captura se hace referencia a los “Agent IP” y “Port”. Uno para el cliente y otro para el servidor. Se trata del agente de monitorización que se levanta para pach. Los Agent son procesos especiales de Peach que pueden ser usados de forma local o remota. Estos procesos albergan uno o mas monitores que pueden ser usados para realizar acciones tales como atachear debuguers, ver corrupciones de memoria, etc… Puede decirse que levanta los sistemas necesarios para la detección del crash.

No debemos olvidar que en definitiva estamos usando Peach, por lo que para entender totalmente que está haciendo la aplicación debemos saber como funciona peach, los archivos Pit y demás aspectos. En este enlace está toda la información relativa a Peach 2.3: http://peachfuzzer.com/v2/peach23.html
Veamos ahora la forma de configurar la sección “Recording”. Como vemos en la siguiente captura debemos indicar:


  • Iteration Count: Son el número de pruebas de conexión realizará con el cliente utilizando los parámetros indicados. Estas iteraciones deben ser más altas, en el caso de que podamos esperar diferentes comportamientos del protocolo en sucesivas conexiones.
  • Protocol Port: Indicamos el puerto del protocolo a analizar, en este caso es el 21 al estar analizando un FTP.
  • Protocol Familly: Si es TCP oUDP
  • Restart Client: En el caso de que se requiera que el cliente se cierre y habrá solo en cada petición.
  • Disable Cliente Debugger: En el caso de que no necesitemos analizar posibles crash en el cliente.
  • Proxy Tiemout: El tiempo de timeout establecido para conexiones con el servicio.

En la siguiente captura vemos el proceso de recording en marcha.
 



2.   Pestaña Fuzzing Settings:  En esta sección vemos como aparecen todos los modelos de datos creados a partir de la primera fase. Podremos encontrar todos los métodos que usa el protocolo. Seleccionaremos los campos a fuzear marcándolos como true en la columna “Mutate”.


En nuestro caso Fuzearemos el campo USER. Si recordamos, indicamos al cliente FTP que se conectase utilizando el usuario “Anonymous”, así que es lo que marco es ese campo para que mande los “Chorros” de datos en el nombre del usuario cuando trate de conectarse.

Seguidamente pulsamos sobre el botón “HIDE MUTATOR”  para que se desplieguen las opciones de los Mutators. Como vemos en la siguiente captura, selecciono “String”, ya que es el tipo de datos que quiero enviar en las diferentes mutaciones.









3. Pestaña Fuzzing: En este punto ya solo nos faltaría pulsar sobre el botón “Start All” de la parte inferior para que el proceso de fuzzing se ponga en marcha.



 Cuando la aplicación detecte un crash del servidor que estamos fuzeando, lo indicará en la ventana de datos de log. A continuación puede verse una captura en detalle de la información que ofrece:




Como vemos en la anterior captura, se ha producido un crash en el [39]TestCase, osea en la prueba número 39, y que ha mandado como nombre de usuarios un “Chorro” de AAAAAA…  concretamente 3048 como indica en (length was 3048).  Finalmente te indica que se trata de un crash EXPLOITABLE.   :)
 
 4. Pestaña Dump Viewer:
En esta pestaña se van guardando los datos de los crashes que van apareciendo.
 



Como vemos en la siguiente captura, seleccionando un crash y pulsando sobre el botón “view comunications”, veremos los detalles del crash.


Con esta información, sabemos que existe un buffer overflow en el campo USER, y que podemos desbordar utilizando 3048 caracteres. Ya hacer el exploit no tiene ningún misterio.

En definitiva, podemos concluir que hotfuzz  es una herramienta muy útil, que agiliza la tarea de fuzzing para protocolos conocidos.
 

Saludos!!