Avaliando o Papel do ChatGPT na Revisão de Código de Segurança em Python
Explorando a eficácia do ChatGPT em identificar vulnerabilidades no código Python.
― 9 min ler
Índice
Nos últimos tempos, a inteligência artificial (IA) virou uma parada super importante em várias áreas da vida. Um dos lugares onde a IA pode ajudar é na checagem de código pra problemas de segurança. Isso se chama revisão de código de segurança. A galera tá começando a olhar pra ferramentas de IA pra ajudar a encontrar problemas no código, e uma ferramenta que tem chamado muita atenção é o ChatGPT. O ChatGPT é conhecido pela sua habilidade de seguir instruções e dar respostas detalhadas. Esse artigo analisa se o ChatGPT pode ser usado pra encontrar problemas de segurança em código Python.
Com o avanço da tecnologia, a quantidade de código sendo escrito também aumentou. Por exemplo, o número de projetos no GitHub dobrou em apenas alguns anos, passando de 100 milhões em 2018 pra 200 milhões em 2022. Esse aumento no código significa que há mais chances de surgirem problemas de segurança. Pesquisas mostram que o número de Vulnerabilidades em softwares também tem crescido, o que destaca a importância de encontrar e corrigir esses problemas. Vulnerabilidades são fraquezas que podem ser exploradas, levando a vazamentos de dados ou até mesmo quedas de serviço.
Pra encontrar vulnerabilidades no código, muitas ferramentas usam um método chamado análise estática de código fonte. Esse método examina o código sem realmente executá-lo, permitindo que os testadores encontrem problemas de segurança de forma eficiente. Ferramentas comuns pra isso incluem Bandit, Semgrep e SonarQube. Embora essas ferramentas sejam úteis, elas têm algumas limitações, como gerar muitos falsos positivos (alertas incorretos) e falsos negativos (deixar de identificar problemas reais). Quando as ferramentas geram muitos alarmes falsos, pode levar muito tempo e esforço pra checar tudo. Por outro lado, deixar passar problemas reais pode ter consequências sérias.
Nos últimos anos, o Aprendizado de Máquina e o aprendizado profundo deram grandes passos em vários campos, incluindo a compreensão da linguagem humana. Como o código é parecido com a linguagem natural, os pesquisadores estão interessados em usar métodos de aprendizado profundo pra tarefas relacionadas à identificação de vulnerabilidades no código. Modelos de aprendizado de máquina podem aprender com os dados e identificar padrões que podem indicar problemas de segurança. Estudos sugerem que esses modelos podem produzir menos falsos positivos em comparação com ferramentas tradicionais. Algumas pesquisas até mostraram que modelos de aprendizado profundo superam várias ferramentas open-source existentes na detecção de problemas em código C/C++.
Agora, o ChatGPT, que é baseado em IA e usa processamento de linguagem natural, tem atraído atenção pelo seu potencial em negócios e outras áreas. Ele pode automatizar tarefas que normalmente precisam de esforço humano, economizando tempo e recursos. O modelo foi treinado em um grande conjunto de dados até 2021, o que lhe dá conhecimento sobre vários padrões, incluindo os encontrados no código. Esse artigo avalia quão bem o ChatGPT pode identificar vulnerabilidades de segurança em código Python em comparação com ferramentas de segurança populares como Bandit, Semgrep e SonarQube.
O Python se tornou uma das linguagens de programação mais populares, frequentemente ficando entre as três mais utilizadas de acordo com diferentes pesquisas. Ele é amplamente usado em várias áreas, não só em aprendizado de máquina e ciência de dados, mas também em desenvolvimento web com frameworks como Django e Flask. Por causa da sua popularidade, garantir a segurança de aplicações Python é fundamental.
Esse artigo está organizado em várias seções. A primeira seção faz uma breve revisão de pesquisas anteriores nessa área. A seção seguinte discute os conjuntos de dados usados para os testes. Depois disso, explicamos os detalhes dos experimentos realizados com o ChatGPT. Em seguida, apresentamos a avaliação dos resultados obtidos. Por último, há uma discussão sobre os fatores que podem impactar a validade dos resultados, seguida de uma conclusão.
Pesquisas Anteriores
No passado, muitos estudos se concentraram em encontrar vulnerabilidades usando diferentes modelos de IA. A maioria desses estudos seguiu um método chamado aprendizado supervisionado. Nesse método, vários modelos de aprendizado de máquina utilizam características como o número de linhas em um código ou a complexidade desse código. Pesquisas mostraram que modelos baseados em texto costumam ter um desempenho melhor do que os que se baseiam principalmente em características de código.
Mais recentemente, o foco se mudou pra aprendizado profundo. Pesquisadores exploraram diferentes modelos de aprendizado profundo, como Redes Neurais Convolucionais (CNNs) e redes de Memória de Longo e Curto Prazo (LSTM). Alguns pesquisadores até experimentaram diferentes tipos de gráficos de propriedades de código. Poucos estudos analisaram especificamente como os modelos de aprendizado profundo funcionam na identificação de vulnerabilidades, mostrando que o ajuste fino dos modelos pode levar a um desempenho melhor.
Um estudo sugeriu que modelos baseados em transformadores desempenham melhor do que modelos baseados em gráficos. Por exemplo, um modelo chamado VulBERTa foi desenvolvido usando o modelo RoBERTa pra identificar vulnerabilidades em código C/C++. Outros estudos exploraram o uso da arquitetura BERT pra detectar vulnerabilidades de código, constatando que modelos de transformadores podem ser mais eficazes do que modelos tradicionais de aprendizado profundo.
Recentemente, houve pesquisas avaliando o ChatGPT pra encontrar vulnerabilidades em código Java. No entanto, há uma lacuna em estudos comparando o ChatGPT com ferramentas de segurança existentes especificamente para Python, que esse artigo pretende preencher.
Conjunto de Dados Usados para Teste
Nosso conjunto de dados para teste consiste em 156 arquivos de código Python. Desses, 130 arquivos foram retirados de um conjunto de dados de avaliação de segurança que representa 75 tipos diferentes de vulnerabilidades. Os 26 arquivos restantes são de um projeto que focou na detecção de vulnerabilidades em Python. Um especialista em segurança teve que revisar os arquivos pra marcar as linhas específicas de código que continham vulnerabilidades.
Usando a API do ChatGPT para Detecção
Para nossos experimentos, utilizamos o modelo ChatGPT GPT-3.5-turbo, que permite uma interação mais avançada em comparação com versões anteriores. Esse modelo pode processar uma série de mensagens e manter o contexto, facilitando a tarefa de fazer perguntas relacionadas a arquivos de código específicos. Realizamos quatro tipos de experimentos usando esse modelo.
No primeiro experimento, fornecemos ao modelo arquivos vulneráveis e perguntamos se continham problemas de segurança sem especificar nenhum tipo de vulnerabilidade conhecido. O objetivo era determinar se o modelo poderia identificar vulnerabilidades simplesmente indicando os números das linhas do código.
No segundo experimento, fornecemos uma lista de tipos de vulnerabilidades conhecidas e pedimos ao modelo pra identificar quais tipos estavam presentes nos arquivos de código vulneráveis. As respostas foram formatadas em JSON pra facilitar a comparação com os resultados de outras ferramentas.
O terceiro experimento envolveu dar ao modelo rótulos de ferramentas de segurança existentes e pedir pra confirmar se vulnerabilidades específicas estavam presentes em cada arquivo. Aqui, também tivemos a opção de incluir quaisquer vulnerabilidades adicionais que o modelo pudesse identificar.
No último experimento, não fornecemos rótulos ao modelo e pedimos pra identificar vulnerabilidades baseado no seu conhecimento. As respostas seguiram o mesmo formato JSON.
A escolha dos prompts usados pra interagir com o modelo foi crucial, pois poderia afetar bastante os resultados. Ajustamos a forma como apresentamos os prompts pra otimizar o desempenho do modelo.
Avaliando Resultados
Pra avaliar a eficácia do ChatGPT em comparação com as ferramentas estabelecidas, calculamos várias métricas com base na precisão da identificação de vulnerabilidades. Essas métricas incluíram quantos verdadeiros positivos, verdadeiros negativos, falsos positivos e falsos negativos o modelo produziu. Em seguida, comparamos os resultados do ChatGPT com os do Bandit, Semgrep e SonarQube.
No primeiro experimento, o ChatGPT não se saiu melhor do que as outras ferramentas em termos de precisão ou recall. No segundo experimento, apesar de usar os rótulos de vulnerabilidade fornecidos, os resultados do modelo foram comparáveis aos das ferramentas SAST.
No terceiro experimento, onde atuamos como assistentes das ferramentas SAST, os resultados mostraram uma melhoria notável. Notavelmente, quando ignoramos novos rótulos identificados pelo modelo, os resultados do ChatGPT foram significativamente melhores do que os das ferramentas existentes.
Quando permitimos que o modelo se baseasse no seu conhecimento sem rótulos de entrada, seu desempenho permaneceu semelhante ao das ferramentas SAST.
Desafios e Limitações
Vários fatores podem influenciar os resultados do nosso estudo. O principal desafio foi escolher prompts adequados para o ChatGPT, que poderiam afetar bastante seu desempenho. O tamanho e a diversidade do conjunto de dados também desempenham um papel, assim como a cobertura de diferentes vulnerabilidades. Nós só comparamos o ChatGPT com três ferramentas de segurança para Python, e ferramentas adicionais podem fornecer insights diferentes.
Por fim, focamos na versão GPT-3.5 do ChatGPT, e é possível que versões mais novas possam produzir resultados ainda melhores em estudos futuros.
Conclusão
Em resumo, realizamos vários experimentos pra testar a capacidade do ChatGPT em identificar vulnerabilidades de segurança em código Python. Enquanto os resultados mostraram que o ChatGPT pode contribuir com insights valiosos, especialmente quando usado como assistente de ferramentas de segurança existentes, ele ainda não é um substituto para métodos tradicionais. As descobertas do nosso estudo, embora limitadas, indicam potencial para trabalhos futuros no uso de modelos de IA avançados pra melhorar a segurança do código. À medida que novos modelos são lançados, pesquisas adicionais podem ajudar a alcançar resultados ainda melhores na identificação de vulnerabilidades em diferentes linguagens de programação.
Título: Using ChatGPT as a Static Application Security Testing Tool
Resumo: 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 atualização: 2023-08-28 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2308.14434
Fonte PDF: https://arxiv.org/pdf/2308.14434
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.