Um guia completo para testes de fuzz
Publicados: 2021-05-17O teste de segurança é uma das etapas mais vitais para garantir que seu software esteja pronto para o lançamento oficial, seja para fins comerciais ou para uso comercial. Ele permite que você detecte quaisquer vulnerabilidades que seu software possa ter e desenvolva uma contramedida para elas se um hacker tirar vantagem de tal falha.
Se você estiver interessado em testes de segurança, você pode aprender os fatos aqui agora, mas uma coisa que você deve saber é que existem todos os tipos de maneiras de realizar testes de segurança, como avaliação de risco, teste de penetração e verificação de vulnerabilidade. E se você já está um pouco familiarizado com testes de segurança, provavelmente já ouviu falar do termo 'teste fuzz'.
O teste fuzz é uma técnica de teste relativamente comum na indústria hoje em dia, especialmente porque gigantes corporativos como Microsoft e Google o usam há mais de uma década. Mas o surpreendente é que, apesar de ser uma técnica padrão, poucas pessoas a conhecem. Dito isso, este guia tem como objetivo explicar o que é o teste fuzz, começando pela sua definição.
O que é teste de fuzz?
O teste fuzz, ou o que outros chamam de 'fuzzing', envolve a inserção de dados inválidos ou aleatórios em um programa para detectar quaisquer vulnerabilidades que possam levar a erros exploráveis. Essa entrada pode ser na forma de um arquivo ou uma entrada direta do usuário. Assim, por exemplo, se você estiver construindo algum tipo de programa de cálculo, normalmente precisará inserir números ou operações matemáticas. Mas se você estiver realizando testes de fuzz, terá que inserir uma entrada inválida, como letras ou até mesmo caracteres especiais.
Se isso travar o programa ou causar qualquer outro tipo de erro, o programador assume que há uma vulnerabilidade e, portanto, pode trabalhar na modificação da codificação na esperança de corrigir o problema. À primeira vista, você pensaria que o teste fuzz é o mesmo que outras técnicas, como varredura de vulnerabilidade ou teste de penetração, mas há uma razão para sua popularidade.
Por que as empresas usam testes fuzz?
Não existe uma solução única para todos quando se trata de testes de segurança. Cada método pode detectar problemas que outros não podem; alguns exigem custos operacionais mais baixos, enquanto outros são mais fáceis de executar. Assim como todas as técnicas de teste de segurança, o teste fuzz é único em suas próprias maneiras. Abaixo estão algumas vantagens que levam as empresas a usar o teste fuzz.
- Simplicidade: você já sabe como funciona o teste fuzz—é uma questão de inserir entradas inválidas em um programa. A simplicidade do processo em geral serve como uma grande vantagem para indivíduos ou organizações com falta de habilidades e experiência em termos de testes de segurança.
- Automação: O teste de segurança pode ser uma etapa crucial no desenvolvimento de software e aplicativos, mas muitas vezes há outras coisas a fazer além de testar constantemente o programa. No entanto, é uma história diferente com testes de fuzz, pois você pode automatizar todo o processo usando fuzzers.
Fuzzers são ferramentas responsáveis por inserir dados no programa de forma automática se for dado o comando e as condições necessárias. O fato de o teste fuzz permitir a automação de negócios o torna uma técnica de teste ideal para as empresas.
- Conveniente: Normalmente, ao testar, é preciso usar o máximo de ferramentas possível para reduzir a probabilidade de bugs e maximizar a segurança do programa. Como o teste fuzz é automatizado e direto, é uma maneira conveniente de aumentar a segurança do software.
Fuzzing, em geral, é simples e fácil de implementar, mas vale a pena notar que existem todos os tipos de abordagens para testes de fuzz. Dependendo do tipo que você usa, a dificuldade e a complexidade do processo de teste podem variar. Nesse sentido, este pode ser um bom momento para falar sobre os diferentes tipos de testes de fuzz.
Diferentes abordagens para testes de fuzz
Embora existam vários tipos de testes de fuzz, eles são semelhantes entre si, exceto pelo fato de gerarem entrada de maneira diferente. Independentemente disso, existem quatro abordagens para testes de fuzz:
- Dumb Fuzzing: Quando alguém quer gerar entrada de forma completamente aleatória, eles normalmente usam um burro fuzzer. Um fuzzer burro é uma ferramenta que produz entrada sem conhecimento prévio ou inteligência do programa, daí o nome.
Por exemplo, se você estiver construindo um programa de verificação gramatical, um fuzzer burro pode acabar gerando uma imagem, o que está longe do que o programa espera. Dumb fuzzing é a abordagem mais fácil para o teste de fuzz.
- Fuzzing inteligente: do outro lado da moeda está o fuzzing inteligente. Ao contrário do fuzzing burro, o fuzzing inteligente gera entrada sabendo o que o programa espera receber. Além disso, um fuzzer inteligente não gerará entradas que inevitavelmente travarão o programa. Em vez disso, ele apresentará uma entrada que pode causar um comportamento inesperado.
Assim, no exemplo anterior, um fuzzer inteligente pode gerar caracteres especiais, mas nunca uma imagem ou qualquer outra entrada inadequada. Embora fuzzers inteligentes sejam mais difíceis de implementar do que fuzzers burros, eles são mais precisos na maioria das vezes.
- Fuzzing mutacional: Fuzzing mutacional envolve a geração de entrada modificando ou, mais especificamente, 'mutando' uma entrada válida existente. Em nosso exemplo com o programa calculadora, um fuzzer mutacional pode escolher uma entrada válida existente.
Suponha que a entrada selecionada seja '10+9.' Um fuzzer mutacional tentará modificar essa entrada adicionando, removendo ou alterando uma parte dessa entrada, como aumentar o valor e transformá-lo em '180+129' ou alterar a operação para resultar em '10/9'.
- Fuzzing geracional: Por fim, o fuzzing geracional gera entrada do zero, que é o oposto do fuzzing mutacional que gera entrada a partir dos existentes. Como não há referências, os fuzzers geracionais são muito mais difíceis de implementar do que os fuzzers mutacionais, mas podem levar a mais dados para o testador.
O que torna o teste fuzz um pouco mais interessante do que outras técnicas é que você pode combinar diferentes tipos para aprimorar a ferramenta de teste. Por exemplo, você pode criar um fuzzer de mutação inteligente ou um fuzzer de geração burro, dependendo do que seu programa precisa. Talvez as inúmeras combinações que você pode realizar com o teste fuzz é outra razão pela qual as empresas preferem o teste fuzz a outros métodos.
Empacotando
Depois de conhecer mais sobre o teste fuzz, é fácil ver por que ele se tornou tão popular quanto agora. No entanto, também vale a pena notar que, assim como qualquer outra técnica, o teste de fuzz tem algumas desvantagens. Assim, é essencial determinar se o teste fuzz pode fazer mais bem do que mal ao seu aplicativo ou software. Como dito anteriormente, não existe uma solução única para todos os testes de segurança de software, e o teste fuzz certamente não será essa solução.
Tem alguma opinião sobre isso? Deixe-nos saber abaixo nos comentários ou leve a discussão para o nosso Twitter ou Facebook.