Crédito:Markus Spiske en Unsplash
Un equipo de investigadores de la empresa de I + D Draper y la Universidad de Boston desarrolló un nuevo sistema de detección de vulnerabilidades a gran escala utilizando algoritmos de aprendizaje automático. lo que podría ayudar a descubrir vulnerabilidades de software de forma más rápida y eficiente.
Los piratas informáticos y los usuarios malintencionados encuentran constantemente nuevas formas de comprometer los sistemas y aplicaciones de TI, normalmente explotando las vulnerabilidades de seguridad del software. Las vulnerabilidades del software son pequeños errores cometidos por los programadores que desarrollaron un sistema que puede propagarse rápidamente, especialmente a través de software de código abierto o mediante la reutilización y adaptación de código.
Todos los años, miles de estas vulnerabilidades se informan públicamente a la base de datos Common Vulnerabilities and Exposures (CVE), mientras que muchos otros son detectados y parcheados internamente por desarrolladores. Si no se abordan adecuadamente, estas vulnerabilidades pueden ser explotadas por atacantes, a menudo con efectos devastadores, como se demuestra en muchos exploits recientes de alto perfil, como el error Heartbleed y el criptoworm ramsomware WannaCry.
Generalmente, las herramientas existentes para analizar programas solo pueden detectar un número limitado de errores potenciales, que se basan en reglas predefinidas. Sin embargo, El uso generalizado de repositorios de código abierto ha abierto nuevas posibilidades para el desarrollo de técnicas que podrían revelar patrones de vulnerabilidad de código.
Los investigadores de Draper y Boston han desarrollado una nueva herramienta de detección de vulnerabilidades que utiliza el aprendizaje automático para la detección automatizada de vulnerabilidades en el código fuente C / C ++. que ya ha mostrado resultados prometedores.
El equipo compiló un gran conjunto de datos con millones de funciones de código abierto y lo etiquetó utilizando tres herramientas de análisis estáticas (antes del tiempo de ejecución), a saber, Clang, Cppcheck y Flawfinder, que están diseñados para identificar posibles exploits. Su conjunto de datos incluía millones de ejemplos a nivel de función de código C y C ++ extraídos de SATEIV Juliet Test Suite, Distribución Debian Linux, y repositorios públicos de Git en GitHub.
"Con estos conjuntos de datos, Desarrollamos una herramienta de detección de vulnerabilidades rápida y escalable basada en el aprendizaje de representación de características profundas que interpreta directamente el código fuente lexed. "escribieron los investigadores en su artículo.
Como los lenguajes de programación son en cierto modo similares a los lenguajes humanos, los investigadores diseñaron una técnica de detección de vulnerabilidades que utiliza procesamiento de lenguaje natural (NLP), una estrategia de inteligencia artificial que permite a las computadoras comprender e interpretar el lenguaje humano.
"Aprovechamos enfoques de extracción de características similares a los que se utilizan para la clasificación de sentimientos de oraciones con redes neuronales convolucionales (CNN) y redes neuronales recurrentes (RNN) para la clasificación de vulnerabilidades de fuente a nivel de función, ", explicaron los investigadores en su artículo.
Combinaron PNL con bosque aleatorio (RM); un poderoso algoritmo que crea un conjunto de árboles de decisión a partir de subconjuntos seleccionados al azar del conjunto de datos de entrenamiento y luego los fusiona, generalmente logrando predicciones más precisas.
Los investigadores probaron su herramienta tanto en paquetes de software reales como en el conjunto de datos de referencia NIST STATE IV.
"Nuestros resultados demuestran que el aprendizaje profundo de la representación de funciones en el código fuente es un enfoque prometedor para la detección automatizada de vulnerabilidades de software, "escribieron". Aplicamos una variedad de técnicas de aprendizaje automático inspiradas en problemas de clasificación en el dominio del lenguaje natural, los perfeccionó para nuestra aplicación, y logró los mejores resultados generales utilizando características aprendidas a través de una red neuronal convolucional y clasificadas con un algoritmo de árbol de conjuntos ".
Hasta aquí, su trabajo se ha centrado en el código C / C ++, pero su método también podría aplicarse a cualquier otro lenguaje de programación. Eligieron específicamente crear un lexer C / C ++ personalizado ya que esto produciría una representación simple y genérica del código fuente de la función, que es ideal para la formación de aprendizaje automático.
© 2018 Tech Xplore