
Управляемый фаззер на основе мутаций для межсетевых экранов веб-приложений на основе машинного обучения
Направляемый мутационный фаззер для ML-основанных межсетевых экранов веб-приложений (WAF), вдохновлённый AFL и основанный на FuzzingBook Андреаса Целлера и соавторов.
Принимая на вход SQL-инъекционный запрос, он пытается сгенерировать семантически инвариантный запрос, способный обойти целевой WAF. Этот инструмент можно использовать для оценки устойчивости вашего продукта, позволяя WAF-A-MoLE исследовать пространство решений и находить опасные «слепые зоны», не покрытые целевым классификатором.

WAF-A-MoLE берёт начальную нагрузку и помещает её в пул нагрузок Pool, который управляет очередью с приоритетом, упорядоченной по оценке уверенности WAF в каждой нагрузке.
На каждой итерации начало пула нагрузок передаётся Fuzzer, где оно случайным образом мутируется путём применения одного из доступных операторов мутации.
Операторы мутации все сохраняют семантику и используют высокую выразительную силу языка SQL (в этой версии — MySQL).
Ниже приведены операторы мутации, доступные в текущей версии WAF-A-MoLE.
| Мутация | Пример |
|---|---|
| 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 реализует методологию, представленную в статье «WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning». Препринт нашей статьи также доступен на arXiv.
Если вы хотите сослаться на нас, используйте следующую ссылку (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
Вы можете оценить устойчивость собственного WAF или опробовать WAF-A-MoLE на некоторых примерах классификаторов. В первом случае ознакомьтесь с классом Model. Ваша пользовательская модель должна реализовывать этот класс, чтобы WAF-A-MoLE мог её оценить. Мы уже предоставили обёртки для классификаторов sci-kit learn и keras, которые можно расширить для соответствия вашему этапу извлечения признаков (если таковой имеется).
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.
Мы предоставляем несколько предварительно обученных моделей, с которыми можно поиграть; они находятся в wafamole/models/custom/example_models. Использованные классификаторы перечислены в таблице ниже.
| Название классификатора | Алгоритм |
|---|---|
| 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 |
В дополнение к ML-основанным WAF, WAF-a-MoLE также поддерживает WAF на основе правил. В частности, предоставляется обёртка для WAF ModSecurity, оснащённого OWASP Core Rule Set (CRS), на основе проекта pymodsecurity.
Обход предварительно обученного классификатора WAF-Brain с использованием эквивалента admin' OR 1=1#.
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5 "admin' OR 1=1#"
Обход предварительно обученного классификатора ML-Based-WAF SVM с использованием эквивалента admin' OR 1=1#.
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump "admin' OR 1=1#"
Обход предварительно обученного классификатора ML-Based-WAF SVM с использованием эквивалента admin' OR 1=1#. Обратите внимание: SQLiV5 — это набор данных, полученный из Kaggle и дополненный серией запросов, сгенерированных самим WAF-A-MoLE, в качестве доказательства концепции того, что запросы WAF-A-MoLE могут повысить устойчивость WAF при повторном обучении. Используйте mlbasedwaf_svc_sqliv3.dump для обхода WAF, обученного на оригинальном наборе данных Kaggle (SQLiV3).
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc_sqliv5.dump "admin' OR 1=1#"