Avaliando a Segurança do Código de LLMs
Avaliando a segurança do código gerado por Modelos de Linguagem Grandes através do LLMSecEval.
― 5 min ler
Índice
Modelos de Linguagem Grandes (LLMs) como Codex estão sendo cada vez mais usados pra ajudar a criar e completar Código. Esses modelos aprenderam com uma quantidade enorme de código encontrado em fontes públicas, como o GitHub. Enquanto essas ferramentas podem facilitar a programação, rolam preocupações sobre a Segurança do código que elas geram. Este artigo vai falar sobre o LLMSecEval, um novo conjunto de dados criado pra avaliar a segurança do código produzido pelos LLMs.
A Necessidade de um Conjunto de Dados
À medida que os LLMs ficam mais populares pra tarefas de codificação, é crucial avaliar a segurança do código que eles produzem. Muitos desenvolvedores estão usando esses modelos pra criar aplicações reais. Mas o código gerado pode ter falhas de segurança por causa da natureza dos dados de treinamento, que muitas vezes incluem código inseguro. Por isso, é necessário um jeito confiável de testar a segurança desse código.
O que é LLMSecEval?
LLMSecEval é um conjunto de dados que contém 150 prompts de linguagem natural (NL). Esses prompts podem ser usados pra avaliar quão bem os LLMs criam código seguro. Cada prompt descreve uma tarefa de codificação que é propensa a problemas de segurança com base em uma lista de fraquezas comuns. Pra cada prompt, também tem um exemplo de código seguro disponível pra comparação. Isso permite que desenvolvedores e pesquisadores vejam como o código gerado pelos LLMs se compara com alternativas seguras.
Criando o Conjunto de Dados
Pra fazer o conjunto de dados, a equipe primeiro olhou pra fraquezas de segurança comuns notadas pelo MITRE, que identifica problemas de software significativos. Eles focaram em 18 fraquezas das 25 mais sérias. A equipe escreveu prompts que poderiam levar a código com potenciais Vulnerabilidades. Por exemplo, um prompt poderia pedir um código em Python pra criar uma página de registro que não verifica corretamente a entrada do usuário.
Ao invés de escrever esses prompts do zero, eles usaram o Codex pra gerar descrições com base em trechos de código existentes que tinham problemas. Essa abordagem ajudou a criar prompts relevantes e úteis enquanto garantia que eles estavam baseados em exemplos de código reais.
Qualidade dos Prompts
A equipe avaliou a qualidade dos 150 prompts usando vários critérios. Eles analisaram fatores como quão natural a linguagem soava e quão fácil era de entender. A maioria dos prompts se saiu bem, indicando que eram claros e informativos. Alguns prompts precisaram de melhorias devido a detalhes desnecessários ou frases complexas. Mas, no geral, os prompts foram considerados de alta qualidade.
Usando o LLMSecEval
O objetivo principal do LLMSecEval é ajudar pesquisadores e desenvolvedores a examinarem a segurança do código gerado pelos LLMs. O conjunto de dados pode ser usado pra gerar código com base nos prompts fornecidos e então analisar esse código em busca de problemas de segurança. Isso é feito através de uma ferramenta que permite aos usuários selecionar um LLM, inserir os prompts NL e receber a saída de código.
Pra checar vulnerabilidades, o código gerado é analisado usando o CodeQL, uma ferramenta projetada pra análise automatizada de código. Essa ferramenta pode identificar vários problemas de segurança com base em um conjunto de consultas pré-definidas. Usando o LLMSecEval junto com o CodeQL, os usuários podem determinar se o código produzido é seguro ou se apresenta vulnerabilidades.
Trabalhos Relacionados
Antes do LLMSecEval, outros conjuntos de dados foram criados pra examinar o código produzido pelos LLMs. Por exemplo, o Codex tinha um conjunto de dados chamado HumanEval que focava em se o código gerado funcionava corretamente, mas não abordava preocupações de segurança. Da mesma forma, outras pesquisas exploraram quão bem os LLMs podem completar código ou corrigir bugs, mas a segurança não era o foco principal.
O LLMSecEval preenche essa lacuna ao fornecer um conjunto de dados especificamente voltado pra avaliar a segurança do código gerado por esses modelos. Ao se concentrar em vulnerabilidades comuns, o LLMSecEval estabelece uma base pra estudos futuros nessa área.
Limitações e Planos Futuros
A versão atual do LLMSecEval cobre apenas 18 das 25 principais fraquezas de segurança. No futuro, há planos de expandir esse conjunto de dados incluindo fraquezas adicionais e atualizando anualmente pra refletir novas descobertas. Isso envolverá usar exemplos de código de várias fraquezas pra criar prompts novos.
Outra limitação é a abordagem agnóstica em relação à linguagem dos prompts. Algumas fraquezas se aplicam apenas a linguagens de programação específicas. Embora o objetivo fosse criar prompts gerais aplicáveis a várias linguagens, pode não funcionar bem pra todas as fraquezas. Esforços futuros poderiam se concentrar em criar prompts específicos de linguagem pra melhorar a utilidade do conjunto de dados.
Conclusão
O LLMSecEval é um recurso valioso pra avaliar a segurança do código gerado pelos LLMs. Ao oferecer um conjunto de 150 prompts NL baseados em vulnerabilidades comuns, ele fornece um jeito simples de avaliar as implicações de segurança de usar LLMs no desenvolvimento de software. À medida que esses modelos se tornam mais amplamente adotados, entender seus pontos fortes e fracos, especialmente em relação à segurança, é essencial.
Esse conjunto de dados ajuda a facilitar avaliações críticas do código gerado automaticamente enquanto apoia mais pesquisas em práticas de geração de código seguro. Os usuários podem aproveitar o LLMSecEval, junto com ferramentas como o CodeQL, pra garantir que o código produzido não seja apenas funcional, mas também seguro. Com planos de futuras expansões e melhorias, o LLMSecEval visa contribuir de forma significativa pro campo da segurança de software.
Título: LLMSecEval: A Dataset of Natural Language Prompts for Security Evaluations
Resumo: Large Language Models (LLMs) like Codex are powerful tools for performing code completion and code generation tasks as they are trained on billions of lines of code from publicly available sources. Moreover, these models are capable of generating code snippets from Natural Language (NL) descriptions by learning languages and programming practices from public GitHub repositories. Although LLMs promise an effortless NL-driven deployment of software applications, the security of the code they generate has not been extensively investigated nor documented. In this work, we present LLMSecEval, a dataset containing 150 NL prompts that can be leveraged for assessing the security performance of such models. Such prompts are NL descriptions of code snippets prone to various security vulnerabilities listed in MITRE's Top 25 Common Weakness Enumeration (CWE) ranking. Each prompt in our dataset comes with a secure implementation example to facilitate comparative evaluations against code produced by LLMs. As a practical application, we show how LLMSecEval can be used for evaluating the security of snippets automatically generated from NL descriptions.
Autores: Catherine Tony, Markus Mutas, Nicolás E. Díaz Ferreyra, Riccardo Scandariato
Última atualização: 2023-03-16 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2303.09384
Fonte PDF: https://arxiv.org/pdf/2303.09384
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.