Simple Science

Ciência de ponta explicada de forma simples

# Informática# Engenharia de software# Criptografia e segurança

Avaliando Novas Abordagens na Detecção de Vulnerabilidades em Software

Um novo sistema pra avaliar vulnerabilidades de software em múltiplos níveis.

― 7 min ler


Novo Sistema paraNovo Sistema paraDetecção deVulnerabilidadeseficaz.vulnerabilidades de software de formaUma abordagem completa pra avaliar as
Índice

Vulnerabilidades de software são fraquezas em um programa que podem ser exploradas, causando problemas de segurança como travamentos de sistema e vazamentos de dados. Nos últimos dez anos, o número de vulnerabilidades de software relatadas aumentou bastante, destacando a necessidade urgente de métodos de detecção eficazes. Pesquisadores desenvolveram várias abordagens para identificar essas vulnerabilidades, incluindo métodos baseados em regras, técnicas de aprendizado de máquina e novas metodologias utilizando grandes modelos de linguagem (LLMs).

Desafios Atuais na Detecção de Vulnerabilidades

A maioria dos métodos de detecção atuais é limitada à análise de funções isoladas dentro de um programa. Isso significa que eles costumam perder vulnerabilidades que podem ocorrer quando várias funções interagem entre si. Os desenvolvedores frequentemente precisam analisar todo o repositório de código para encontrar esses problemas mais complexos. Infelizmente, a maioria dos conjuntos de dados disponíveis usados para testar métodos de detecção inclui apenas vulnerabilidades simples de uma única função, deixando uma lacuna na compreensão de como os métodos se saem em situações do mundo real.

Este artigo propõe um novo sistema de avaliação que analisa tanto vulnerabilidades intra-procedurais (dentro de uma função) quanto inter-procedurais (através de várias funções) no nível do repositório, que é mais reflexivo dos cenários reais de desenvolvimento de software.

Sistema de Avaliação Proposto

O novo sistema de avaliação consiste em três tarefas principais:

  1. Detecção de Vulnerabilidades em Nível de Função: Esta tarefa identifica vulnerabilidades dentro de funções individuais de código.
  2. Predição de Dependências Relacionadas a Vulnerabilidades: Esta tarefa recupera dependências relevantes do gráfico de chamadas do programa, oferecendo explicações para ajudar os desenvolvedores a entender melhor as vulnerabilidades.
  3. Detecção de Vulnerabilidades em Nível de Repositório: Esta tarefa combina os resultados das etapas anteriores para identificar vulnerabilidades que abrangem várias funções em todo o repositório.

Para apoiar a avaliação, um grande conjunto de dados foi criado, consistindo em mais de 4.000 vulnerabilidades conhecidas e uma vasta quantidade de código do mundo real.

Configuração Experimental

Testamos vários métodos de deteção existentes sob o novo sistema de avaliação para ver como se saíram tanto em nível de função quanto em nível de repositório. Os métodos testados incluíram abordagens tradicionalmente baseadas em regras, técnicas de aprendizado supervisionado, métodos de ajuste fino que adaptam modelos pré-treinados e métodos modernos baseados em prompts usando grandes modelos de linguagem.

Para nossos experimentos, usamos duas abordagens de divisão de dados:

  1. Divisão Aleatória: Este método divide aleatoriamente o conjunto de dados em conjuntos de treinamento, validação e teste, permitindo uma avaliação típica de desempenho.
  2. Divisão Temporal: Este método separa o conjunto de dados com base nas datas de commit das vulnerabilidades, garantindo que os dados de treinamento não incluam informações futuras.

Descobertas dos Experimentos

Detecção de Vulnerabilidades em Nível de Função

Ao avaliar como diferentes métodos detectaram vulnerabilidades a nível de função, os métodos de ajuste fino, em geral, superaram outras técnicas. Esses métodos utilizam modelos pré-treinados que já aprenderam com grandes quantidades de código, permitindo que identifiquem vulnerabilidades de forma eficaz.

Curiosamente, enquanto os métodos de ajuste fino mostraram um bom desempenho em geral, eles tiveram dificuldades para manter esse nível no cenário de divisão temporal. Isso provavelmente se deve ao fato de muitos desses modelos extraírem conhecimento de dados históricos, que nem sempre se aplicam a novas vulnerabilidades que surgem.

Por outro lado, os métodos de análise de programas tendem a ficar atrás na detecção geral de vulnerabilidades, mas se saem melhor na identificação de tipos específicos de vulnerabilidades devido à sua natureza baseada em regras.

Predição de Dependências Relacionadas a Vulnerabilidades

Na próxima parte dos nossos experimentos, focamos em quão eficazes foram os diferentes métodos para identificar dependências relevantes associadas a vulnerabilidades. Métodos baseados em léxico, que olham para o texto real no código, consistentemente superaram métodos baseados em semântica, que se concentram no significado em vez do texto em si.

Notavelmente, a Similaridade de Jaccard, uma métrica que mede a similaridade entre conjuntos, provou ser o método mais eficaz no cenário de divisão aleatória, enquanto a Similaridade de Edição se saiu melhor na divisão temporal. Essas descobertas sugerem que entender os tokens comuns entre trechos de código e suas dependências relacionadas é crucial para uma recuperação eficaz.

