Abordando Vulnerabilidades no Software BusyBox
Investigando técnicas pra melhorar a segurança no BusyBox usado em dispositivos IoT.
― 8 min ler
Índice
- A Necessidade de Melhores Detecções de Bugs
- A Importância do Fuzz Testing
- Usando Modelos de Linguagem Grande (LLMs) para Geração de Sementes
- Reutilizando Dados de Falhas
- Crescentes Preocupações com a Cibersegurança
- Perguntas de Pesquisa
- Fuzz Testing e Suas Variantes
- Objetivos da Pesquisa
- Configuração do Experimento
- Resultados
- Usando LLMs pra Gerar Sementes
- Técnica de Reutilização de Falhas
- Análise Manual de Falhas
- As Implicações Mais Amplas dos Resultados
- Trabalhos Futuros
- Conclusão
- Fonte original
- Ligações de referência
BusyBox é uma ferramenta de software popular que junta mais de 300 comandos essenciais do Linux em um único arquivo executável. É super usado em muitos dispositivos que rodam Linux, especialmente aqueles com recursos limitados, tipo dispositivos da Internet das Coisas (IoT). Por causa do uso nesses dispositivos, achar e consertar Vulnerabilidades no BusyBox é muito importante.
Vulnerabilidades no BusyBox podem causar sérios problemas de segurança. Por exemplo, se uma vulnerabilidade permitir execução remota de código, um atacante poderia assumir o controle de um dispositivo. Infelizmente, muitos dispositivos ainda usam versões antigas do BusyBox que têm vulnerabilidades conhecidas. Isso gera uma preocupação enorme com a segurança em dispositivos como roteadores, câmeras e outros equipamentos conectados.
A Necessidade de Melhores Detecções de Bugs
O número de dispositivos IoT tá crescendo rápido, e com isso, a possibilidade de ameaças à segurança. O firmware, que é o software que controla um dispositivo, muitas vezes é composto por vários componentes. Alguns desses componentes são pacotes de software de terceiros, como o BusyBox. Um erro em uma parte pode afetar muitos dispositivos, então verificar continuamente esses componentes em busca de vulnerabilidades é crucial.
Existem diferentes tipos de firmware. Por exemplo, alguns rodam em sistemas operacionais padrão como Linux, enquanto outros operam em sistemas operacionais em tempo real ou nem têm um sistema operacional formal. Desses tipos, o firmware com base em Linux é o mais comum. Esse tipo de firmware geralmente usa softwares de aplicação como o BusyBox, levando a muitos possíveis pontos de ataque.
Fuzz Testing
A Importância doFuzz testing é uma técnica usada pra identificar vulnerabilidades em software. Funciona inserindo dados aleatórios ou inesperados no programa e procurando por falhas ou comportamentos estranhos. Quando um programa falha, isso pode indicar uma vulnerabilidade.
Nesse estudo, focamos em melhorar o fuzz testing para o BusyBox. Desenvolvemos duas técnicas principais pra ajudar a encontrar vulnerabilidades de maneira mais eficaz.
LLMs) para Geração de Sementes
Usando Modelos de Linguagem Grande (A primeira técnica que introduzimos foi usar Modelos de Linguagem Grande (LLMs) pra gerar sementes de entrada iniciais para o fuzz testing. Esses modelos podem produzir dados de alta qualidade baseados em padrões no código, o que pode levar a melhores resultados nos testes.
Nos nossos experimentos, descobrimos que usar sementes geradas por LLMs resultou em um aumento significativo de falhas detectadas durante o fuzz testing. Isso mostra que os LLMs podem ser muito úteis pra descobrir que tipo de entrada pode causar problemas no software.
Aproveitando os modelos de linguagem, conseguimos automatizar o processo de criação de sementes iniciais, economizando tempo e aumentando a eficácia do processo de teste. Antes dessa abordagem, gerar dados de entrada de qualidade muitas vezes era uma tarefa lenta e trabalhosa pros testadores.
Reutilizando Dados de Falhas
A segunda técnica que usamos envolve pegar dados de falhas de versões antigas do BusyBox e aplicá-los a versões mais novas. Essa abordagem ajuda a identificar se vulnerabilidades detectadas anteriormente ainda existem no software atualizado. Reutilizando dados de falhas, conseguimos avaliar rapidamente se uma nova versão de um programa tem problemas semelhantes sem começar o processo de fuzzing do zero.
Essa técnica torna nosso processo de teste muito mais eficiente. Em vez de passar horas rodando testes em versões mais novas, podemos começar com uma coleção de problemas conhecidos e ver se eles causam problemas no novo software. Esse método é especialmente útil pra produtos com prazos apertados.
Crescentes Preocupações com a Cibersegurança
O aumento de dispositivos conectados gerou preocupações maiores sobre cibersegurança. Dispositivos embutidos como câmeras, termostatos inteligentes e roteadores são frequentemente alvo de atacantes que buscam explorar fraquezas em seu software.
Versões antigas de componentes de software, como o BusyBox, são comumente encontradas em muitos produtos. Nossa pesquisa revelou uma grande variedade de versões antigas do BusyBox ainda em uso, muitas das quais contêm vulnerabilidades conhecidas. Isso destaca a importância de atualizar sistemas pra se proteger contra ameaças emergentes.
Perguntas de Pesquisa
Durante nosso projeto, tentamos responder às seguintes perguntas:
- Quão espalhadas estão as versões antigas do BusyBox e como podemos encontrar rapidamente vulnerabilidades nessas versões?
- Como podemos usar o poder dos LLMs pra melhorar o fuzz testing em software embutido?
Fuzz Testing e Suas Variantes
Fuzz testing pode ter diferentes formas. No fuzzing de caixa preta, o testador não conhece o funcionamento interno do software. Em contraste, o fuzzing de caixa branca envolve acesso completo ao código do programa, permitindo uma abordagem mais completa com técnicas como análise de contaminação.
O fuzzing de caixa cinza está em algum lugar entre os dois. Ele combina elementos de ambas as abordagens, usando conhecimento parcial do estado interno do programa. Nosso projeto utilizou principalmente fuzzing de caixa cinza com uma ferramenta chamada AFL++, que é projetada pra rastrear como a entrada afeta o código durante a execução.
Objetivos da Pesquisa
Nossos principais objetivos eram demonstrar o potencial de usar LLMs no fuzz testing e usar eficientemente dados de falhas de versões antigas do BusyBox pra avaliar versões mais novas.
Ao realizar fuzz testing em vários componentes do BusyBox usando as técnicas propostas, nossa meta era identificar vulnerabilidades e entender melhor como esses componentes poderiam ser explorados.
Configuração do Experimento
Começamos os testes buscando binários do BusyBox em produtos embutidos do mundo real. Esses binários foram coletados usando um conjunto de dados proprietário que continha várias amostras de software.
O teste em si envolveu duas etapas principais:
- Usando LLMs para geração de sementes iniciais: Geramos sementes para fuzz testing usando o GPT-4, um poderoso LLM.
- Aplicando a técnica de reutilização de falhas: Utilizamos dados de falhas de versões antigas do BusyBox pra testar a versão mais recente e procuramos por vulnerabilidades.
Resultados
Usando LLMs pra Gerar Sementes
Nossos testes mostraram um aumento claro no número de falhas detectadas ao usar sementes geradas por LLMs em comparação com sementes aleatórias. Isso demonstrou que os LLMs poderiam fornecer entradas mais relevantes e eficazes para fuzz testing.
Os resultados indicaram que poderíamos melhorar significativamente os resultados do fuzzing apenas usando melhores entradas iniciais, levando a uma análise mais profunda do comportamento do software.
Técnica de Reutilização de Falhas
Ao aplicar nossa técnica de reutilização de falhas na versão mais recente do BusyBox, identificamos várias falhas sem realizar um extenso fuzz testing. De um grande número de falhas coletadas de versões antigas, um número considerável causou falhas na versão mais recente.
Essa descoberta destaca a eficácia da reutilização de falhas em descobrir vulnerabilidades em novas versões de software rapidamente e com menos recursos.
Análise Manual de Falhas
Depois de completar nossos testes, fizemos uma análise manual das falhas que descobrimos. Esse processo envolveu categorizar as falhas e determinar as causas raiz. Usamos ferramentas como GDB pra depuração e Ghidra pra engenharia reversa.
Durante a análise, encontramos que várias falhas estavam relacionadas a problemas na biblioteca GLIBC, um componente essencial do qual o BusyBox depende. Esses problemas se assemelhavam a vulnerabilidades relatadas anteriormente, o que indica a persistência de tais bugs mesmo após atualizações de software.
As Implicações Mais Amplas dos Resultados
Nossa pesquisa não apenas descobriu vulnerabilidades específicas no BusyBox, mas também destacou a necessidade de um exame contínuo dos componentes de software embutido. A presença de versões desatualizadas de software representa riscos que podem comprometer a segurança dos dispositivos.
Implementando nossas técnicas propostas, desenvolvedores e profissionais de segurança podem detectar vulnerabilidades de forma mais eficiente, reforçando assim a cibersegurança como um todo.
Trabalhos Futuros
Essa pesquisa abre novas áreas para exploração. Há muitas aplicações potenciais tanto pra LLMs quanto pra técnicas de reutilização de falhas em testes de outros componentes de software, especialmente dentro de sistemas embutidos.
Estudos futuros poderiam focar na criação de LLMs treinados especificamente para formatos de entrada únicos em diferentes protocolos. Isso poderia aumentar muito a eficácia do fuzz testing em dispositivos que usam padrões menos comuns.
Além disso, a técnica de reutilização de falhas pode ser adaptada pra uma gama mais ampla de componentes de software, permitindo avaliações de segurança mais robustas em várias plataformas e dispositivos.
Conclusão
Nossa investigação sobre o BusyBox mostrou um grande potencial em melhorar as metodologias de teste de software. Ao usar LLMs pra gerar sementes de entrada iniciais e reutilizar dados de falhas de versões antigas, podemos identificar efetivamente vulnerabilidades em muitos dispositivos que rodam software desatualizado.
As crescentes preocupações com cibersegurança enfatizam a necessidade de melhoria contínua na forma como testamos e protegemos dispositivos embutidos. Nossos achados defendem uma maior conscientização e ação pra lidar com os desafios de segurança que as versões desatualizadas de software representam.
Em resumo, essa pesquisa destaca tanto a eficácia de novas técnicas em fuzz testing quanto a importância de manter o software atualizado pra evitar exploração.
Título: Fuzzing BusyBox: Leveraging LLM and Crash Reuse for Embedded Bug Unearthing
Resumo: BusyBox, an open-source software bundling over 300 essential Linux commands into a single executable, is ubiquitous in Linux-based embedded devices. Vulnerabilities in BusyBox can have far-reaching consequences, affecting a wide array of devices. This research, driven by the extensive use of BusyBox, delved into its analysis. The study revealed the prevalence of older BusyBox versions in real-world embedded products, prompting us to conduct fuzz testing on BusyBox. Fuzzing, a pivotal software testing method, aims to induce crashes that are subsequently scrutinized to uncover vulnerabilities. Within this study, we introduce two techniques to fortify software testing. The first technique enhances fuzzing by leveraging Large Language Models (LLM) to generate target-specific initial seeds. Our study showed a substantial increase in crashes when using LLM-generated initial seeds, highlighting the potential of LLM to efficiently tackle the typically labor-intensive task of generating target-specific initial seeds. The second technique involves repurposing previously acquired crash data from similar fuzzed targets before initiating fuzzing on a new target. This approach streamlines the time-consuming fuzz testing process by providing crash data directly to the new target before commencing fuzzing. We successfully identified crashes in the latest BusyBox target without conducting traditional fuzzing, emphasizing the effectiveness of LLM and crash reuse techniques in enhancing software testing and improving vulnerability detection in embedded systems. Additionally, manual triaging was performed to identify the nature of crashes in the latest BusyBox.
Autores: Asmita, Yaroslav Oliinyk, Michael Scott, Ryan Tsang, Chongzhou Fang, Houman Homayoun
Última atualização: 2024-03-06 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2403.03897
Fonte PDF: https://arxiv.org/pdf/2403.03897
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.
Ligações de referência
- https://www.ndss-symposium.org/wp-content/uploads/2017/09/towards-automated-dynamic-analysis-linux-based-embedded-firmware.pdf
- https://gtfobins.github.io/
- https://jfrog.com/blog/unboxing-BusyBox-14-new-vulnerabilities-uncovered-by-claroty-and-jfrog/
- https://github.com/asmitaj08/FuzzingBusyBox_LLM
- https://pages.cs.wisc.edu/~remzi/OSTEP/
- https://www.usenix.org/legacy/event/osdi02/tech/waldspurger/waldspurger.pdf
- https://github.com/rchtsang/ffxe
- https://anonymous.4open.science/r/ffxe-anon