La detección: la clave contra las vulnerabilidades

detección de vulnerabilidades con la herramienta fuzzing enmarcada en el proyecto Bieco

 

¿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.

funcionamiento del fuzzing para detección de vulnerabilidades

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. 

fuzzing para la detección de vulnerabilidades

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