Snapchange, a ferramenta fuzzing de código aberto da AWS

Amazon Web Services, lançou uma nova ferramenta de fuzzing baseada em KVM de código aberto

Foi divulgada a notícia de queA Amazon lançou uma nova ferramenta fuzzing chamada Snapchange, que permite verificar arquivos executáveis ​​sem modificá-los e sem a presença do código-fonte do aplicativo. Este é um movimento projetado em parte para atender às preocupações sobre a segurança da cadeia de suprimentos de software.

No post da Amazon é mencionado que, O Snapchange começou como um experimento da equipe de pesquisa de segurança de código aberto do AWS Find and Fix (F2) para explorar o potencial de uso do KVM para habilitar a fuzzing de instantâneos.

Hoje temos o prazer de anunciar o Snapchange, um novo projeto de código aberto para tornar a fuzzing baseada em instantâneos muito mais fácil. O Snapchange permite o fuzzing de um binário de destino com modificações mínimas, fornecendo informações úteis que ajudam no fuzzing.

O Snapchange é uma estrutura Rust para criar fuzzers que reproduzem instantâneos da memória física para aumentar a eficiência e reduzir a complexidade no fuzzing de muitos tipos de alvos. O Snapchange usa os recursos do gerenciador de máquina virtual integrado do kernel do Linux, conhecido como Kernel Virtual Machine ou KVM. 

Sobre o Snapchange

É mencionado que, Snapchange permite carregar um despejo de memória física com código executável derivado e organizar, usando o hipervisor KVM, uma execução cíclica do código presente no lixão, iterando sobre várias combinações de dados de entrada, rastreando falhas ou anomalias emergentes e reiniciando a verificação após a próxima iteração, sempre que o segmento de memória e os registradores da CPU forem restaurados ao estado original.

Uma iteração redefine e reinicia após um final anormal, um tempo de espera ou a ocorrência de um determinado evento. Os dados de entrada são substituídos diretamente na memória e para economizar recursos durante a inicialização para o estado inicial da memória, após realizar a próxima iteração, determina-se quais dados estão na memória e foram alterados.

O despejo de memória inicial é criado salvando um instantâneo da máquina virtual em que o ambiente com o aplicativo em teste é executado, rodando em VirtualBox ou QEMU A lógica de substituição dos dados de entrada é determinada pela criação de scripts especiais, e a posição inicial da execução cíclica é definida pela configuração de um ponto de interrupção no depurador.

Por exemplo, se for necessário verificar o processamento multiestado de uma solicitação de rede, o pesquisador inicia o aplicativo no sistema convidado no VirtualBox ou QEMU, no depurador encontra o início da execução do procedimento de processamento da solicitação (por exemplo , após chamar a função recv), coloca um breakpoint nele e determina a área de memória na qual o pacote de rede recebido é carregado. Depois disso, um instantâneo do sistema convidado é criado e carregado no Snapchange.

Para verificação, é escrito um script que grava dados durante a enumeração diretamente no buffer. do pacote de rede, que permite simular o processamento de pacotes de rede reais. O Snapchange continua de onde parou, sempre alterando o conteúdo dos dados no buffer e redefinindo o estado da memória para seu estado original.

Várias estratégias são suportadas para gerar dados de entrada. Vários ambientes vinculados a diferentes núcleos de CPU podem ser enumerados com execução paralela. Além de detectar falhas durante a execução do código, ele também suporta a coleta de métricas de desempenho, o acúmulo de estatísticas de cobertura para avaliar a cobertura do código executável e o rastreamento passo a passo do código executável.

Para os interessado no projeto, você deve saber que o código do projeto é escrito em Rust e é distribuído sob a licença Apache 2.0 via GitHub.

O Snapchange funciona no Linux, mas requer acesso direto aos primitivos KVM subjacentes. Portanto, ele oferece suporte a tipos de instância EC2 bare metal, que são executados sem um hipervisor, mas não a instâncias EC2 virtualizadas.

Finalmente, se você estiver interessado em aprender mais sobre isso, consulte o anúncio original no link a seguir.