Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Criptografía y seguridad# Inteligencia artificial

Evaluando el papel de ChatGPT en la revisión de código de seguridad de Python

Explorando la efectividad de ChatGPT para identificar vulnerabilidades en código Python.

― 9 minilectura


Verificaciones deVerificaciones deseguridad en ChatGPT enPythoncódigo.para encontrar vulnerabilidades en elEvaluando la efectividad de ChatGPT
Tabla de contenidos

En tiempos recientes, la inteligencia artificial (IA) se ha vuelto más importante en muchas áreas de la vida. Una de las áreas donde la IA puede ayudar es en revisar el código para problemas de seguridad. Esto se conoce como revisión de código de seguridad. La gente ahora está buscando herramientas de IA para encontrar problemas en el código, y una herramienta que ha ganado mucha atención es ChatGPT. ChatGPT es conocido por su capacidad para seguir instrucciones y dar respuestas detalladas. Este documento examina si se puede usar ChatGPT para encontrar problemas de seguridad en código Python.

Con el auge de la tecnología, también ha aumentado la cantidad de código que se está escribiendo. Por ejemplo, el número de proyectos en GitHub se ha duplicado en solo unos años, pasando de 100 millones en 2018 a 200 millones en 2022. Este aumento en el código significa que hay más posibilidades de que surjan problemas de seguridad. La investigación muestra que el número de Vulnerabilidades en software también ha ido en aumento, lo que resalta la importancia de encontrar y arreglar estos problemas. Las vulnerabilidades son debilidades que pueden ser explotadas, llevando a filtraciones de datos o incluso interrupciones de servicio.

Para encontrar vulnerabilidades en el código, muchas herramientas utilizan un método llamado análisis estático de código fuente. Este método examina el código sin ejecutarlo realmente, permitiendo a los evaluadores encontrar problemas de seguridad de manera eficiente. Herramientas comunes para este propósito incluyen Bandit, Semgrep y SonarQube. Aunque estas herramientas son útiles, tienen algunas limitaciones, como generar muchos falsos positivos (alertas incorrectas) y falsos negativos (no detectar problemas reales). Cuando las herramientas generan demasiadas falsas alarmas, puede requerir mucho tiempo y esfuerzo revisar todo. Por otro lado, no detectar problemas reales puede tener consecuencias graves.

En los últimos años, el Aprendizaje automático y el aprendizaje profundo han hecho grandes avances en muchos campos, incluyendo la comprensión del lenguaje humano. Dado que el código es similar al lenguaje natural, los investigadores están interesados en usar métodos de aprendizaje profundo para tareas relacionadas con la búsqueda de vulnerabilidades en el código. Los modelos de aprendizaje automático pueden aprender de los datos e identificar patrones que pueden indicar problemas de seguridad. Estudios han sugerido que estos modelos pueden producir menos falsos positivos en comparación con herramientas tradicionales. Algunas investigaciones incluso han mostrado que los modelos de aprendizaje profundo superan a varias herramientas de código abierto existentes en la detección de problemas en código C/C++.

Ahora, ChatGPT, que se basa en IA y utiliza procesamiento de lenguaje natural, ha atraído la atención por su potencial en el ámbito empresarial y en otras áreas. Puede automatizar tareas que normalmente requieren esfuerzo humano, ahorrando tiempo y recursos. El modelo ha sido entrenado en un gran conjunto de datos hasta 2021, lo que le da conocimiento sobre varios patrones, incluyendo los que se encuentran en el código. Este documento evalúa cuán bien ChatGPT puede identificar vulnerabilidades de seguridad en código Python en comparación con herramientas de seguridad populares como Bandit, Semgrep y SonarQube.

Python se ha convertido en uno de los lenguajes de programación más populares, a menudo ocupando uno de los tres primeros lugares según diferentes encuestas. Se usa ampliamente en muchas áreas, no solo en aprendizaje automático y ciencia de datos, sino también en desarrollo web con frameworks como Django y Flask. Debido a su popularidad, asegurar la seguridad de las aplicaciones en Python es fundamental.

