Gradiant forma parte del proyecto BIECO, un proyecto que surge de la necesidad ante el incremento detectado en los ataques de ciberseguridad en los últimos años centrado en la detección e identificación de vulnerabilidades. El impulso del teletrabajo ha proporcionado a los atacantes un gran campo donde poder actuar, ya que este se encuentra, en la mayoría de los casos, insuficientemente protegido. Claros ejemplos de esto, fueron los ataques que afectaron al Servicio Público de Empleo Estatal (SEPE) en 2021, que dejaron su sistema informático paralizado, o el ‘ransomware’ que provocó el bloqueo de los servidores de Media Markt en plena campaña del Black Friday.
Para poder garantizar la seguridad de una organización y por tanto, evitar que un atacante pueda romper su sistema, es imprescindible una correcta evaluación de su seguridad. Es aquí donde la tríada CIA se convierte en una herramienta fundamental. Esto implica que se realice un balance del cumplimiento de las propiedades de confidencialidad, integridad y disponibilidad (en inglés Confidentiality, Integrity y Availability).
El mayor problema al que nos podemos enfrentar a la hora de llevar a cabo dicho balance es la aparición de vulnerabilidades de software. Por este motivo, es importante identificar esas vulnerabilidades en una fase temprana del ciclo de vida del desarrollo del sistema, así como, mejorar las herramientas y procesos de evaluación para poder detectarlas, evaluarlas y mitigarlas. Gradiant, que participa en el proyecto BIECO, está desarrollando diferentes herramientas que permitan dicha evaluación en un futuro. En este artículo, explicamos algunas de las técnicas más utilizadas para el desarrollo de herramientas de detección de vulnerabilidades mediante análisis estáticos del código.
Técnicas de detección de vulnerabilidades
Por norma general, las vulnerabilidades no son percibidas por los desarrolladores durante el funcionamiento normal del sistema. Esto conduce a buscar métodos que ayuden en dicha operación. Éstas técnicas pueden clasificarse en tres grandes grupos: técnicas de detección de anomalías, técnicas de reconocimiento de patrones vulnerables de código y Modelos de Predicción de Vulnerabilidades (VPM por sus siglas en inglés).
Técnicas basadas en la detección de anomalías
Las técnicas basadas en la detección de anomalías buscan eventos considerados inusuales, es decir aquellos que difieren de la mayoría de los datos. Estas técnicas se centran en un análisis sintáctico y semántico del código fuente para extraer características o reglas. De esta forma, se obtiene el modelo del comportamiento normal del sistema. La mayoría de los estudios revisados utilizan técnicas de minería de datos, reglas de asociación o incluso información de anteriores versiones del código para generar dichas reglas. A pesar de ser útil a la hora de detectar anomalías, este tipo de técnicas pueden dar falsos positivos. Esto ocurre porque no tienen en cuenta aquellos comportamientos poco usuales o el uso de APIs inapropiadas. Así mismo, no ofrecen el tipo de vulnerabilidad detectada, lo que hace que se obtenga una visión más general en términos de detección de vulnerabilidades.
Técnicas de reconocimiento de patrones de código vulnerable
Las técnicas de reconocimiento de patrones de código vulnerable usan técnicas de Machine Learning (ML) para identificar, de forma automática, patrones de código extrayendo diferentes características de este. Al igual que con las técnicas de detección de anomalías, se realiza un análisis sintáctico y semántico del código. La diferencia está en que definir modelos y patrones de segmentos de código vulnerables. La gran mayoría de las técnicas analizadas, proponen la creación de una representación del código en forma de grafos, es decir, cambian los datos a forma de vector, o embedding, el cual alimentará a los algoritmos de ML seleccionados. Esta técnica ofrece mejores resultados que las anteriores y facilitar una localización aproximada de la vulnerabilidad detectada. Sin embargo, los estudios revisados siguen sin ofrecer el tipo de vulnerabilidad.
Modelos de predicción de vulnerabilidades
Por último, tenemos los modelos de predicción de vulnerabilidades. Este tipo de modelos se basan en el uso de algoritmos de ML junto con diferentes métricas de software. Algunas de las técnicas utilizadas en dichos modelos son el análisis de dependencias, métricas de código o minería de textos. Los VPM determinan por medio de diferentes métricas qué componentes son más proclives a contener una vulnerabilidad y hacen posible su localización dentro del sistema. Al igual que las anteriores técnicas, estos modelos no ofrecen una localización concreta ni el tipo de vulnerabilidad detectada. Sin embargo, pueden ser de gran utilidad a la hora de acotar posibles zonas conflictivas para un posterior análisis más detallado.
Una técnica de detección de vulnerabilidades para cada objetivo
Como hemos visto, existen tres grandes grupos de técnicas a utilizar a la hora de crear herramientas de detección de vulnerabilidades. La elección de una u otra dependerá del objetivo a conseguir. La detección de anomalías o técnicas de VPM son adecuadas para detectar bloques de código fuente que son propensos a ser vulnerables.. Las técnicas de detección de anomalías también se pueden usar para encontrar errores y posibles API defectuosas. Mientras, las técnicas basadas en el reconocimiento de patrones de códigos vulnerables son las más prometedoras para la detección de vulnerabilidades de forma más detallada. Existe una cuarta línea de investigación muy interesante. Esta consiste en la posibilidad de combinar técnicas de detección de vulnerabilidades. Un ejemplo, es el trabajo conjunto con métodos de reconocimiento de patrones y VPM, con el fin de acotar partes del código bajo análisis y mejorar la precisión de los resultados.
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
Autora: Eva Sotos Martínez, Ingenier-Investigadora del Área de Seguridad y Privacidad de Gradiant