Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
WAF-A-MoLE — Управляемый фаззер на основе мутаций для межсетевых экранов веб-приложений на основе машинного обучения | Kitploit
Инструменты/GitHubGitHub/avalz/waf-a-mole
Обход WAFВеб-безопасностьФаззингМашинное ОбучениеСостязательная Атака
GitHubavalz/waf-a-mole

WAF-A-MoLE

Управляемый фаззер на основе мутаций для межсетевых экранов веб-приложений на основе машинного обучения

Репозиторий
205332 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

WAF-A-MoLE

Направляемый мутационный фаззер для ML-основанных межсетевых экранов веб-приложений (WAF), вдохновлённый AFL и основанный на FuzzingBook Андреаса Целлера и соавторов.

Принимая на вход SQL-инъекционный запрос, он пытается сгенерировать семантически инвариантный запрос, способный обойти целевой WAF. Этот инструмент можно использовать для оценки устойчивости вашего продукта, позволяя WAF-A-MoLE исследовать пространство решений и находить опасные «слепые зоны», не покрытые целевым классификатором.

Python Version License Documentation Status

Архитектура

WAF-A-MoLE Architecture

WAF-A-MoLE берёт начальную нагрузку и помещает её в пул нагрузок Pool, который управляет очередью с приоритетом, упорядоченной по оценке уверенности WAF в каждой нагрузке.

На каждой итерации начало пула нагрузок передаётся Fuzzer, где оно случайным образом мутируется путём применения одного из доступных операторов мутации.

Операторы мутации

Операторы мутации все сохраняют семантику и используют высокую выразительную силу языка SQL (в этой версии — MySQL).

Ниже приведены операторы мутации, доступные в текущей версии WAF-A-MoLE.

Как цитировать

WAF-A-MoLE реализует методологию, представленную в статье «WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning». Препринт нашей статьи также доступен на arXiv.

Если вы хотите сослаться на нас, используйте следующую ссылку (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}
}

Запуск WAF-A-MoLE

Предварительные требования

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

Установка

pip install -r requirements.txt

Пример использования

Вы можете оценить устойчивость собственного WAF или опробовать WAF-A-MoLE на некоторых примерах классификаторов. В первом случае ознакомьтесь с классом Model. Ваша пользовательская модель должна реализовывать этот класс, чтобы WAF-A-MoLE мог её оценить. Мы уже предоставили обёртки для классификаторов sci-kit learn и keras, которые можно расширить для соответствия вашему этапу извлечения признаков (если таковой имеется).

Справка

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.

Обход примеров моделей

Мы предоставляем несколько предварительно обученных моделей, с которыми можно поиграть; они находятся в wafamole/models/custom/example_models. Использованные классификаторы перечислены в таблице ниже.

В дополнение к ML-основанным WAF, WAF-a-MoLE также поддерживает WAF на основе правил. В частности, предоставляется обёртка для WAF ModSecurity, оснащённого OWASP Core Rule Set (CRS), на основе проекта pymodsecurity.

WAF-BRAIN - Recurrent Neural Newtork

Обход предварительно обученного классификатора WAF-Brain с использованием эквивалента 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 - Non-Linear SVM (с оригинальным набором данных WAF-A-MoLE)

Обход предварительно обученного классификатора ML-Based-WAF SVM с использованием эквивалента 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 - Non-Linear SVM (с наборами данных SQLiV5/SQLiV3)

Обход предварительно обученного классификатора ML-Based-WAF SVM с использованием эквивалента admin' OR 1=1#. Обратите внимание: SQLiV5 — это набор данных, полученный из Kaggle и дополненный серией запросов, сгенерированных самим WAF-A-MoLE, в качестве доказательства концепции того, что запросы WAF-A-MoLE могут повысить устойчивость WAF при повторном обучении. Используйте mlbasedwaf_svc_sqliv3.dump для обхода WAF, обученного на оригинальном наборе данных 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 - Stochastic Gradient Descent (SGD)

Обход предварительно обученного классификатора ML-Based-WAF SGD с использованием эквивалента 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

Обход предварительно обученного классификатора ML-Based-WAF AdaBoost с использованием эквивалента admin' OR 1=1# (занимает больше времени, чем другие модели, около 2–5 минут работы).

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

Token-based - Naive Bayes

Обход предварительно обученного классификатора Token-based Naive Bayes с использованием эквивалента admin' OR 1=1#.

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

Token-based - Random Forest

Обход предварительно обученного классификатора Token-based Random Forest с использованием эквивалента admin' OR 1=1#.

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

Token-based - Linear SVM

Обход предварительно обученного классификатора Token-based Linear SVM с использованием эквивалента admin' OR 1=1#.

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

Token-based - Gaussian SVM

Обход предварительно обученного классификатора Token-based Gaussian SVM с использованием эквивалента 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

Обход предварительно обученного классификатора SQLiGOT с использованием эквивалента admin' OR 1=1#. Используйте DP, UP, DU или UU для (соответственно) Directed Proportional, Undirected Proportional, Directed Unproportional и Undirected Unproportional.

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