Este documento está organizado en varias secciones. La primera sección proporciona una breve revisión de investigaciones anteriores en este campo. La sección siguiente discute los conjuntos de datos utilizados para las pruebas. Después, explicamos los detalles de los experimentos realizados con ChatGPT. A continuación, presentamos la evaluación de los resultados obtenidos. Finalmente, hay una discusión sobre los factores que podrían impactar la validez de los resultados, seguida de una conclusión.

Investigación Anterior

En el pasado, muchos estudios se han centrado en encontrar vulnerabilidades usando diferentes modelos de IA. La mayoría de estos estudios han seguido un método llamado aprendizaje supervisado. En este método, varios modelos de aprendizaje automático utilizan características como el número de líneas en un código o la complejidad de ese código. La investigación ha demostrado que los modelos basados en texto suelen rendir mejor que aquellos que dependen principalmente de características del código.

Más recientemente, el foco se ha desplazado hacia el aprendizaje profundo. Los investigadores han explorado diferentes modelos de aprendizaje profundo, como redes neuronales convolucionales (CNN) y redes de memoria a corto y largo plazo (LSTM). Algunos investigadores incluso han experimentado con diferentes tipos de grafos de propiedades del código. Algunos estudios se han centrado específicamente en cómo los modelos de aprendizaje profundo trabajan en la detección de vulnerabilidades, mostrando que un ajuste fino de los modelos puede llevar a un mejor rendimiento.

Un estudio sugirió que los modelos basados en transformadores rinden mejor que los modelos basados en grafos. Por ejemplo, se desarrolló un modelo llamado VulBERTa usando el modelo RoBERTa para identificar vulnerabilidades en código C/C++. Otros estudios han explorado el uso de la arquitectura BERT para detectar vulnerabilidades en el código, encontrando que los modelos de transformadores pueden ser más efectivos que los modelos tradicionales de aprendizaje profundo.

Recientemente, ha habido investigaciones evaluando ChatGPT para encontrar vulnerabilidades en código Java. Sin embargo, existe una falta de estudios que comparen ChatGPT con herramientas de seguridad existentes específicamente para Python, que es lo que este documento busca cubrir.

Conjunto de Datos Utilizado para Pruebas

Nuestro conjunto de datos de prueba consta de 156 archivos de código Python. De estos, 130 archivos provienen de un conjunto de datos de evaluación de seguridad que representa 75 tipos diferentes de vulnerabilidades. Los 26 archivos restantes son de un proyecto que se centró en detectar vulnerabilidades en Python. Un experto en seguridad tuvo que revisar los archivos para marcar las líneas específicas de código que contenían vulnerabilidades.

Uso de la API de ChatGPT para Detección

Para nuestros experimentos, utilizamos el modelo ChatGPT GPT-3.5-turbo, que permite una interacción más avanzada en comparación con versiones anteriores. Este modelo puede procesar una serie de mensajes y retener contexto, lo que facilita hacerle preguntas relacionadas con archivos de código específicos. Realizamos cuatro tipos de experimentos usando este modelo.

  1. En el primer experimento, proporcionamos al modelo archivos vulnerables y preguntamos si contenían problemas de seguridad sin especificar ningún tipo de vulnerabilidad conocido. El objetivo era determinar si el modelo podía identificar vulnerabilidades simplemente indicando los números de línea del código.

  2. En el segundo experimento, proporcionamos una lista de tipos de vulnerabilidades conocidas y le pedimos al modelo que identificara qué tipos estaban presentes en los archivos de código vulnerables. Las respuestas se formatearon en JSON para facilitar la comparación con los resultados de otras herramientas.

  3. El tercer experimento consistió en darle al modelo etiquetas de herramientas de seguridad existentes y pedirle que confirmara si había vulnerabilidades específicas en cada archivo. Aquí, también tuvimos la opción de incluir vulnerabilidades adicionales que el modelo pudiera identificar.

  4. En el experimento final, no proporcionamos al modelo ninguna etiqueta y le pedimos que identificara vulnerabilidades según su conocimiento. Las respuestas siguieron el mismo formato JSON.

