
Universal Plug and Fuzz
UFuzz, o Universal Plug and Fuzz, es una herramienta automática de fuzzing UPnP. Enumerará todos los endpoints UPnP en la red, encontrará los servicios disponibles y los someterá a fuzzing. También tiene la capacidad de fuzzear HTTP utilizando registros de proxy de Burp.
Está diseñado para fuzzear sistemas embebidos y, como tal, es de un solo hilo. También tiene un conjunto de payloads muy limitado, ya que el fuzzing de estos sistemas puede ser lento. Ciertos payloads, como la inyección SQL ciega y la inyección de comandos, se basan en retardos para indicar si la inyección fue exitosa, y pueden dar falsos positivos. Otros payloads, como los format strings y los desbordamientos de búfer, están diseñados para usar un monitor personalizado para detectar caídas.
Se incluyen módulos de configuración y módulos de monitor de ejemplo. Los monitores personalizados permiten el uso de la telemetría del sistema objetivo para detectar caídas. Se han proporcionado módulos de ejemplo para la detección de caídas basada en telnet y en consola serie.
Nótese que el código es muy tosco. «Hacky» sería la mejor forma de describirlo. Lamentablemente, este proyecto se escribió rápidamente y realmente nunca se le dio una arquitectura adecuada. Estaré trabajando para resolver esto en los próximos meses.
Por último, parte del código fue tomado de otros proyectos:
El código UPnP está basado en gran medida en el código de miranda de Craig Heffner. Craig ha sido una inspiración para mí y recomiendo encarecidamente que leas su blog /dev/ttys0.
Parte del código de generación de conjuntos de pruebas está basado en el proyecto Metafuzz de Ben Nagy.
El código de parseo de sockets y HTTP está basado en Excon.
UFuzz ha sido probado con Ruby 1.9.3 y Ruby 2.1.1. Puedes instalar todas las gemas necesarias ejecutando bundle install en el directorio de UFuzz.
Ejecuta ufuzz con la opción -h para ver todas las opciones de línea de comandos. Cuando la herramienta se ejecuta, los registros se escriben en el directorio de logs.
Para el fuzzing básico de todos los dispositivos UPnP en la red, solo ejecuta ufuzz --upnp. Probablemente también quieras usar la opción -v 4 para ver los resúmenes de peticiones y respuestas.