Fuzzing: Encontrando los errores de aplicación más extraños

Las 9 herramientas principales

0
8

No deje que el nombre caprichoso le engañe. El fuzzing es un proceso serio que puede ayudar a descubrir problemas críticos, desconocidos, y a veces extraños, que afectan a las aplicaciones modernas y complejas de la actualidad. Las buenas herramientas de fuzzing a menudo pueden encontrar formas ocultas de explotar los programas mucho antes de que se implementen para el público.

Cómo funcionan las pruebas fuzz
La prueba fuzz es un proceso automatizado que casi siempre se emplea contra el código completado. Esto lo hace similar a las herramientas de pruebas de seguridad de las aplicaciones dinámicas (DAST, por sus siglas en inglés), que también requieren que los programas estén completamente compilados. Sin embargo, las herramientas DAST y las herramientas de fuzzing buscan cosas completamente diferentes. Una herramienta DAST buscará vulnerabilidades, como la capacidad de los hackers para usar una aplicación con el fin de realizar llamadas de procedimiento remoto o de protecciones débiles que rodean las interfaces HTTP y HTML expuestas. Las herramientas de fuzzing, por el contrario, le proporcionan una entrada inesperada a una aplicación para descubrir si hacerlo generará resultados extraños o no deseados.

Una de las formas más fáciles de imaginar el tipo de problemas que descubre el fuzzing es pensar en programas como las aplicaciones bancarias, o de comercio electrónico, que están diseñadas para funcionar con inputs conocidos como los números enteros. Por ejemplo, en la banca, digamos que un programa está diseñado para permitir a los usuarios transferir dinero de una cuenta a otra. En lugar de ingresar un valor positivo en el campo de cantidad a transferir, un usuario ingresa inesperadamente un número negativo. ¿Cómo maneja esto el programa? Podría poner dinero en la cuenta en lugar de enviarlo. O podría generar dinero que no existe. En el caso de un programa de comercio electrónico, ¿qué sucede cuando alguien intenta poner millones o incluso mil de millones de artículos en su carrito? ¿Eso colapsará todo el sitio web o proporcionará miles de millones de artículos gratis?

Si un programador ha sido cuidadoso y ha escrito un código estricto, la mayoría de esos defectos de lógica de negocios ya se habrán anticipado. Pero nadie puede pensar en cada situación. Los comportamientos inesperados no ocurren solo cuando los usuarios juegan con números en los campos de entrada. ¿Qué sucede si un atacante envía funciones de línea de comandos a una aplicación, contenido cifrado, comandos del sistema operativo, o código sin procesar, en el mismo idioma en que está escrita la aplicación?

Las herramientas de fuzzing pueden descubrir e informar sobre esas situaciones hipotéticas. Algunas herramientas de fuzzing utilizan caracteres aleatorios y cadenas de inputs, mientras que otras apuntan a las áreas problemáticas más probables. Por ejemplo, con campos de enteros, los culpables más probables para desencadenar comportamientos inesperados del programa son ceros, números muy grandes y valores negativos. Aun así, otras herramientas de fuzzing examinan el programa con el que están trabajando e intentan proporcionar entradas contextuales pero inesperadas.

En todos los casos, las mejores herramientas de fuzzing generan datos que no están tan lejos del input esperado que el analizador del software rechazará inmediatamente como inválido. En cambio, proporcionarán datos que tienen una buena posibilidad de ser aceptados por el programa, pero que el programador no esperaba. Luego informarán qué comportamiento desencadena ese input inesperado en la aplicación probada.

Los desarrolladores utilizan bastantes herramientas de fuzzing de código abierto, algunas aplicaciones comerciales e incluso marcos de trabajo completos dedicados al fuzzing. Las siguientes son las principales herramientas que los desarrolladores están utilizando hoy para probar el fuzzing en sus aplicaciones.

American Fuzzy LOP
El programa de American Fuzzy LOP está diseñado para implementarse con poco esfuerzo o configuración. Fue construido en base a una gran cantidad de investigaciones sobre cómo funcionan los mejores fuzzers y qué resultados son más útiles para los evaluadores. También está diseñado para minimizar el tiempo que lleva compilar una consulta y obtener resultados mientras genera el menor impacto en el sistema donde sea instalado.

De hecho, el desarrollador de American Fuzzy LOP confía tanto en la capacidad del fuzzer para trabajar sin la intervención del usuario, que casi no existen controles. Los usuarios obtienen una interfaz agradable y de estilo retro, que muestra qué está haciendo el fuzzer y qué resultados está encontrando.

