¡No uses solo el código! El artículo de 14 páginas de un investigador chino advierte: el 35,8% de los códigos generados por Copilot tienen vulnerabilidades y C++ se ha convertido en el "área más afectada"

Fuente original: CSDN

Fuente de la imagen: Generada por IA ilimitada

GitHub Copilot es una herramienta de generación automática de código basada en lenguajes modelo grandes. Desde su lanzamiento, ha sido bien recibida por innumerables programadores. ¡Todos dijeron que finalmente tienen un artefacto de código que no requiere trabajo de horas extras!

Según los datos recopilados a medio plazo del "Cuestionario de la encuesta sobre el ecosistema de desarrolladores de IA 2023" lanzado recientemente por CSDN, el 90% de los encuestados han afirmado que han utilizado herramientas de generación de código en diferentes escenarios como producción, pruebas, entretenimiento, etc. ., de los cuales el 35% La gente dice usarlo todos los días.

Sin embargo, cabe señalar que, si bien estas herramientas de codificación mejoran la eficiencia del trabajo, ¿alguna vez has pensado si trae bendición o desastre? ¿El código generado es realmente seguro basándose en que está "listo para usar"?

Recientemente, para estudiar la seguridad del código generado por Copilot, seis investigadores universitarios de la Universidad de Wuhan, la Universidad Normal de China Central, la Universidad Massey en Nueva Zelanda y el Instituto Real de Tecnología de Melbourne realizaron un estudio empírico sobre las vulnerabilidades de seguridad del código generado por Copilot. código en GitHub, y se publicó un artículo académico titulado "Debilidades de seguridad del código generado por Copilot en GitHub", que recientemente reveló la seguridad de futuros artefactos de programación de IA que pueden "completar la codificación con solo mover la boca".

Dirección del papel:

Muestra: 435 segmentos de código en un entorno de producción, que cubren 6 lenguajes de programación convencionales

Durante el experimento, los investigadores seleccionaron 435 fragmentos de código generados por GitHub Copilot de los proyectos públicos de GitHub, que cubren múltiples lenguajes de programación convencionales como Python, Java, Java, C++, Go y C#.

Al mismo tiempo, utiliza CodeQL, una herramienta de análisis estático de código abierto que admite múltiples lenguajes (incluidos Java, Java, C++, C# y Python), para realizar escaneos de seguridad y análisis de fragmentos de código, y utiliza la enumeración de vulnerabilidades comunes ( CWE) para clasificar los agujeros de seguridad del código en el segmento.

Además, a partir del siguiente proceso de investigación, los investigadores plantearon interrogantes que necesitan ser estudiados y verificados desde tres dimensiones.

Pregunta 1: ¿Es seguro el código generado por Copilot en proyectos de GitHub?

Motivo de la pregunta: Copilot puede generar sugerencias de código que contengan vulnerabilidades de seguridad y los desarrolladores pueden aceptar estas sugerencias, lo que podría dejar al programa vulnerable. Las respuestas a la pregunta 1 ayudan a comprender con qué frecuencia los desarrolladores encuentran vulnerabilidades de seguridad cuando utilizan Copilot en producción.

P2: ¿Qué vulnerabilidades de seguridad existen en los fragmentos de código generados por Copilot?

Motivo para plantear esta pregunta: el código generado por Copilot puede contener vulnerabilidades de seguridad y los desarrolladores deben realizar una estricta revisión de seguridad antes de aceptar el código generado por Copilot. Como deja claro la documentación de GitHub Copilot, "los usuarios de Copilot son responsables de garantizar la seguridad y la calidad de su código". Las respuestas a la pregunta RQ2 pueden ayudar a los desarrolladores a comprender mejor las posibles vulnerabilidades de seguridad en el código generado por Copilot para que puedan prevenir y corregir estas vulnerabilidades de manera más efectiva.

Pregunta 3: ¿Cuántas vulnerabilidades de seguridad pertenecen al MITRE CWE Top-25?

Motivo de la pregunta: esta lista contiene las 25 vulnerabilidades de seguridad más peligrosas. Las respuestas a la pregunta RQ3 pueden ayudar a los desarrolladores a comprender si el código generado por Copilot contiene tipos de vulnerabilidades de seguridad ampliamente reconocidos y la capacidad de Copilot para manejar estas vulnerabilidades más comunes.

Paso 1: Identificar el código "real" generado por IA en GitHub

La razón para querer utilizar GitHub como principal fuente de datos para responder preguntas de investigación es que, en opinión de los investigadores, GitHub contiene millones de repositorios de código públicos y tiene acceso a una gran cantidad de recursos de código, lo que le permite cubrir una variedad de lenguajes de programación y proyectos de tipo investigación.

Sin embargo, no es fácil obtener directamente el código generado por Copilot en GitHub, porque incluso con la ayuda de muchas herramientas, es difícil distinguir si el código está escrito por IA o ingenieros humanos.

Ante este dilema, seis investigadores optaron por identificar muchos fragmentos de código buscando en la descripción del repositorio y los comentarios proporcionados en el código, como "por GitHub Copilot", "usar GitHub Copilot" y "con GitHub Copilot". obtuvo los siguientes resultados:

La cantidad de resultados de búsqueda en diferentes idiomas obtenidos de las etiquetas de código:

A continuación, ingrese a la etapa de filtrado. Aquí, los investigadores señalaron en el artículo que siguieron principalmente tres reglas:

  1. Para los resultados de búsqueda bajo la etiqueta Repositorio, los investigadores determinaron qué proyectos fueron generados en su totalidad por Copilot en función de las declaraciones en la descripción del proyecto o los archivos Léame relacionados. Además, conserva archivos de código para los principales lenguajes admitidos por Copilot, como Python, Java, Java, C++, C# y Go.

2 Para los resultados de la búsqueda bajo la etiqueta de código, conserva los comentarios del archivo que muestran el código generado por Copilot.

  1. Los objetos de este estudio son principalmente fragmentos de código utilizados en proyectos reales, por lo que se excluirán los archivos de código utilizados para resolver problemas de algoritmos simples en la plataforma LeetCode.

Después de completar la anotación de los datos piloto, el primer autor del artículo examinó los resultados de búsqueda restantes y obtuvo un total de 465 fragmentos de código. Después de eliminar los resultados duplicados, terminamos con 435 fragmentos de código diferentes. 249 de ellas son de etiquetas de repositorio y 186 son de etiquetas de código, como se detalla a continuación:

Paso 2: Análisis de datos

En el proceso de prueba, para mejorar la cobertura y precisión de los resultados, los investigadores utilizaron dos herramientas de análisis estático para realizar controles de seguridad en cada segmento de código (es decir, CodeQL más herramientas especializadas para lenguajes específicos).

En este estudio, los investigadores utilizaron por primera vez CodeQL para analizar el código en el conjunto de datos. El conjunto de consultas predeterminado en el paquete de consultas estándar CodeQL es codeql-suites/-code-scanning.qls. Cada paquete contiene varios conjuntos de consultas útiles en el directorio codeql-suite.

Al mismo tiempo, utiliza el conjunto de pruebas -security-and-quality.qls para escanear fragmentos de código relacionados con vulnerabilidades de seguridad. Estos conjuntos de pruebas pueden comprobar múltiples propiedades de seguridad, cubriendo muchos CWE. Por ejemplo: el conjunto de pruebas de Python proporciona 168 comprobaciones de seguridad; el conjunto de pruebas de Java proporciona 203 comprobaciones de seguridad; el conjunto de pruebas de C++ proporciona 163 comprobaciones de seguridad.

Además, los investigadores seleccionaron otras herramientas populares de análisis de seguridad estática para cada lenguaje de programación para escanear los archivos. Por ejemplo, Python usa Bandit, Java usa ESLint, C++ usa Cppcheck, Java usa Findbugs, C# usa Roslyn y Go usa Gosec. Si el ID de CWE relacionado con el problema de seguridad no se puede obtener directamente de los resultados del análisis, los investigadores también asignarán manualmente los atributos de seguridad proporcionados por los resultados del análisis al CWE correspondiente.

El 35,8% de los segmentos de código tienen vulnerabilidades de seguridad, el código C++ tiene la mayor cantidad de vulnerabilidades, cubriendo 42 tipos CWE

Tras el análisis, los investigadores llegaron a la conclusión final basándose en las tres preguntas planteadas anteriormente.

Pregunta 1: ¿Es seguro el código generado por Copilot en proyectos de GitHub?

De los 435 fragmentos de código generados por Copilot, el 35,8% contenía vulnerabilidades de seguridad, creando problemas de seguridad independientemente del lenguaje de programación utilizado.

Existe una proporción ligeramente mayor de vulnerabilidades de seguridad en el código Python y Java, que son los lenguajes donde los desarrolladores utilizan Copilot con mayor frecuencia. Entre los 251 fragmentos de código Python recopilados, el 39,4% presenta riesgos de seguridad. De los 79 fragmentos de código Java, el 27,8% presenta riesgos de seguridad. Entre todos los lenguajes de programación, **C++ tiene la mayor proporción de vulnerabilidades de seguridad en segmentos de código, alcanzando el 46,1%. **Go también tiene un índice de riesgo de seguridad relativamente alto del 45,0 %. En comparación, la proporción de archivos con problemas de seguridad en código C# y Java es menor: 25% y 23,2% respectivamente.

P2: ¿Qué vulnerabilidades de seguridad existen en los fragmentos de código generados por Copilot?

Para responder a RQ2, los investigadores procesaron los resultados de los escaneos realizados por RQ1 y eliminaron los problemas de seguridad duplicados detectados en la misma ubicación del segmento de código. En total, se identificaron 600 vulnerabilidades de seguridad en 435 fragmentos de código.

Los tipos de vulnerabilidades de seguridad detectadas fueron diversos y relacionados con 42 CWE diferentes, incluido CWE-78 (inyección de comandos del sistema operativo), CWE-330 (uso de vulnerabilidad de valores aleatorios no seguros) y CWE-703 (comprobación de condiciones anormales o incorrectas). manipulación) ocurre con mayor frecuencia.

Pregunta 3: ¿Cuántas vulnerabilidades de seguridad pertenecen al MITRE CWE Top-25?

De las 42 CWE identificadas, 11 están actualmente reconocidas como las 25 vulnerabilidades principales de CWE de 2022.

Escrito al final

En este sentido, algunos internautas también bromearon diciendo que su capacidad para escribir errores puede ser mayor que la de GitHub Copilot.

Por supuesto, este estudio no pretende persuadir a los desarrolladores de que no utilicen herramientas de codificación asistidas por IA en el trabajo diario, sino mostrar que el uso de Copilot para generar código en el desarrollo real puede mejorar la eficiencia del desarrollo y recordar a todos que realicen sus propias evaluaciones de seguridad. .

Al mismo tiempo, ejecute controles de seguridad adecuados al aceptar las sugerencias de código de Copilot para evitar de manera efectiva algunos riesgos potenciales y reducir pérdidas.

Para obtener más detalles, consulte el documento:

Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
  • Recompensa
  • Comentar
  • Compartir
Comentar
0/400
Sin comentarios
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)