Simple Science

Ciência de ponta explicada de forma simples

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

Método de Teste de Fuzz Inovador com IA

Uma nova abordagem combina fuzz testing com IA pra uma validação de software melhor.

― 6 min ler


A IA dá um up nos testesA IA dá um up nos testesde fuzz.software pra ter resultados melhores.A IA tá mudando as técnicas de teste de
Índice

Fuzz Testing é um método usado pra testar software jogando entradas aleatórias ou inesperadas pra tentar achar bugs ou vulnerabilidades. Esse processo ajuda a garantir que o software funcione direito mesmo quando enfrenta dados estranhos. Mas, pra muitos programas, especialmente aqueles que precisam de entradas estruturadas, só mutar entradas pode não ser muito eficaz. Aí que entra um novo método que combina fuzz testing com tecnologias avançadas de IA.

O Desafio das Entradas Estruturadas

Muitos programas do mundo real, como navegadores web ou sistemas de banco de dados, precisam de dados em um formato específico. Se os dados de entrada não atendem a esses requisitos de formatação, o programa rejeita na hora. Isso significa que muitos comportamentos possíveis do programa ficam sem ser explorados, dificultando a busca por bugs.

Os métodos atuais de fuzz testing ou mutam entradas existentes ou geram novas do zero. Métodos baseados em mutação geralmente produzem muitas entradas inválidas, que não ajudam nos testes. Por outro lado, gerar entradas com IA também pode ser complicado. Pode levar um tempão pra criar manualmente as regras pros diferentes formatos de dados que precisam ser testados.

O Papel da IA no Fuzz Testing

Avanços recentes em IA, especialmente com o uso de grandes modelos de linguagem (LLMs), trazem uma solução promissora. Esses modelos foram treinados em uma porção enorme de dados textuais e conseguem gerar entradas coerentes que seguem regras de formatação específicas. Aplicando esses modelos de IA no fuzz testing, é possível criar entradas válidas que conseguem testar programas de forma efetiva.

Método Proposto: Combinando Fuzz Testing com IA

A nova abordagem envolve usar um modelo de IA pra ajudar a gerar dados de entrada que sejam variados e válidos. O método utiliza um fuzzer graybox, que funciona baseado no feedback do programa que tá testando. Aqui tá como esse método funciona:

  1. Seleção de Sementes: O fuzzer começa com um conjunto de exemplos válidos de entrada, chamados de sementes.

  2. Mutador: Ao invés de só mutar essas sementes aleatoriamente, o sistema usa um modelo de IA que entende a estrutura da entrada. Essa IA pode gerar novas entradas que são semelhantes às sementes, mas ainda seguem o formato exigido.

  3. Avaliação: As novas entradas geradas são então alimentadas de volta no fuzzer pra ver se conseguem provocar novos comportamentos no programa. Se der certo, essas entradas podem ser mantidas pra mais testes.

Experimentação e Resultados

Pra medir a eficácia dessa nova abordagem, foram feitos experimentos extensivos com vários programas. Os resultados mostraram que o fuzzer com IA melhorou muito a Cobertura de caminhos de execução de código em comparação com métodos tradicionais.

Melhoria na Cobertura

Cobertura em fuzz testing se refere a quantas partes diferentes do programa são testadas. A abordagem com IA levou a um aumento de 12,77% na cobertura comparado aos melhores ferramentas de fuzz testing. Isso foi observado em vários programas de software testados.

Entradas Válidas

Uma das grandes vantagens de usar IA nesse método de fuzz testing é a qualidade das entradas geradas. O modelo de IA criou entradas que eram válidas e mais propensas a passar pelas checagens de formato iniciais do programa. Essa qualidade melhorada nas entradas resultou em uma porcentagem maior de sementes válidas na fila do fuzzer.

Componentes Chave do Método

O método é estruturado em torno de vários componentes críticos que trabalham juntos pra melhorar o fuzz testing. Esses incluem:

Seleção do Modelo de Linguagem

