
Popularmente se piensa que las pruebas de vulnerabilidades resultan sencillas. Se puede creer que, con algunas pautas y utilizando recursos informáticos, encontrar debilidades del sistema es algo simple. Pero la realidad es que no lo es. Por lo que resulta común, encontrar programas “seguros”, llenos de vulnerabilidades. Haciendo necesarias técnicas de ciberseguridad como el Fuzzing, para hacer frente a estos inconvenientes.
A lo largo de este artículo sabrás los que es el Fuzzing. La forma en la que este se estructura, su clasificación y técnicas. Continúa leyendo y descubre sus utilidades en la seguridad informática.
¿Qué es el fuzzing?
El Fuzzing es un método de ciberseguridad, que se emplea para hallar errores en los sistemas. Se trata de una especie de colapso a los programas, forzando a su desarrollador a corregir sus bugs. Fuzzing es un término que comenzó a utilizarse desde el año 1988, donde Bart Miller presentó la idea de bombardear un programa con datos incorrectos y aleatorios. Para hacer que este no pudiera procesarlas y colapsara, siendo hoy en día una técnica muy eficaz en su objetivo.
El propósito del Fuzzing es causar problemas en la ejecución de un software. Puede tratarse de cualquier flujo de datos no estándar, como bibliotecas dinámicas, ejecutables o controladores. Determinando así, si los puntos débiles de este, significan un riesgo para el sistema.
¿Cómo funciona Fuzzing?
Sabiendo que la herramienta Fuzzing está compuesta por programas automatizados de prueba. Las principales funciones de esta, son:
- Ofrecer un servicio de test automatizado, con tareas unificadas y realización de diversas pruebas.
- Generar casos de pruebas conocido como Fuzzer, que se utiliza para crear casos de test aleatorios.
- Monitorear la normalidad del equipo que se encuentra a prueba, pudiendo encontrar a tiempo cualquier problema en su sistema.
- Creación de un informe de prueba, con posterior seguimiento para hallar datos de contexto del inconveniente. Facilitando de esta forma el análisis y el rastreo posterior.
Beneficios del Fuzzing
Cuando los softwares son evaluados dentro de sus límites, los riesgos de su seguridad pueden mantenerse. Cualquier error provocado por un acceso inesperado, es una brecha que puede ser utilizada en cualquier momento de forma negativa.
Las pruebas de Fuzz son beneficiosas, porque permiten encontrar las vulnerabilidades en los sistemas. Esto es utilizado principalmente por ciberdelincuentes y piratas informáticos. Pero además, es una herramienta aplicada por los desarrolladores de software en sus ciclos de pruebas. Con la finalidad de encontrar las debilidades de sus programas y corregirlos.
Clasificación de fuzzing
El Fuzzing puede ser clasificado desde múltiples enfoques.
- Se puede clasificar como Fuzzing de caja negra, de caja blanca o de caja gris. Dependiendo de la comprensión del software en el que se utiliza.
- También se encuentra el Fuzzing con base en mutaciones y en generaciones. Dependiendo de la clase de generación de información.
- Se clasifica además en Fuzzing con y sin retroalimentación, dependiendo de la misma.
Fuzzing de caja negra, caja blanca o caja gris
El Fuzzing de caja negra no presta atención al programa en su lógica interna. En cambio, brinda información continua de entrada, evaluando los resultados de salida. Este tipo de Fuzzing se halla en un extremo en lo que se refiere al nivel de comprensión del software.
El Fuzzing de caja blanca se encarga de adquirir datos detallados sobre el software. En esta información se puede incluir el código fuente, datos sobre el tiempo de ejecución y especificaciones de diseño. Tal información es utilizada para mejorar la forma en la que la herramienta de Fuzzing procede.
En el medio del Fuzzing de caja negra y de caja blanca, se encuentra el Fuzzing de caja gris. Este busca alcanzar cierta cantidad de datos, sin incluir detalles. Como puede ser la información de cobertura durante la ejecución del test.
Con base en mutación y basando en generación
El Fuzzing se divide en técnicas, las principales utilizadas son las pruebas mutacionales y generativas.
Para los test mutacionates, se generan secuencias con base en datos y plantillas preestablecidas. Es esto lo que se conoce como el corpus de partida del Fuzzer. Los valores de entrada se cambian byte a byte, para comprobar el rendimiento del software. Con esto, el Fuzzer podrá concluir si algunas mutaciones son exitosas, para generar frecuencias más efectivas en el próximo test.
El concepto de esto resulta bastante simple. Sin embargo, teniendo en cuenta que la cantidad de iteraciones pueden alcanzar hasta miles de millones. Las pruebas llegan a durar varios días hasta en las máquinas de mayor capacidad. Los Fuzzer pueden encontrar los errores menos ligeros de los softwares.
Por su parte, la prueba generativa es un método más avanzado. En este, se construyen gramáticas de información de entrada, con base en especificaciones. Estos pueden estar compuestos por archivos con formatos distintos y también por redes en protocolos de intercambio. Los resultados tienen que ajustarse a normas establecidas. Este tipo de test es más complejo de realizar que los mutacionales. Sin embargo, su probabilidad de éxito es mucho mayor.
Con o sin retroalimentación
El feedback o retroalimentación, trata del tiempo de ejecución de los datos. Que puedan servir como guía para generar el caso de prueba del próximo bucle. El Fuzzing sin feedback no consigue ninguna información sobre el trabajo del software.
Técnicas de Fuzzing
Como se ha mencionado anteriormente, el Fuzzing puede llevarse a cabo a través de diversas técnicas. Estas se desenvuelven entre solidez, integridad, precisión, velocidad, escalabilidad y automatización. Dependiendo del desempeño que tenga el Fuzzing, las técnicas se dividen en: generación de muestras, análisis dinámico y análisis estático.
Técnica de generación de muestras
Este tipo de técnica se utiliza para establecer y mutar semillas. También para limitar y crear muestras nuevas. Dichos procesos se llevan a cabo en el generador de casos de prueba.
Técnicas de análisis dinámico
Con respecto al análisis dinámico, esta técnica se ejecuta con la finalidad de encontrar datos dinámicos del software en ejecución. Lo que se busca, es ayudar a que una nueva muestra se genere.
Técnicas de análisis estático
Esta técnica comprende el análisis de flujo de control, como también los cortes de flujo de información. Los dos métodos son usados para ubicar, verificar y dirigir la ejecución de manera eficiente, ante las posibles vulnerabilidades.
El análisis estático por lo general arroja un resultado de falso positivo. Pero puede combinarse con enfoques diferentes para obtener valiosos datos de pre procesamiento.
Quizás te interese:

