
Ein geführter mutationsbasierter Fuzzer für ML-basierte Web Application Firewalls
Ein geführter mutationsbasierter Fuzzer für ML-basierte Web Application Firewalls, inspiriert von AFL und basierend auf dem FuzzingBook von Andreas Zeller et al.
Gegeben eine SQL-Injection-Abfrage versucht es, eine semantisch invariante Abfrage zu erzeugen, die in der Lage ist, die Ziel-WAF zu umgehen. Sie können dieses Tool verwenden, um die Robustheit Ihres Produkts zu bewerten, indem WAF-A-MoLE den Lösungsraum erkundet, um gefährliche „blinde Flecken“ zu finden, die vom Zielklassifikator nicht abgedeckt werden.

WAF-A-MoLE nimmt eine initiale Payload und fügt sie in den Pool von Payloads ein, der eine Prioritätswarteschlange verwaltet, geordnet nach dem WAF-Konfidenzwert für jede Payload.
Während jeder Iteration wird der Kopf des Payload-Pools an den Fuzzer übergeben, wo er zufällig mutiert wird, indem einer der verfügbaren Mutationsoperatoren angewendet wird.
Mutationsoperatoren sind alle semantikerhaltend und nutzen die hohe Ausdruckskraft der SQL-Sprache (in dieser Version MySQL).
Nachfolgend sind die Mutationsoperatoren aufgeführt, die in der aktuellen Version von WAF-A-MoLE verfügbar sind.
| Mutation | Beispiel |
|---|---|
| Case Swapping | admin' OR 1=1# ⇒ admin' oR 1=1# |
| Whitespace Substitution | admin' OR 1=1# ⇒ admin'\t\rOR\n1=1# |
| Comment Injection | admin' OR 1=1# ⇒ admin'/**/OR 1=1# |
| Comment Rewriting | admin'/**/OR 1=1# ⇒ admin'/*xyz*/OR 1=1#abc |
| Integer Encoding | admin' OR 1=1# ⇒ admin' OR 0x1=(SELECT 1)# |
| Operator Swapping | admin' OR 1=1# ⇒ admin' OR 1 LIKE 1# |
| Logical Invariant | admin' OR 1=1# ⇒ admin' OR 1=1 AND 0<1# |
| Number Shuffling | admin' OR 1=1# ⇒ admin' OR 2=2# |
WAF-A-MoLE implementiert die in „WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning“ vorgestellte Methodik. Ein Preprint unseres Artikels ist auch auf arXiv verfügbar.
Wenn Sie uns zitieren möchten, verwenden Sie bitte folgende Referenz (BibTeX):
@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}
}
pip install -r requirements.txt
Sie können die Robustheit Ihrer eigenen WAF bewerten oder WAF-A-MoLE gegen einige Beispielklassifikatoren testen. Im ersten Fall werfen Sie einen Blick auf die Model-Klasse. Ihr benutzerdefiniertes Modell muss diese Klasse implementieren, um von WAF-A-MoLE bewertet zu werden. Wir stellen bereits Wrapper für sci-kit learn und keras Klassifikatoren zur Verfügung, die erweitert werden können, um Ihre Merkmalsextraktionsphase (falls vorhanden) anzupassen.
wafamole --help
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
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.
Wir stellen einige vortrainierte Modelle zur Verfügung, mit denen Sie experimentieren können, die sich unter wafamole/models/custom/example_models befinden. Die von uns verwendeten Klassifikatoren sind in der folgenden Tabelle aufgeführt.
| Klassifikatorname | Algorithmus |
|---|---|
| WafBrain | Recurrent Neural Network |
| ML-Based-WAF | Non-Linear SVM |
| ML-Based-WAF | Stochastic Gradient Descent |
| ML-Based-WAF | AdaBoost |
| Token-based | Naive Bayes |
| Token-based | Random Forest |
| Token-based | Linear SVM |
| Token-based | Gaussian SVM |
| SQLiGoT - Directed Proportional | Gaussian SVM |
| SQLiGoT - Directed Unproportional | Gaussian SVM |
| SQLiGoT - Undirected Proportional | Gaussian SVM |
| SQLiGoT - Undirected Unproportional | Gaussian SVM |
Zusätzlich zu ML-basierten WAFs unterstützt WAF-a-MoLE auch regelbasierte WAFs. Insbesondere bietet es einen Wrapper für die ModSecurity WAF mit dem OWASP Core Rule Set (CRS), basierend auf dem pymodsecurity-Projekt.
Umgehen Sie den vortrainierten WAF-Brain-Klassifikator mit einem Äquivalent von admin' OR 1=1#.
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5 "admin' OR 1=1#"
Umgehen Sie den vortrainierten ML-Based-WAF SVM-Klassifikator mit einem Äquivalent von admin' OR 1=1#.
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump "admin' OR 1=1#"
Umgehen Sie den vortrainierten ML-Based-WAF SVM-Klassifikator mit einem Äquivalent von admin' OR 1=1#. Beachten Sie, dass SQLiV5 ein von Kaggle stammender Datensatz ist, der um eine Reihe von durch WAF-A-MoLE selbst generierten Abfragen erweitert wurde, als Proof of Concept, dass WAF-A-MoLE-Abfragen die Robustheit einer WAF durch erneutes Training verbessern können. Verwenden Sie mlbasedwaf_svc_sqliv3.dump, um die mit dem ursprünglichen Kaggle-Datensatz (SQLiV3) trainierte WAF zu umgehen.