Não use apenas o código! O artigo de 14 páginas do pesquisador chinês alerta: 35,8% dos códigos gerados pelo Copilot têm vulnerabilidades e C++ se tornou uma “área mais atingida”

Fonte original: CSDN

Fonte da imagem: gerada por Unbounded AI

GitHub Copilot é uma ferramenta de geração automática de código baseada em grandes linguagens de modelo. Desde o seu lançamento, foi bem recebida por inúmeros programadores. Todos disseram que finalmente possuem um artefato de código que não requer horas extras de trabalho!

De acordo com dados coletados no meio do "2023 AI Developer Ecosystem Survey Questionnaire" lançado recentemente pela CSDN, 90% dos entrevistados afirmaram ter usado ferramentas de geração de código em diferentes cenários, como produção, teste, entretenimento, etc. ., dos quais 35% das pessoas dizem que usam todos os dias.

No entanto, deve-se notar que, embora essas ferramentas de codificação melhorem a eficiência do trabalho, você já pensou se isso traz bênção ou desastre? O código gerado é realmente seguro na base de "pronto para uso"?

Recentemente, para estudar a segurança do código gerado pelo Copilot, seis pesquisadores universitários da Universidade de Wuhan, da Central China Normal University, da Massey University na Nova Zelândia e do Royal Melbourne Institute of Technology conduziram um estudo empírico sobre as vulnerabilidades de segurança do código gerado pelo Copilot. código no GitHub, e um artigo acadêmico intitulado "Fraquezas de segurança do código gerado pelo copiloto no GitHub" foi publicado, que revelou recentemente a segurança de futuros artefatos de programação de IA que podem "completar a codificação apenas movendo sua boca".

Endereço do papel:

Amostra: 435 segmentos de código em ambiente de produção, abrangendo 6 linguagens de programação convencionais

Durante o experimento, os pesquisadores selecionaram 435 trechos de código gerados pelo GitHub Copilot a partir de projetos públicos do GitHub, cobrindo várias linguagens de programação convencionais, como Python, Java, Java, C++, Go e C#.

