
RESTler é a primeira ferramenta de fuzzing de API REST stateful para testar automaticamente serviços em nuvem através de suas APIs REST e encontrar bugs de segurança e confiabilidade nesses serviços.
RESTler é a primeira ferramenta de fuzzing de API REST stateful para testar automaticamente serviços de nuvem através de suas APIs REST e encontrar bugs de segurança e confiabilidade nesses serviços. Para um determinado serviço de nuvem com uma especificação OpenAPI (antigo Swagger), o RESTler analisa toda a sua especificação e, em seguida, gera e executa testes que exercitam o serviço através de sua API REST.
O RESTler infere inteligentemente dependências produtor-consumidor entre tipos de requisição a partir da definição OpenAPI. Durante o teste, ele verifica classes específicas de bugs e aprende dinamicamente como o serviço se comporta a partir de respostas anteriores do serviço. Essa inteligência permite que o RESTler explore estados de serviço mais profundos, acessíveis apenas através de sequências de requisição específicas, e encontre mais bugs.
O RESTler é descrito nestes artigos de pesquisa revisados por pares:
Se você usa o RESTler em sua pesquisa, por favor cite o artigo (padrão) ICSE'2019 (BibTeX).
O RESTler inclui múltiplas estratégias de geração de testes. Para obter uma visão comparativa abrangente em relação a (i) eficiência (isto é, quão rapidamente o RESTler pode encontrar falhas) e (ii) eficácia (isto é, quantas falhas o RESTler pode encontrar em um determinado período de tempo), recomendamos comparar contra todos os fuzzing_mode(s) documentados, porque cada um oferece um trade-off diferente entre amplitude e profundidade da exploração do espaço de estados. Também recomendamos executar o modo test antes de qualquer fuzzing, conforme descrito abaixo, para descobrir e corrigir problemas de configuração (por exemplo, adicionar valores de parâmetros pré-requisitos necessários ao dicionário) antes do fuzzing.
O RESTler foi criado na Microsoft Research e ainda está em desenvolvimento ativo.
Para uma visão geral e demonstração de como começar, veja Webinar - Fuzzing para Melhorar a Segurança e Confiabilidade de Serviços de Nuvem.

O RESTler foi projetado para rodar em máquinas de 64 bits com Windows ou Linux. O suporte experimental para macOS também está habilitado.
Na raiz deste repositório, execute
docker build -t restler .
O container docker resultante terá o RESTler disponível no diretório /RESTler/restler com o binário principal Restler.
Você pode então usar esta imagem docker como base para adicionar o aplicativo sob teste para executar fuzzing dentro de containers docker isolados.
Pré-requisitos: Instale Python 3.12.8 e .NET 8.0, para seu sistema operacional apropriado.
Crie um diretório onde você gostaria de colocar os binários do RESTler:
mkdir restler_bin
Mude para o diretório raiz do repositório e execute o seguinte script Python:
python ./build-restler.py --dest_dir <full path to restler_bin above>
Nota: se você obtiver o erro nuget NU1403 ao construir, uma solução rápida é limpar seu cache com este comando
dotnet nuget locals all --clear
O RESTler é executado em 4 modos principais (em ordem):
Para uma introdução rápida com exemplos simples, veja este Tutorial.
Para experimentar rapidamente o RESTler em sua API, veja Início Rápido.
Atualmente existem duas categorias de bugs encontrados pelo RESTler.
500 ("Erro Interno do Servidor") é recebida, um bug é reportado.Quando um bug é encontrado, o RESTler reporta bugs triados em buckets de bugs e fornece um log de replay que pode ser usado para reproduzir o bug (veja Replay).
Para dicas sobre como usar o RESTler efetivamente, veja Melhores Práticas e Melhorando a Cobertura da API.
Veja também estas Perguntas Frequentes.
Se você está interessado em usar o RESTler em escala como parte do seu pipeline CI/CD, confira o serviço auto-hospedado de Teste de Fuzz de API REST.