La elección de los prompts utilizados para interactuar con el modelo fue crítica, ya que podría afectar significativamente los resultados. Ajustamos la manera en que presentamos los prompts para optimizar el rendimiento del modelo.

Evaluando Resultados

Para evaluar la efectividad de ChatGPT en comparación con las herramientas establecidas, calculamos varias métricas basadas en la precisión en la identificación de vulnerabilidades. Estas métricas incluyeron cuántos verdaderos positivos, verdaderos negativos, falsos positivos y falsos negativos produjo el modelo. Luego comparamos los resultados de ChatGPT con los de Bandit, Semgrep y SonarQube.

En el primer experimento, ChatGPT no tuvo un mejor desempeño que las otras herramientas en términos de precisión o recuperación. En el segundo experimento, a pesar de usar las etiquetas de vulnerabilidad proporcionadas, los resultados del modelo fueron comparables a los de las herramientas SAST.

En el tercer experimento, donde actuamos como un asistente para las herramientas SAST, los resultados mostraron una mejora notable. Notablemente, cuando ignoramos las nuevas etiquetas identificadas por el modelo, los resultados de ChatGPT fueron significativamente mejores que los de las herramientas existentes.

Cuando permitimos que el modelo se basara en su conocimiento sin ninguna etiqueta de entrada, su rendimiento se mantuvo similar al de las herramientas SAST.

Desafíos y Limitaciones

Varios factores podrían influir en los resultados de nuestro estudio. El principal desafío fue seleccionar los prompts apropiados para ChatGPT, lo que podría afectar mucho su rendimiento. El tamaño y la diversidad del conjunto de datos también juegan un papel, así como la cobertura de diferentes vulnerabilidades. Solo comparamos ChatGPT con tres herramientas de seguridad para Python, y herramientas adicionales podrían ofrecer diferentes perspectivas.

Finalmente, nos centramos en la versión GPT-3.5 de ChatGPT, y es posible que las versiones más nuevas puedan ofrecer resultados aún mejores en futuros estudios.

Conclusión

En resumen, realizamos varios experimentos para probar la capacidad de ChatGPT para identificar vulnerabilidades de seguridad en código Python. Aunque los resultados mostraron que ChatGPT puede aportar información valiosa, especialmente cuando se usa como asistente de herramientas de seguridad existentes, aún no es un reemplazo para los métodos tradicionales. Los hallazgos de nuestro estudio, aunque limitados, indican un potencial para trabajos futuros en el uso de modelos de IA avanzados para mejorar la seguridad del código. A medida que se lancen modelos más nuevos, futuras investigaciones podrían ayudar a lograr mejores resultados en la identificación de vulnerabilidades en diferentes lenguajes de programación.

Fuente original

Título: Using ChatGPT as a Static Application Security Testing Tool

Resumen: In recent years, artificial intelligence has had a conspicuous growth in almost every aspect of life. One of the most applicable areas is security code review, in which a lot of AI-based tools and approaches have been proposed. Recently, ChatGPT has caught a huge amount of attention with its remarkable performance in following instructions and providing a detailed response. Regarding the similarities between natural language and code, in this paper, we study the feasibility of using ChatGPT for vulnerability detection in Python source code. Toward this goal, we feed an appropriate prompt along with vulnerable data to ChatGPT and compare its results on two datasets with the results of three widely used Static Application Security Testing tools (Bandit, Semgrep and SonarQube). We implement different kinds of experiments with ChatGPT and the results indicate that ChatGPT reduces the false positive and false negative rates and has the potential to be used for Python source code vulnerability detection.

Autores: Atieh Bakhshandeh, Abdalsamad Keramatfar, Amir Norouzi, Mohammad Mahdi Chekidehkhoun

Última actualización: 2023-08-28 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2308.14434

Fuente PDF: https://arxiv.org/pdf/2308.14434

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Artículos similares