
Гибридные конвейеры машинного обучения для обнаружения SQL-инъекций в веб-трафике, объединяющие модели DistilBERT и BERT-GNN с состязательным обучением и анализом устойчивости.
| Автор | Lilliane Linnet Musoke |
| Учреждение | Университет Рединга, факультет компьютерных наук |
| Программа | MSc Data Science and Advanced Computing |
| Научный руководитель | Профессор Atta Badii |
| Дата подачи | 17 сентября 2024 г. |
Два новых гибридных конвейера машинного обучения, каждый из которых реализован в виде автономного Jupyter-ноутбука, для обнаружения атак SQL-инъекций (SQLi) в трафике веб-приложений:
DistilBERT_Stacked_Ensemble_pipeline.ipynb — конвейер DistilBERT-стекового ансамбля (мета-обучающийся). Использует контекстные эмбеддинги DistilBERT в качестве входных данных для стека классических ML- и ансамблевых классификаторов (Logistic Regression, XGBoost, SVM), объединённых под нейросетевым мета-обучающимся. Состязательное обучение выполняется с помощью метода Fast Gradient Sign Method (FGSM); гиперпараметры настраиваются с помощью Optuna.BERT_GNN_pipeline_FINAL.ipynb — гибридный конвейер BERT–графовая нейронная сеть. BERT генерирует контекстные эмбеддинги SQL-запросов; GNN моделирует графовое представление запроса для выявления структурных закономерностей. Гиперпараметры настраиваются с помощью Optuna.Плюс набор данных, использованный для обучения и оценки обоих конвейеров:
SQL_Injection_Dataset.csv — размеченные SQL-запросы (безвредные и вредоносные).| Конвейер | Точность | Состязательная точность (FGSM) | Примечания |
|---|---|---|---|
| DistilBERT-стековый ансамбль | 99,81% | 99,77% | Выбранный рекомендуемый подход; быстрое время выполнения |
| BERT-GNN | 99,48% (99,67% на отложенной выборке) | — | Превосходное структурное понимание; большее время выполнения (23,13 с); повторное обучение на отложенной валидации достигает 99,67%, см. RESULTS.md |
| Лучший традиционный базовый подход (Random Forest) | 94,47% | — | Протестирован в том же исследовании |
Все четыре метрики производительности (точность, полнота, F1-мера) достигают того же ключевого показателя для обоих гибридных конвейеров. Полные таблицы по каждой модели, матрицы ошибок, ROC-кривые, кривые обучения и анализ чувствительности приведены в ноутбуках и в диссертации.
Состязательная точность DistilBERT-стекового ансамбля 99,77% превышает сопоставимый результат состязательного тестирования, сообщённый Guan et al. (2023, Future Internet 15(4):133, DOI 10.3390/fi15040133), на 2,38% — см. полное сравнение в §4.4 диссертации.
.ipynb в корне репозитория содержат полный код конвейеров (загрузка данных, предобработка, эмбеддинги, обучение, оценка, состязательная устойчивость, анализ чувствительности). Выходные данные удалены, чтобы ноутбуки быстро и компактно отображались на GitHub; запуск любого ноутбука сверху вниз восстанавливает все рисунки.RESULTS.md показывает все рисунки (матрицы ошибок, ROC-кривые, кривые обучения, графики анализа чувствительности, сравнение моделей) в виде просматриваемой галереи без необходимости что-либо запускать.results/ и названы по конвейеру и разделу.Протестировано на Python 3.10+ в среде Jupyter. Для установки всех зависимостей:
python -m venv .venv
source .venv/bin/activate # macOS / Linux
.venv\Scripts\activate # Windows
pip install -r requirements.txt
Затем откройте любой ноутбук в JupyterLab или VS Code и запустите ячейки сверху вниз. Каждый конвейер полностью автономен: загрузка и предобработка данных → извлечение эмбеддингов → обучение модели → оценка → проверка состязательной устойчивости → анализ чувствительности. Для этапа обучения BERT-GNN рекомендуется GPU, но он не обязателен для инференса или для DistilBERT-стекового ансамбля.
Требования к ресурсам. Этап извлечения эмбеддингов DistilBERT (и BERT) одновременно удерживает в памяти языковую модель и её эмбеддинги для всего набора данных. Для сквозного выполнения требуется примерно 6–8 ГБ свободной оперативной памяти для конвейера DistilBERT-стекового ансамбля и 8–12 ГБ для BERT-GNN. Ноутбуки изначально разрабатывались на Google Colab (который предоставляет 12–16 ГБ и бесплатный GPU). При локальном запуске на машине с 8 ГБ общей оперативной памяти сначала закройте другие приложения или запустите в Colab по ссылкам-бейджам в верхней части каждого ноутбука.
Скрипты в корне репозитория восстанавливают расширенный анализ, описанный в пересмотренной статье о BERT-GNN (абляция, исправленная оценка на отложенной выборке, структурно-осознанный граф, устойчивость к обфускации, набор из семи тестов устойчивости, полные метрики и время выполнения между моделями). Они читают зафиксированный SQL_Injection_Dataset.csv, записывают свои выходные данные в results/ и кэшируют промежуточные артефакты (эмбеддинги BERT, графы, обученные модели) в .structure_work/ и .corrected_work/. Эти каталоги кэша намеренно не отслеживаются; каждый скрипт перестраивает их из набора данных и поддерживает возобновление, поэтому прерванный запуск на машине без GPU можно просто запустить заново, и он продолжится.
Скрипты образуют цепочку «производитель→потребитель» через эти кэши, поэтому запускайте их в следующем порядке (каждому шагу нужен только набор данных плюс кэши, записанные предыдущими шагами):
pip install -r requirements.txt
python structure_graph_gnn.py # структурные графы + best.json (Optuna) + результат structure-GNN
python corrected_bertgnn_retrain.py # повторное обучение на отложенной валидации (цепочка графов) -> исправленный результат
python extract_train_cls.py # эмбеддинги BERT [CLS] для обучающей выборки (train_cls.npy)
python bert_only_ablation.py # только BERT-головы на идентичном тестовом наборе
python obfuscation_robustness.py # обучает + кэширует gnn_model.pt / mlp_model.pkl; полнота обхода
python robustness_1_sensitivity.py # набор из семи тестов устойчивости, по одному скрипту на каждый
python robustness_2_adversarial.py
python robustness_3_obfuscation_extended.py
python robustness_4_adaptive.py
python robustness_5_crossdataset.py
python robustness_6_significance.py
python robustness_7_calibration.py
python metrics_summary.py # полные таблицы метрик по классам
python complexity_breakdown.py # точность по сложности запросов (Таблица 4)
python make_result_figures.py # матрицы ошибок + сравнительные графики
python model_execution_times.py # время обучения + инференса для всех моделей
Все скрипты разрешают свои пути относительно репозитория, используют фиксированное зерно (random_state=42) и не требуют аргументов. Полностью поддерживается запуск на CPU (GPU только ускоряет этапы эмбеддингов и обучения GNN).
Ожидаемая точность воспроизведения. Числа воспроизводятся с точностью примерно ±0,1–0,2 процентных пункта, а не побитово. Незначительные отклонения возникают из-за выполнения на CPU и GPU, недетерминизма PyTorch и различий в эпохе ранней остановки на одну-две между запусками. Сообщённые выводы (граф не даёт прироста точности на чистых данных, но улучшает устойчивость к обходу через URL-кодирование, а также связанные статистические тесты) стабильны в пределах этого допуска.
Научный руководитель: профессор Atta Badii (Университет Рединга). Также благодарность аспиранту Ahmed Ashlam за консультации в ходе выполнения проекта. Оба упомянуты в диссертации.
Если вы ссылаетесь на эту работу:
Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. Магистерская диссертация, Университет Рединга.
Выпущено под лицензией MIT.
Этот GitHub-репозиторий зеркалирует оригинальную подачу в институциональном Gitlab Университета Рединга: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.
Декларация об оригинальности работы (из диссертации): «Я, Lilliane Linnet Musoke, с факультета компьютерных наук Университета Рединга, подтверждаю, что это моя оригинальная работа, за исключением тех случаев, где я явно указала вклад других авторов».