
Plug and Fuzz Universal
UFuzz, ou Universal Plug and Fuzz, é uma ferramenta automática de fuzzing UPnP. Ela enumerará todos os endpoints UPnP na rede, encontrará os serviços disponíveis e aplicará fuzzing neles. Ela também tem a capacidade de aplicar fuzzing em HTTP usando logs de proxy do Burp.
Ela foi projetada para aplicar fuzzing em sistemas embarcados e, por isso, é apenas single-threaded. Ela também possui um conjunto de payloads muito limitado, pois o fuzzing nesses sistemas pode ser lento. Certos payloads, como SQLi cego e injeção de comandos, dependem de atrasos para indicar se a injeção foi bem-sucedida e podem gerar falsos positivos. Outros payloads, como format strings e buffer overflows, são projetados para usar um monitor personalizado para detectar crashes.
Módulos de configuração de exemplo e módulos de monitoramento estão incluídos. Monitores personalizados permitem o uso de telemetria do sistema alvo para detectar crashes. Módulos de exemplo foram fornecidos para detecção de crashes baseada em telnet e em console serial.
Observe que o código é bastante tosco nas bordas. "Hacky" seria a melhor forma de descrevê-lo. Infelizmente, este projeto foi escrito rapidamente e nunca foi devidamente arquitetado. Estarei trabalhando para resolver isso nos próximos meses.
Por fim, parte do código foi emprestada de outros projetos:
O código UPnP é baseado em grande parte no código miranda de Craig Heffner. Craig tem sido uma inspiração para mim e recomendo fortemente que você leia o blog dele /dev/ttys0.
Parte do código de geração do conjunto de testes é baseada no projeto Metafuzz de Ben Nagy.
O código de parsing de socket e HTTP é baseado em Excon.
O UFuzz foi testado com Ruby 1.9.3 e Ruby 2.1.1. Você pode instalar todas as gems necessárias executando bundle install no diretório do UFuzz.
Execute o ufuzz com a opção -h para ver todas as opções de linha de comando. Quando a ferramenta é executada, os logs são gravados no diretório de logs.
Para fuzzing básico de todos os dispositivos UPnP na rede, basta executar ufuzz --upnp. Você provavelmente também vai querer usar a opção -v 4 para ver os resumos das requisições e respostas.