OWASP ModSecurity CRS - Rule-based WAF

Обход OWASP ModSecurity CRS с использованием эквивалента admin' OR 1=1#. Пользователь также должен указать Уровень паранойи, а также путь к правилам CRS (например, /etc/coreruleset).

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

ПЕРЕД ЗАПУСКОМ ОЦЕНКИ НА SQLiGoT

Эти классификаторы более устойчивы, чем остальные, так как этап извлечения признаков порождает векторы более сложной структуры, и все предварительно обученные классификаторы были сильно регуляризированы. Для некоторых вариантов может потребоваться несколько часов, чтобы получить нагрузку, обеспечивающую обход (см. раздел «Бенчмарк»).

Примечание о новых моделях ML-Based-WAF

Недавно были добавлены некоторые модели, основанные на слегка модифицированной версии ML-Based-WAF от vladan-stojnic, из расширения WAF-A-MoLE под названием wafamole++ от nidnogg. Тестирование модели AdaBoost может занять больше времени, чем обычно (обычно от 2 до 5 минут).

Существуют варианты, обученные на наборе данных SQLiV5.json, в то время как большинство по умолчанию используют оригинальные SQL-инъекции из набора данных WAF-A-MoLE.

Предоставляется блокнот Google Colaboratory с процедурами обучения для некоторых из этих моделей, использующими оригинальный набор данных WAF-A-MoLE (изменённый до формата SQLiV5). Можно использовать любой набор данных, если он имеет тот же формат, что и SQLiV5.json.

Пользовательские адаптеры

Сначала создайте пользовательский класс Model, реализующий методы extract_features и classify.

root@kitploit:~
class YourCustomModel(Model):
    def extract_features(self, value: str):
    	# TODO: извлечение признаков
        feature_vector = your_custom_feature_function(value)
        return feature_vector

    def classify(self, value):
    	# TODO: вычисление уверенности
        confidence = your_confidence_eval(value)
        return confidence

Затем создайте объект модели и экземпляр объекта engine, использующий ваш класс модели.

root@kitploit:~
model = YourCustomModel() #ваша инициализация
engine = EvasionEngine(model)
result = engine.evaluate(payload, max_rounds, round_size, timeout, threshold)

Бенчмарк

Мы оценили WAF-A-MoLE против всех наших примеров моделей.

График ниже показывает время, которое потребовалось WAF-A-MoLE для мутации нагрузки admin' OR 1=1# до тех пор, пока она не была принята каждым классификатором как «безвредная».

По оси x отложено время (в секундах, логарифмическая шкала). По оси y отложено значение уверенности, т.е. насколько классификатор уверен, что данная нагрузка является SQL-инъекцией (в процентах).

Обратите внимание, что уверенность «50%» в том, что нагрузка является SQL-инъекцией, эквивалентна подбрасыванию монеты. Это обычный порог классификации: если уверенность ниже, нагрузка классифицируется как безвредная.

Benchmark over time

Эксперименты выполнялись на DigitalOcean Standard Droplets.

Вклад

Приветствуются вопросы, сообщения об ошибках и запросы на слияние (pull requests).

В частности, если вы заинтересованы в расширении этого проекта, мы приветствуем следующие вклады:

  1. Новые адаптеры WAF
  2. Новые операторы мутации
  3. Новые алгоритмы поиска

Команда

  • Luca Demetrio — CSecLab, DIBRIS, Университет Генуи
  • Andrea Valenza — CSecLab, DIBRIS, Университет Генуи
  • Gabriele Costa — SysMA, IMT Lucca
  • Giovanni Lagorio — CSecLab, DIBRIS, Университет Генуи
Скачать инструмент
МутацияПример
Case Swappingadmin' OR 1=1# ⇒ admin' oR 1=1#
Whitespace Substitutionadmin' OR 1=1# ⇒ admin'\t\rOR\n1=1#
Comment Injectionadmin' OR 1=1# ⇒ admin'/**/OR 1=1#
Comment Rewritingadmin'/**/OR 1=1# ⇒ admin'/*xyz*/OR 1=1#abc
Integer Encodingadmin' OR 1=1# ⇒ admin' OR 0x1=(SELECT 1)#
Operator Swappingadmin' OR 1=1# ⇒ admin' OR 1 LIKE 1#
Logical Invariantadmin' OR 1=1# ⇒ admin' OR 1=1 AND 0<1#
Number Shufflingadmin' OR 1=1# ⇒ admin' OR 2=2#
Название классификатораАлгоритм
WafBrainRecurrent Neural Network
ML-Based-WAFNon-Linear SVM
ML-Based-WAFStochastic Gradient Descent
ML-Based-WAFAdaBoost
Token-basedNaive Bayes
Token-basedRandom Forest
Token-basedLinear SVM
Token-basedGaussian SVM
SQLiGoT - Directed ProportionalGaussian SVM
SQLiGoT - Directed UnproportionalGaussian SVM
SQLiGoT - Undirected ProportionalGaussian SVM
SQLiGoT - Undirected UnproportionalGaussian SVM