O que é fuzzing?

o que é fuzzing

Introdução: O que é Fuzzing?

Em 2014, hackers chineses hackeado nos Sistemas Comunitários de Saúde, uma rede hospitalar americana com fins lucrativos, e roubou dados de 4.5 milhões de pacientes. Os hackers exploraram um bug chamado Heartbleed que foi descoberto na biblioteca de criptografia OpenSSL alguns meses antes do hack.

Heartbleed é um exemplo de uma classe de vetores de ataque que permitem que invasores acessem um alvo enviando solicitações malformadas válidas o suficiente para passar nas verificações preliminares. Embora os profissionais que trabalham em diferentes partes de um aplicativo façam o possível para garantir sua segurança, é impossível pensar em todos os casos extremos que podem interromper um aplicativo ou torná-lo vulnerável durante o desenvolvimento.

É aqui que entra o 'fuzzing'.

O que é um ataque Fuzzing?

Fuzzing, teste fuzzing ou um ataque fuzzing, é uma técnica de teste de software automatizada usada para alimentar dados aleatórios, inesperados ou inválidos (chamados fuzz) em um programa. O programa é monitorado quanto a comportamentos incomuns ou inesperados, como estouros de buffer, travamentos, vazamentos de memória, travamentos de encadeamento e violações de acesso de leitura/gravação. A ferramenta fuzzing ou fuzzer é então usada para descobrir a causa do comportamento incomum.

Fuzzing é baseado na suposição de que todos os sistemas contêm bugs esperando para serem descobertos e podem ter tempo e recursos suficientes para fazê-lo. A maioria dos sistemas tem analisadores muito bons ou validação de entrada, evitando cibercriminosos de explorar quaisquer bugs hipotéticos em um programa. No entanto, como mencionamos acima, é difícil cobrir todos os casos extremos durante o desenvolvimento.

Fuzzers são usados ​​em programas que recebem entrada estruturada ou possuem algum tipo de limite de confiança. Por exemplo, um programa que aceita arquivos PDF teria alguma validação para garantir que o arquivo tenha uma extensão .pdf e um analisador para processar o arquivo PDF.

Um fuzzer eficaz pode gerar entradas válidas o suficiente para ultrapassar esses limites, mas inválidas o suficiente para causar um comportamento inesperado mais adiante no programa. Isso é importante porque apenas ser capaz de passar pelas validações não significa muito se nenhum dano adicional for causado.

Os Fuzzers descobrem vetores de ataque muito semelhantes e incluindo os tipos de injeção de SQL, script entre sites, estouro de buffer e ataques de negação de serviço. Todos esses ataques são resultado da alimentação de dados inesperados, inválidos ou aleatórios em um sistema. 

 

Tipos de Fuzzers

Fuzzers podem ser classificados com base em algumas características:

  1. alvos de ataque
  2. Método de criação Fuzz
  3. Consciência da estrutura de entrada
  4. Conhecimento da estrutura do programa

1. Alvos de Ataque

Essa classificação é baseada no tipo de plataforma que o fuzzer está sendo usado para testar. Fuzzers são comumente usados ​​com protocolos de rede e aplicativos de software. Cada plataforma recebe um tipo específico de entrada e, portanto, requer diferentes tipos de fuzzers.

Por exemplo, ao lidar com aplicativos, todas as tentativas de fuzzing ocorrem nos vários canais de entrada do aplicativo, como a interface do usuário, terminal de linha de comando, formulários/entradas de texto e uploads de arquivos. Portanto, todas as entradas geradas pelo fuzzer devem corresponder a esses canais.

Fuzzers lidando com protocolos de comunicação precisam lidar com pacotes. Os fuzzers direcionados a essa plataforma podem gerar pacotes forjados ou até mesmo atuar como proxies para modificar pacotes interceptados e reproduzi-los.

2. Método de Criação Fuzz

Fuzzers também podem ser classificados com base em como eles criam dados para fuzz. Historicamente, os fuzzers criaram o fuzz gerando dados aleatórios do zero. Foi assim que o professor Barton Miller, o iniciador dessa técnica, fez inicialmente. Este tipo de fuzzer é chamado de fuzzer baseado em geração.

No entanto, embora teoricamente seja possível gerar dados que contornem um limite de confiança, isso levaria tempo e recursos consideráveis. Portanto, esse método geralmente é usado para sistemas com estruturas de entrada simples.