A pesar de que el desarrollador confía en la capacidad de American Fuzzy LOP para encontrar errores útiles en los programas probados, la herramienta también se hizo compatible con otros fuzzers. Puede generar datos de prueba, que se pueden cargar en otras herramientas de fuzz más especializadas y laboriosas si es necesario. Hacerlo puede aumentar potencialmente la eficiencia de esas herramientas, así como reducir su tiempo de ejecución.

Radamsa
Radamsa es una herramienta fuzz de primera línea, diseñada para enviar consultas de muestra a programas que generan resultados inesperados. Alcanza un alto grado de precisión, porque primero ingesta archivos de muestra de datos válidos. Luego, analiza esos datos para obtener un plan difuso lleno de información que es casi -pero no del todo- lo que espera la aplicación probada.

La mayor ventaja competitiva de Radamsa es su precisión. La página del desarrollador en GitLab tiene muchos ejemplos de errores del mundo real que esta herramienta fuzzer ha encontrado en el software popular. Puede llevar un poco más de esfuerzo por parte de un usuario generar un input válido para alimentar a Radamsa, pero si ese proceso resulta en una mayor cantidad de errores realistas y reparables, entonces es tiempo bien invertido.

Honggfuzz
La herramienta fuzzerHonggfuzz, orientada a la seguridad está optimizada y esquipada con procesamiento múltiple para aprovechar todos los recursos del sistema. Muchas herramientas de fuzz deben ejecutar múltiples instancias para lograr esto, pero Honggfuzz usa automáticamente todos los núcleos de CPU disponibles para acelerar rápidamente el proceso de fuzzing.

Honggfuzz no solo funciona con Windows. Puede probar aplicaciones que se ejecutan en ambientes Linux, Mac e incluso Android. Debido a su capacidad para trabajar en múltiples plataformas, Honggfuzz viene con un directorio completo de ejemplos, y casos de prueba, que los desarrolladores pueden usar textualmente, modificar para sus propias necesidades o simplemente aprender de ellos para que puedan configurar su propio régimen de prueba de fuzz.

Probablemente, debido a su capacidad de fuzz en múltiples plataformas, la página de trofeos para Honggfuzz, donde los desarrolladores de fuzz muestran los errores que sus herramientas han detectado, es bastante grande. Según el desarrollador, fue la única herramienta fuzz para encontrar una vulnerabilidad crítica en OpenSSL que resultó en la emisión de una actualización de seguridad mundial.

Libfuzzer
La herramienta Libfuzzer está en desarrollo, y cada cierto tiempo se lanzan nuevas versiones. Como tal, aquellos que usan la herramienta deben verificar para asegurarse de tener la última versión antes de comenzar su sesión de fuzzing.

Libfuzzer está diseñada para ser denominada una herramienta de fuzzing evolutivo. Lo que esta herramienta hace es alimentar inputs difusos a un punto de input específico, o campo de input, en el programa de destino. Luego, rastrea qué otras partes del código se alcanzan en función de la reacción de la aplicación probada a las consultas. Armada con esa nueva información, Libfuzzer modifica sus consultas para ver si puede penetrar aún más.

El objetivo de Libfuzzer es generar resultados más relevantes, en comparación con lo que podría revelar una herramienta de fuzzing tradicional. Según los desarrolladores, la herramienta ya ha tenido mucho éxito y continúa siendo refinada para una mayor precisión.

OSS-Fuzz
La herramienta OSS-Fuzz fue diseñada para funcionar con software de código abierto. Los desarrolladores querían brindar soporte a la comunidad de código abierto, por lo que OSS-Fuzz fue optimizada para trabajar con aplicaciones y programas implementados de esa manera.

OSS-Fuzz soporta programas de código abierto escritos en C, C++, Rust y Go, aunque los desarrolladores afirman que también puede funcionar con otros lenguajes -solo que actualmente no tienen soporte.

Aparentemente, el objetivo de ayudar a la comunidad de código abierto a crear aplicaciones más seguras, utilizando OSS-Fuzz, ya ha tenido bastante éxito. OSS-Fuzz ha encontrado más de 14 mil errores en 200 programas de código abierto.

