Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança# Inteligência Artificial# Engenharia de software

Avaliando Modelos de Linguagem para Detecção de Vulnerabilidades em Java

Este relatório avalia o ChatGPT e o GPT-3 na busca por vulnerabilidades em código Java.

― 6 min ler


Modelos de Linguagem vs.Modelos de Linguagem vs.Vulnerabilidades em Javafalhas de segurança em Java.O ChatGPT e o GPT-3 têm dificuldade com
Índice

Nos últimos anos, modelos de linguagem grandes, como ChatGPT e GPT-3, chamaram muita atenção pela habilidade de entender código e ajudar em tarefas de programação. Esse relatório avalia quão bem esses modelos conseguem encontrar fraquezas de segurança, conhecidas como Vulnerabilidades, em código Java.

Contexto

Detectar vulnerabilidades é uma tarefa importante no desenvolvimento de software. Isso ajuda a identificar possíveis problemas de segurança no código que podem ser explorados por atacantes. Tradicionalmente, os desenvolvedores têm usado várias ferramentas para encontrar essas vulnerabilidades. Alguns estudos anteriores mostraram que modelos como GPT-3 se saem bem em tarefas de codificação. No entanto, ainda não se sabe se esses modelos conseguem detectar vulnerabilidades em código real de forma eficaz.

Objetivo do Estudo

Esse relatório tem como objetivo responder se modelos como ChatGPT e GPT-3 podem ajudar a detectar vulnerabilidades em código Java. O foco é em quão precisamente esses modelos conseguem identificar código que contém riscos de segurança.

Abordagem de Pesquisa

Para avaliar o ChatGPT e o GPT-3, foi criado um conjunto de dados usando arquivos Java retirados do GitHub. Esse conjunto inclui códigos vulneráveis e corrigidos. O código vulnerável contém problemas de segurança conhecidos, enquanto o código corrigido teve consertos aplicados. A avaliação foi feita através de várias tarefas:

  1. Classificação Binária: Isso identifica se um determinado trecho de código é vulnerável ou não.
  2. Classificação Multilabel: Isso determina quais tipos de vulnerabilidades estão presentes no código.

Coleta de Dados

Os dados foram coletados com cuidado. Eles foram compostos por arquivos Java retirados de repositórios abertos no GitHub. Especialistas da área selecionaram manualmente os arquivos que eram conhecidos por conter vulnerabilidades. As versões corrigidas foram criadas aplicando consertos específicos ao código vulnerável. Os dados incluíram vários tipos de vulnerabilidades da Common Weakness Enumeration (CWE).

Pré-processamento de Dados

Os dados coletados foram preparados para análise:

  • Para Classificação Binária: Um subconjunto de arquivos foi selecionado onde apenas uma função foi modificada. Um total de 308 amostras foi usado nessa tarefa.

  • Para Classificação Multilabel: O conjunto de dados foi reduzido para os cinco principais tipos de vulnerabilidades. Sessenta amostras vulneráveis e sessenta amostras corrigidas foram usadas para análise.

Usando a API dos Modelos

A avaliação utilizou dois modelos específicos da família GPT-3: o modelo Davinci e o modelo GPT-3.5-turbo. A API da OpenAI foi usada para enviar solicitações a esses modelos, perguntando se determinadas funções Java continham vulnerabilidades. O objetivo era receber respostas claras de "Sim" ou "Não".

Metodologia de Avaliação

Na avaliação, várias métricas foram usadas para avaliar o desempenho dos modelos:

  • Precisão: Isso mede quantas amostras foram classificadas corretamente.
  • Precisão de Predição: Isso indica quantas das vulnerabilidades previstas eram realmente corretas.
  • Revocação: Isso mostra quantas das vulnerabilidades reais foram identificadas corretamente pelo modelo.
  • Pontuação F1: Isso combina precisão e revocação em uma única métrica.
  • AUC: Isso avalia o desempenho do modelo em tarefas de classificação binária.

Comparação de Modelos

Para dar um contexto, o desempenho do GPT-3 e do ChatGPT foi comparado com um modelo de base, que simplesmente previu rótulos com base na distribuição no conjunto de dados. Isso permitiu uma melhor compreensão de quão bem os modelos se saíram.

Resultados da Avaliação

Classificação Binária

Durante a tarefa de classificação binária, os resultados mostraram que, embora ambos os modelos GPT obtivessem recall e pontuações F1 mais altas do que a linha de base, eles ainda tinham dificuldade em distinguir entre código vulnerável e não vulnerável. A pontuação AUC indicou que o desempenho deles não foi melhor do que um palpite aleatório. Isso significa que os modelos tendiam a rotular incorretamente muitos códigos não vulneráveis como vulneráveis, resultando em uma alta taxa de falsos positivos.

Classificação Multilabel

Na tarefa de classificação multilabel, ambos os modelos alcançaram uma precisão de apenas 38%. No entanto, esse número pode ser um pouco enganoso. Quando analisou o desempenho apenas nos códigos vulneráveis, os modelos não se saíram bem. Curiosamente, os modelos foram mais precisos ao identificar funções corrigidas que foram consertadas, em vez de olhar para as vulnerabilidades iniciais. Isso pode indicar um viés em como os modelos foram treinados ou um efeito aleatório devido ao tamanho da amostra usada.

Limitações e Ameaças à Validade

Várias limitações foram observadas neste estudo:

  • Tamanho da Amostra Pequena: O número limitado de amostras pode ter afetado a confiabilidade dos resultados.
  • Uso de Um Único Modelo: Usar apenas um modelo para a detecção pode deixar passar outras abordagens potenciais que poderiam oferecer melhores resultados.
  • Escolhas de Prompt: Os prompts específicos usados durante o treinamento e a avaliação poderiam limitar o desempenho dos modelos. Prompts diferentes poderiam gerar resultados diferentes.
  • Seleção Manual de Código Vulnerável: A dependência de especialistas humanos para selecionar vulnerabilidades pode introduzir viés, já que algumas vulnerabilidades podem ter sido perdidas ou rotuladas incorretamente.

Conclusão

Os achados indicam que, embora ChatGPT e GPT-3 sejam modelos capazes para várias tarefas de codificação, a eficácia deles na detecção de vulnerabilidades é atualmente limitada. Eles não se saíram bem em identificar vulnerabilidades no código Java avaliado. Embora modelos de linguagem grandes tenham mostrado sucesso em muitas outras áreas, a aplicação deles na detecção de vulnerabilidades requer mais pesquisa e desenvolvimento.

Estudos futuros poderiam se concentrar em melhorar os modelos através de diferentes métodos de treinamento, incluindo o uso de técnicas de cadeia de pensamento, que poderiam aprimorar suas capacidades de raciocínio. Além disso, testar modelos mais novos como o GPT-4 pode fornecer mais insights sobre como essas ferramentas podem ajudar na detecção de vulnerabilidades.

Em resumo, enquanto há potencial para modelos de linguagem nessa área, ainda há um longo caminho pela frente antes que eles se tornem ferramentas confiáveis para detectar vulnerabilidades no código. Mais exploração e refinamento são necessários para desbloquear suas capacidades completas.

Mais de autores

Artigos semelhantes