Uma solução para esse problema é modificar os dados conhecidos como válidos para gerar dados válidos o suficiente para ultrapassar um limite de confiança, mas inválidos o suficiente para causar problemas. Um bom exemplo disso é um Difusor de DNS que pega um nome de domínio e gera uma grande lista de nomes de domínio para detectar domínios potencialmente maliciosos direcionados ao proprietário do domínio especificado.

Essa abordagem é mais inteligente que a anterior e restringe significativamente as permutações possíveis. Fuzzers que usam este método são chamados fuzzers baseados em mutação

Existe um terceiro método mais recente que faz uso de algoritmos genéticos para convergir para os dados fuzz ideais necessários para erradicar as vulnerabilidades. Ele trabalha refinando continuamente seus dados fuzz, levando em consideração o desempenho de cada dado de teste quando inserido em um programa. 

Os conjuntos de dados com pior desempenho são removidos do pool de dados, enquanto os melhores são modificados e/ou combinados. A nova geração de dados é então usada para teste de fuzz novamente. Esses fuzzers são chamados de fuzzers baseados em mutações evolutivas.

3. Consciência da estrutura de entrada

Essa classificação é baseada em se um fuzzer está ciente e usa ativamente a estrutura de entrada de um programa na geração de dados fuzz. UMA fuzzer burro (um fuzzer que desconhece a estrutura de entrada de um programa) gera fuzz de uma forma quase aleatória. Isso pode incluir fuzzers baseados em geração e mutação. 


Se um fuzzer for fornecido com o modelo de entrada de um programa, o fuzzer pode então tentar gerar ou modificar dados de forma que correspondam ao modelo de entrada fornecido. Essa abordagem reduz ainda mais a quantidade de recursos gastos na geração de dados inválidos. Esse fuzzer é chamado de fuzzer inteligente.

4. Conhecimento da estrutura do programa

Os fuzzers também podem ser classificados com base no fato de estarem cientes do funcionamento interno do programa que estão fuzzing e usar esse conhecimento para ajudar na geração de dados fuzz. Quando os fuzzers são usados ​​para testar um programa sem entender sua estrutura interna, isso é chamado de teste de caixa preta. 

Os dados fuzz gerados durante o teste de caixa preta geralmente são aleatórios, a menos que o fuzzer seja um fuzzer baseado em mutação evolutiva, onde ele 'aprende' monitorando o efeito de seu fuzzing e usando isso INFORMAÇÕES para refinar seu conjunto de dados fuzz.

O teste de caixa branca, por outro lado, usa um modelo da estrutura interna do programa para gerar dados difusos. Essa abordagem permite que um fuzzer chegue a locais críticos em um programa e o teste. 

Ferramentas Populares de Fuzzing

Há muitos fuzzing ferramentas lá fora usado por testadores de caneta. Alguns dos mais populares são:

Limitações do Fuzzing

Embora Fuzzing seja uma técnica de teste de caneta realmente útil, ela não é isenta de falhas. Algumas delas são:

  • Leva muito tempo para ser executado.
  • Falhas e outros comportamentos inesperados encontrados durante o teste de caixa preta de um programa podem ser difíceis, se não impossíveis de analisar ou depurar.
  • A criação de modelos de mutação para fuzzers inteligentes baseados em mutação pode ser demorada. Às vezes, pode nem ser possível devido ao modelo de entrada ser proprietário ou desconhecido.

 

No entanto, é uma ferramenta bastante útil e necessária para quem quer descobrir bugs antes dos bandidos.

Conclusão

Fuzzing é uma poderosa técnica de teste de caneta que pode ser usada para descobrir vulnerabilidades em software. Existem muitos tipos diferentes de fuzzers, e novos fuzzers estão sendo desenvolvidos o tempo todo. Embora o fuzzing seja uma ferramenta incrivelmente útil, ele tem suas limitações. Por exemplo, fuzzers só podem encontrar tantas vulnerabilidades e podem consumir muitos recursos. No entanto, se você quiser experimentar esta incrível técnica por conta própria, temos uma API DNS Fuzzer gratuita que você pode usar em nossa plataforma. 

Então, o que você está esperando? 

Comece fuzzing hoje!