¿Son seguros los programas que ejecutamos? ¿Serán seguros los softwares que están en proceso de desarrollo?La única certeza que tenemos es que todos los programas pueden contener debilidades o vulnerabilidades. Estas grietas pueden permitir que una persona con intenciones no deseadas acceda al programa. Así, podría lograr su mal funcionamiento o podría obtener información confidencial, por ejemplo. La detección de vulnerabilidades se presenta en estos momentos como una herramienta clave para evaluar la solución o soluciones más adecuadas y evitar futuras incidencias.
La formulación de un problema es más importante que su solución
Albert Einstein
Muchas de estas vulnerabilidades son fáciles de detectar por el propio desarrollador. Sin embargo, otras son más difíciles de identificar. Por esta razón, es importante utilizar herramientas que den soporte a la detección de vulnerabilidades.
Para poder identificar vulnerabilidades es necesario realizar un análisis del propio sistema desarrollado. En la actualidad, existen varias técnicas útiles en la detección de vulnerabilidades.
Estas técnicas se pueden dividir en dos: aquellas que usan un análisis estático, es decir, que usan técnicas de detección de vulnerabilidades, y las técnicas que usan un análisis dinámico. La diferencia fundamental entre estos tipos de análisis consiste en que el estático se realiza sobre el propio código fuente del programa sin estar en ejecución, mientras, en el dinámico se observa la ejecución del programa, su funcionalidad y las respuestas que proporciona. En este caso, vamos a centrar nuestra atención en este último tipo de técnica de detección, es decir, en el análisis dinámico.
Detección de vulnerabilidades con Fuzzing
La técnica de detección de vulnerabilidades mediante el fuzzing consiste en la realización de múltiples pruebas recurrentes. Para ellas se utilizarán diferentes parámetros aleatorios o inesperados sobre las entradas de un sistema. Con ellos podemos poner en riesgo el correcto funcionamiento del servicio a analizar.
Proceso de Fuzzing
Al realizar estas peticiones, pretendemos obtener respuestas o excepciones que no estén contempladas con lo establecido del propio programa. Una de las ventajas de esta técnica es que se puede aplicar tanto a sistemas software como a sistemas hardware.
La técnica de fuzzing se puede utilizar de dos formas. Una de ellas es de manera ofensiva, en la que una tercera persona pretenda atacar el sistema. La otra forma es en modo defensivo En ella es el propio desarrollador quien utiliza esta técnica para poder solucionar las posibles vulnerabilidades de su programa.
Fuzzing Tool
Gradiant, en participación junto con el proyecto de BIECO, ha desarrollado una herramienta llamada Fuzzing tool. Esta herramienta aplica la técnica de fuzzing para la detección de vulnerabilidades. En este caso, la herramienta se encargará de analizar un servicio web que expone un API REST.
Para el desarrollo de dicha herramienta, se utiliza como parámetro de entrada un archivo de tipo swagger. Este archivo, describe las entradas que permite junto con sus funcionalidades y parámetros. Además, también describe los tipos de respuesta de cada una de las peticiones que se realizan al servicio web. Una vez que la herramienta dispone de dicho archivo, lanza diversas peticiones con diferentes parámetros descritos en el archivo swagger. Estos parámetros son obtenidos de un gran conjunto de datos o librerías. En ellos se incluyen aquellos que pueden poner en peligro la seguridad o el correcto flujo del programa. Las peticiones generadas son combinaciones de dichos parámetros que son enviadas al servicio web. Después de dicho envío,, la herramienta analiza las respuestas obtenidas.
Comprobación exhaustiva
La herramienta de Gradiant comprueba peticiones que no se han contemplado en el archivo swagger inicial y almacena aquellas conflictivas junto con sus respectivos parámetros de entrada. De esta forma, cuando un desarrollador ejecuta esta herramienta sobre su servicio web, puede obtener información sobre casos que no han sido considerados por medio de las respuestas inesperadas. Estas respuestas son las que proporciona la herramienta.
Gracias al uso de técnicas de fuzzing es posible detectar vulnerabilidades y debilidades de un sistema no contempladas en una fase inicial de desarrollo. La herramienta de Fuzzing desarrollada por Gradiant permitirá al programador detectar nuevas fallas. Así, podrá focalizar sus esfuerzos en solucionar las correspondientes vulnerabilidades detectadas. De esta forma evitará que ningún atacante pueda obtener información confidencial o realizar funciones no previstas. Con ello, se obtiene una mejora considerable a la hora de garantizar la seguridad de una organización.
Este trabajo fue apoyado por el proyecto de BIECO (www.bieco.org) el cual recibió financiamiento del programa de investigación e innovación Horizonte 2020 de la Unión Europea bajo el acuerdo de subvención No. 952702