Ao mesmo tempo, ele usa CodeQL, uma ferramenta de análise estática de código aberto que suporta múltiplas linguagens (incluindo Java, Java, C++, C# e Python), para realizar varredura de segurança e análise de fragmentos de código, e usa Enumeração de Vulnerabilidade Comum ( CWE) para classificar as falhas de segurança do código no segmento.

Além disso, com base no processo de pesquisa a seguir, os pesquisadores levantaram questões que precisam ser estudadas e verificadas a partir de três dimensões.

RQ1: O código gerado pelo Copilot em projetos GitHub é seguro?

Motivo da pergunta: o Copilot pode gerar sugestões de código que contenham vulnerabilidades de segurança, e os desenvolvedores podem aceitar essas sugestões, deixando o programa potencialmente vulnerável. As respostas ao RQ1 ajudam a entender com que frequência os desenvolvedores encontram vulnerabilidades de segurança ao usar o Copilot na produção.

RQ2: Quais vulnerabilidades de segurança existem nos trechos de código gerados pelo Copilot?

Motivo para levantar esta questão: O código gerado pelo Copilot pode conter vulnerabilidades de segurança e os desenvolvedores devem realizar uma revisão de segurança rigorosa antes de aceitar o código gerado pelo Copilot. Como deixa claro a documentação do GitHub Copilot, “os usuários do Copilot são responsáveis por garantir a segurança e a qualidade de seu código”. As respostas ao RQ2 podem ajudar os desenvolvedores a entender melhor as possíveis vulnerabilidades de segurança no código gerado pelo Copilot para que possam prevenir e corrigir essas vulnerabilidades de forma mais eficaz.

RQ3: Quantas vulnerabilidades de segurança pertencem ao MITRE CWE Top-25?

Motivo da pergunta: esta lista contém as 25 vulnerabilidades de segurança mais perigosas. As respostas ao RQ3 podem ajudar os desenvolvedores a entender se o código gerado pelo Copilot contém tipos amplamente reconhecidos de vulnerabilidades de segurança e a capacidade do Copilot de lidar com essas vulnerabilidades mais comuns.

Etapa 1: Identifique o código “real” gerado por IA no GitHub

A razão para querer usar o GitHub como principal fonte de dados para responder questões de pesquisa é que, na opinião dos pesquisadores, o GitHub contém milhões de repositórios de código público e tem acesso a um grande número de recursos de código, permitindo-lhe cobrir uma variedade de linguagens de programação e projetos do tipo pesquisa.

Porém, não é fácil obter diretamente o código gerado pelo Copilot no GitHub, pois mesmo com o auxílio de muitas ferramentas, é difícil distinguir se o código foi escrito por IA ou por engenheiros humanos.

Diante desse dilema, seis pesquisadores optaram por identificar muitos trechos de código pesquisando a descrição do repositório e os comentários fornecidos no código, como "by GitHub Copilot", "use GitHub Copilot" e "with GitHub Copilot". obteve os seguintes resultados:

O número de resultados de pesquisa em diferentes idiomas obtidos a partir de tags de código:

Em seguida, entre na fase de filtragem. Aqui, os pesquisadores apontaram no artigo que seguiram principalmente três regras:

  1. Para os resultados da pesquisa na tag Repository, os pesquisadores determinaram quais projetos foram inteiramente gerados pelo Copilot com base nas declarações na descrição do projeto ou nos arquivos leia-me relacionados. Além disso, ele retém arquivos de código para as principais linguagens suportadas pelo Copilot, como Python, Java, Java, C++, C# e Go.

2 Para os resultados da pesquisa sob a tag code, ele retém os comentários do arquivo que mostram o código gerado pelo Copilot.

  1. Os objetos deste estudo são principalmente trechos de código utilizados em projetos reais, por isso serão excluídos os arquivos de código utilizados para resolver problemas simples de algoritmos na plataforma LeetCode.

Depois de completar a anotação dos dados piloto, o primeiro autor do artigo examinou os resultados restantes da pesquisa e obteve um total de 465 trechos de código. Depois de remover resultados duplicados, acabamos com 435 trechos de código diferentes. 249 delas são de tags de repositório e 186 são de tags de código, conforme detalhado abaixo:

Etapa 2: Análise de dados

No processo de teste, para melhorar a cobertura e a precisão dos resultados, os pesquisadores utilizaram duas ferramentas de análise estática para realizar verificações de segurança em cada segmento de código (ou seja, CodeQL mais ferramentas especializadas para linguagens específicas).

Neste estudo, os pesquisadores usaram primeiro CodeQL para analisar o código no conjunto de dados. O conjunto de consultas padrão no pacote de consultas padrão CodeQL é codeql-suites/-code-scanning.qls. Cada pacote contém vários conjuntos de consultas úteis no diretório codeql-suite.

Ao mesmo tempo, ele usa o conjunto de testes -security-and-quality.qls para verificar trechos de código relacionados a vulnerabilidades de segurança. Esses conjuntos de testes podem verificar diversas propriedades de segurança, abrangendo muitos CWEs. Por exemplo: o conjunto de testes Python fornece 168 verificações de segurança; o conjunto de testes Java fornece 203 verificações de segurança; o conjunto de testes C++ fornece 163 verificações de segurança.

Além disso, os pesquisadores selecionaram outras ferramentas populares de análise de segurança estática para cada linguagem de programação para verificar os arquivos. Por exemplo, Python usa Bandit, Java usa ESLint, C++ usa Cppcheck, Java usa Findbugs, C# usa Roslyn e Go usa Gosec. Se o ID do CWE relacionado ao problema de segurança não puder ser obtido diretamente dos resultados da verificação, os pesquisadores também mapearão manualmente os atributos de segurança fornecidos pelos resultados da verificação para o CWE correspondente.

35,8% dos segmentos de código têm vulnerabilidades de segurança, o código C++ tem o maior número de vulnerabilidades, cobrindo 42 tipos de CWE

Após análise, os pesquisadores chegaram à conclusão final com base nas três questões levantadas acima.

RQ1: O código gerado pelo Copilot em projetos GitHub é seguro?

Dos 435 trechos de código gerados pelo Copilot, 35,8% continham vulnerabilidades de segurança, criando problemas de segurança independentemente da linguagem de programação utilizada.

Há uma proporção um pouco maior de vulnerabilidades de segurança no código Python e Java, que são as linguagens onde os desenvolvedores mais comumente usam o Copilot. Entre os 251 trechos de código Python coletados, 39,4% apresentam riscos de segurança. Dos 79 trechos de código Java, 27,8% apresentam riscos de segurança. Entre todas as linguagens de programação, **C++ possui a maior proporção de vulnerabilidades de segurança em segmentos de código, atingindo 46,1%. **Go também tem uma taxa de risco de segurança relativamente alta de 45,0%. Em comparação, a proporção de arquivos de problemas de segurança em código C# e Java é menor, de 25% e 23,2%, respectivamente.

RQ2: Quais vulnerabilidades de segurança existem nos trechos de código gerados pelo Copilot?

Para responder ao RQ2, os pesquisadores processaram os resultados das varreduras conduzidas pelo RQ1 e eliminaram problemas de segurança duplicados detectados no mesmo local do segmento de código. No total, foram identificadas 600 vulnerabilidades de segurança em 435 trechos de código.

Os tipos de vulnerabilidades de segurança detectadas foram diversos e relacionados a 42 CWEs diferentes, incluindo CWE-78 (injeção de comando do sistema operacional), CWE-330 (vulnerabilidade de uso de valores aleatórios inseguros) e CWE-703 (verificação de condições anormais ou inadequadas). manuseio) ocorre com mais frequência.

RQ3: Quantas vulnerabilidades de segurança pertencem ao MITRE CWE Top-25?

Dos 42 CWEs identificados, 11 são atualmente reconhecidos como 2022 CWE Top-25 vulnerabilidades.

Escrito no final

A esse respeito, alguns internautas também brincaram que sua capacidade de escrever bugs pode ser maior do que a do GitHub Copilot.

É claro que este estudo não tem como objetivo persuadir os desenvolvedores a não usarem ferramentas de codificação assistidas por IA no trabalho diário, mas mostrar que o uso do Copilot para gerar código no desenvolvimento real pode melhorar a eficiência do desenvolvimento e lembrar a todos que devem realizar suas próprias avaliações de segurança. .

Ao mesmo tempo, execute verificações de segurança apropriadas ao aceitar as sugestões de código do Copilot para evitar efetivamente alguns riscos potenciais e reduzir perdas.

Para mais detalhes, consulte o artigo:

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)