Sulley Fuzzing Framework
Nombrada en base a la criatura azul de la película Monsters Inc., Sulley Fuzzing Framework es un motor de fuzzing y un marco de prueba simultáneamente. A diferencia de la mayoría de los motores de fuzzing, Sulley está diseñada para funcionar sin problemas durante días, comprobar constantemente las aplicaciones en busca de respuestas extrañas a los inputs difusos, y luego registrar esos resultados. Fue diseñada para usuarios que desean activar un motor difuso y luego trabajar en otra cosa. Cuando regresen horas o días después, Sulley tendrá informes completos sobre todo lo que encontró.

Sulley tiene varias funciones avanzadas, como la capacidad de ejecutarse en paralelo, dependiendo de la plataforma de hardware que la aloja. También puede determinar automáticamente, sin programación del usuario, qué secuencia única de casos de prueba provocará fallas.

El Marco de Trabajo Sulley es bien conocido en las comunidades de fuzzing de código abierto, pero no se ha actualizado activamente en mucho tiempo. Aun así, la última versión, que está disponible de forma gratuita en GitHub, todavía se encuentra en uso activo y funciona bien.

boofuzz
La herramienta boofuzz se basa en el Marco de Trabajo Sulley Fuzzing. Fue nombrada en base a Boo, la niña en la película Monsters Inc. El proyecto boofuzz comenzó cuando quedó claro que Sulley ya no se estaba actualizando activamente. Utiliza el código central de Sulley, pero también tiene como objetivo mejorarlo. Se instala como una biblioteca de Python.

Desde que comenzó el proyecto boofuzz, los desarrolladores han agregado documentación en línea, soporte para más medios, detecciónextensible de fallas y una interfaz más fácil de usar. El soporte para difusiones en serie, Ethernet y difusión UDP, también se agregó como funciones predeterminadas. Los usuarios de boofuzz también pueden exportar sus resultados a un archivo CSV, por lo que las hojas de cálculo completas de todas las fallas activadas se pueden estudiar como el primer paso para corregir las fallas detectadas.

Muchos de los errores conocidos dentro de Sulley se han eliminado en boofuzz. Esta herramienta se actualiza activamente y está disponible en GitHub.

BFuzz
En la actualidad, BFuzz es una de las herramientas de fuzzing más recientes en uso activo. Está disponible de forma gratuita, y se pide a los usuarios que informen sobre cualquier problema que encuentren al usar la herramienta, para que los desarrolladores puedan solucionarlo. Dicho esto, BFuzz ya tiene un pequeño trofeo en la detección de errores, al encontrar una vulnerabilidad que resultó en una actualización para Epiphany Web y otra que involucró a Mozilla Firefox y provocó un desbordamiento de buffer.

BFuzz está diseñada para ser una herramienta fuzzer basada en inputs, que utiliza .html y navegadores como su vector de input. En ese sentido, se asemeja a una herramienta DAST y podría ser una buena opción para las organizaciones que dependen en gran medida de ellas, ya que BFuzz utiliza métodos de prueba similares, pero busca diferentes tipos de errores.

Está claro que el desarrollador realmente está poniendo mucho esfuerzo en BFuzz, y es posible que haya grandes cosas para esta herramienta fuzzer. Incluso hay un pequeño video de YouTube que muestra la herramienta fuzz en acción.

PeachTech Peach Fuzzer
La PeachTech Peach Fuzzer es una herramienta de fuzzing comercial donde la compañía PeachTech ya ha realizado gran parte del trabajo preliminar para los probadores. El funcionamiento del Peach Fuzzer es que usted carga y configura el motor de fuzzing con lo que la compañía llama Peach Pits.

Los Peach Pits son definiciones de prueba prescritas que cubren una variedad de plataformas diferentes. PeachTech afirma que cada pozo contiene especificaciones que se ajustan a objetivos específicos, como la estructura de los datos que consume el objetivo y cómo fluyen los datos hacia y desde el dispositivo o aplicación probados. Esto permite a los evaluadores enfocar sus pruebas de fuzz con muy poca configuración. PeachTech también facilita a los usuarios la creación de sus propios pozos, de modo que la herramienta Peach Fuzzer pueda funcionar con sistemas propietarios.

Debido a las formas únicas en que el motor Peach Fuzzer se puede programar con Peach Pits, casi no existe sistema donde la herramienta no pueda implementarse. Funciona con Mac, Windows y Linux, por supuesto. También se puede usar para aplicar el fuzz a los protocolos de red, sistemas integrados, controladores, dispositivos de Internet de las cosas y casi cualquier otro elemento que acepte comandos y, por lo tanto, sea susceptible a inputs difusos.

John Breeden II, CSOonline.com