Detección de Vulnerabilidades en Código Basada en Transformadores en Tiempo de Edición: ¿Cero disparos, Pocos disparos o Ajuste Fino?
Transformer-based Vulnerability Detection in Code at EditTime: Zero-shot, Few-shot, or Fine-tuning?
May 23, 2023
Autores: Aaron Chan, Anant Kharkar, Roshanak Zilouchian Moghaddam, Yevhen Mohylevskyy, Alec Helyar, Eslam Kamal, Mohamed Elkamhawy, Neel Sundaresan
cs.AI
Resumen
Las vulnerabilidades de software generan costos significativos para las empresas. A pesar de los extensos esfuerzos en investigación y desarrollo de métodos de detección de vulnerabilidades de software, las vulnerabilidades no detectadas continúan poniendo en riesgo a los propietarios y usuarios de software. Muchos de los métodos actuales de detección de vulnerabilidades requieren que los fragmentos de código puedan compilarse y construirse antes de intentar la detección. Esto, desafortunadamente, introduce una latencia prolongada entre el momento en que se inyecta una vulnerabilidad y el momento en que se elimina, lo que puede aumentar sustancialmente el costo de corregir una vulnerabilidad. Reconocemos que los avances actuales en aprendizaje automático pueden utilizarse para detectar patrones de código vulnerable en fragmentos de código sintácticamente incompletos mientras el desarrollador escribe el código en tiempo de edición (EditTime). En este artículo presentamos un sistema práctico que aprovecha el aprendizaje profundo en un conjunto de datos a gran escala de patrones de código vulnerable para aprender manifestaciones complejas de más de 250 tipos de vulnerabilidades y detectar patrones de código vulnerable en tiempo de edición. Discutimos enfoques de cero disparos (zero-shot), pocos disparos (few-shot) y ajuste fino (fine-tuning) en modelos de lenguaje preentrenados de última generación (Large Language Models, LLMs). Demostramos que, en comparación con los modelos de detección de vulnerabilidades de última generación, nuestro enfoque mejora el estado del arte en un 10%. También evaluamos nuestro enfoque para detectar vulnerabilidades en código generado automáticamente por LLMs de código. La evaluación en un conjunto de pruebas de escenarios de código de alto riesgo muestra una reducción de hasta el 90% en las vulnerabilidades.
English
Software vulnerabilities bear enterprises significant costs. Despite
extensive efforts in research and development of software vulnerability
detection methods, uncaught vulnerabilities continue to put software owners and
users at risk. Many current vulnerability detection methods require that code
snippets can compile and build before attempting detection. This,
unfortunately, introduces a long latency between the time a vulnerability is
injected to the time it is removed, which can substantially increases the cost
of fixing a vulnerability. We recognize that the current advances in machine
learning can be used to detect vulnerable code patterns on syntactically
incomplete code snippets as the developer is writing the code at EditTime. In
this paper we present a practical system that leverages deep learning on a
large-scale data set of vulnerable code patterns to learn complex
manifestations of more than 250 vulnerability types and detect vulnerable code
patterns at EditTime. We discuss zero-shot, few-shot, and fine-tuning
approaches on state of the art pre-trained Large Language Models (LLMs). We
show that in comparison with state of the art vulnerability detection models
our approach improves the state of the art by 10%. We also evaluate our
approach to detect vulnerability in auto-generated code by code LLMs.
Evaluation on a benchmark of high-risk code scenarios shows a reduction of up
to 90% vulnerability reduction.