Detecção de Vulnerabilidades em Nível de Repositório

O principal objetivo deste sistema de avaliação é avaliar vulnerabilidades em todo o repositório. Aqui, descobrimos que métodos que utilizam informações de dependência contextual geralmente se saíram melhor do que aqueles que não o fizeram. Ao integrar as dependências relevantes identificadas nas tarefas anteriores, os modelos puderam entender melhor o contexto mais amplo do código que estavam examinando.

Modelos maiores se beneficiaram mais desse contexto adicional, melhorando ainda mais seu desempenho na detecção de vulnerabilidades. Embora alguns modelos tenham mostrado melhorias significativas, outros não pareceram ganhar tanto com a informação em nível de repositório, indicando que a eficácia dessas técnicas pode variar bastante dependendo do método e do modelo utilizado.

Eficácia em Diferentes Tipos de Vulnerabilidades

Nós também avaliamos como diferentes métodos se saíram contra tipos específicos de vulnerabilidades, como estouros de buffer ou problemas de validação de entrada. Nossa análise revelou que LLMs, particularmente modelos como o ChatGPT, tendiam a se destacar na identificação desses tipos de vulnerabilidades. Isso sugere que usar modelos mais avançados pode levar a melhores resultados de detecção.

Implicações das Descobertas

Os resultados desta pesquisa destacam várias percepções importantes para o campo da detecção de vulnerabilidades em software. Primeiro, incorporar contexto sobre vulnerabilidades a partir do nível do repositório pode melhorar significativamente as capacidades de detecção em comparação com a análise de funções individuais isoladamente. Isso é especialmente verdadeiro para modelos maiores, que parecem aproveitar essa informação de forma mais eficaz.

Além disso, as descobertas enfatizam a importância de desenvolver métodos mais eficazes para recuperar dependências relacionadas a vulnerabilidades. Métodos atuais mostram margem para melhoria, especialmente na adaptação a cenários reais onde as complexidades de uma base de código podem obscurecer algumas vulnerabilidades.

Direções Futuras de Pesquisa

Olhando para o futuro, há vários aspectos da detecção de vulnerabilidades que merecem mais pesquisa. Trabalhos futuros poderiam se concentrar em melhorar técnicas de recuperação de dependências, explorar como combinar as forças de diferentes modelos de detecção e avaliar a aplicabilidade deste sistema de avaliação em uma variedade mais ampla de linguagens de programação.

Outra área que está pronta para exploração é o desenvolvimento de métodos para identificar automaticamente dependências, o que poderia reduzir o esforço manual que os desenvolvedores precisam fazer atualmente e melhorar a eficiência geral do processo de detecção.

Conclusão

Este estudo contribui para o esforço contínuo de melhorar a detecção de vulnerabilidades em software ao introduzir um sistema de avaliação holístico capaz de avaliar tanto vulnerabilidades intra-procedurais quanto inter-procedurais em nível de repositório. Através de testes rigorosos de vários métodos de detecção, estabelecemos que integrar informações contextuais sobre vulnerabilidades pode levar a um desempenho melhorado. A pesquisa contínua deve continuar a refinar esses métodos, levando, em última instância, a sistemas de software mais seguros e protegidos.

Fonte original

Título: VulEval: Towards Repository-Level Evaluation of Software Vulnerability Detection

Resumo: Deep Learning (DL)-based methods have proven to be effective for software vulnerability detection, with a potential for substantial productivity enhancements for detecting vulnerabilities. Current methods mainly focus on detecting single functions (i.e., intra-procedural vulnerabilities), ignoring the more complex inter-procedural vulnerability detection scenarios in practice. For example, developers routinely engage with program analysis to detect vulnerabilities that span multiple functions within repositories. In addition, the widely-used benchmark datasets generally contain only intra-procedural vulnerabilities, leaving the assessment of inter-procedural vulnerability detection capabilities unexplored. To mitigate the issues, we propose a repository-level evaluation system, named \textbf{VulEval}, aiming at evaluating the detection performance of inter- and intra-procedural vulnerabilities simultaneously. Specifically, VulEval consists of three interconnected evaluation tasks: \textbf{(1) Function-Level Vulnerability Detection}, aiming at detecting intra-procedural vulnerability given a code snippet; \textbf{(2) Vulnerability-Related Dependency Prediction}, aiming at retrieving the most relevant dependencies from call graphs for providing developers with explanations about the vulnerabilities; and \textbf{(3) Repository-Level Vulnerability Detection}, aiming at detecting inter-procedural vulnerabilities by combining with the dependencies identified in the second task. VulEval also consists of a large-scale dataset, with a total of 4,196 CVE entries, 232,239 functions, and corresponding 4,699 repository-level source code in C/C++ programming languages. Our analysis highlights the current progress and future directions for software vulnerability detection.

Autores: Xin-Cheng Wen, Xinchen Wang, Yujia Chen, Ruida Hu, David Lo, Cuiyun Gao

Última atualização: 2024-04-23 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2404.15596

Fonte PDF: https://arxiv.org/pdf/2404.15596

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.

Mais de autores

Artigos semelhantes