Escolher o modelo de IA certo é crucial. Diferentes modelos oferecem capacidades variadas. Nesse caso, um modelo foi encontrado mais eficaz devido à sua eficiência e capacidade de produzir saídas de alta qualidade.

Design do Prompt

A forma como a IA é solicitada a gerar novas entradas é essencial. Isso envolve fornecer exemplos de entradas válidas junto com orientações sobre o formato esperado. Testar diferentes construções de prompts ajudou a encontrar a maneira mais eficaz de obter saídas úteis da IA.

Métricas de Desempenho

Acompanhar o desempenho da nova abordagem envolveu medir várias métricas, tais como:

  • Cobertura de Edge: Isso mede quantos caminhos de execução diferentes foram testados.
  • Sementes Únicas: Isso indica quantas entradas válidas diferentes foram criadas pela IA, garantindo variedade nos testes.

Ajuste de Hiperparâmetros

Otimizar o desempenho do modelo de IA também envolveu ajustar várias configurações ou hiperparâmetros. Coisas como o comprimento máximo da resposta, o número de variações geradas em resposta a um único prompt, e a temperatura de amostragem foram todos ajustados pra renderizar os melhores resultados.

Desafios e Limitações

Embora o novo método mostre grande potencial, ele também enfrenta vários desafios:

Limitações de Formato

A abordagem é principalmente eficaz pra programas que esperam entradas baseadas em texto que sigam formatos específicos. Ela tem dificuldade com formatos mais complexos ou menos estruturados, como arquivos multimídia, onde as regras subjacentes não são facilmente discerníveis.

Questões de Latência

Usar um modelo de IA através de um serviço externo pode introduzir atrasos, afetando a velocidade geral do processo de fuzz testing. Se as entradas precisarem de textos extremamente longos pra provocar certos comportamentos do programa, o modelo pode não gerar isso de forma eficaz.

Complexidade dos Formatos de Entrada

Alguns formatos de entrada são intrinsecamente complexos devido às suas regras. Nesses casos, usar IA generativa pode ser menos eficaz, já que o modelo pode não conseguir compreender ou gerar entradas adequadas que atendam os requisitos do programa.

Conclusão

A integração da IA no fuzz testing representa um avanço significativo nas metodologias de testes de software. Ao lidar com as limitações vistas nos métodos tradicionais, essa nova abordagem não só melhora a descoberta de vulnerabilidades, mas também aumenta a eficiência geral do processo de teste.

Trabalhos futuros podem expandir as capacidades atuais da IA no fuzz testing, desenvolvendo modelos que consigam lidar com uma gama mais ampla de formatos de dados, permitindo estratégias de teste ainda mais eficazes. Além disso, as ideias obtidas dessa pesquisa podem contribuir pro desenvolvimento de ferramentas de teste mais inteligentes que utilizem as forças tanto do fuzz testing quanto da IA.

Fonte original

Título: Augmenting Greybox Fuzzing with Generative AI

Resumo: Real-world programs expecting structured inputs often has a format-parsing stage gating the deeper program space. Neither a mutation-based approach nor a generative approach can provide a solution that is effective and scalable. Large language models (LLM) pre-trained with an enormous amount of natural language corpus have proved to be effective for understanding the implicit format syntax and generating format-conforming inputs. In this paper, propose ChatFuzz, a greybox fuzzer augmented by generative AI. More specifically, we pick a seed in the fuzzer's seed pool and prompt ChatGPT generative models to variations, which are more likely to be format-conforming and thus of high quality. We conduct extensive experiments to explore the best practice for harvesting the power of generative LLM models. The experiment results show that our approach improves the edge coverage by 12.77\% over the SOTA greybox fuzzer (AFL++) on 12 target programs from three well-tested benchmarks. As for vulnerability detection, \sys is able to perform similar to or better than AFL++ for programs with explicit syntax rules but not for programs with non-trivial syntax.

Autores: Jie Hu, Qian Zhang, Heng Yin

Última atualização: 2023-06-11 00:00:00

Idioma: English

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

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

Licença: https://creativecommons.org/licenses/by-nc-sa/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