
Hybride Machine-Learning-Pipelines zur Erkennung von SQL-Injection im Web-Traffic, die DistilBERT- und BERT-GNN-Modelle mit adversarialem Training und Robustheitsanalyse kombinieren.
Quellcode für die MSc-Dissertation: Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection
| Autor | Lilliane Linnet Musoke |
| Institution | University of Reading, Fachbereich Informatik |
| Studiengang | MSc Data Science and Advanced Computing |
| Betreuer | Professor Atta Badii |
| Eingereicht | 17. September 2024 |
Zwei neuartige hybride Machine-Learning-Pipelines, jeweils als eigenständiges Jupyter-Notebook implementiert, zur Erkennung von SQL-Injection-Angriffen (SQLi) im Webanwendungsverkehr:
DistilBERT_Stacked_Ensemble_pipeline.ipynb — eine DistilBERT-Stacked-Ensemble-Pipeline (Meta-Learner). Verwendet DistilBERT-kontextuelle Einbettungen als Eingabe für einen Stack konventioneller ML- und Ensemble-Klassifikatoren (Logistic Regression, XGBoost, SVM), kombiniert unter einem neuronalen Netzwerk-Meta-Learner. Adversariales Training wird mit der Fast Gradient Sign Method (FGSM) durchgeführt; Hyperparameter werden mit Optuna abgestimmt.BERT_GNN_pipeline_FINAL.ipynb — eine hybride BERT-Graph-Neuronales-Netzwerk-Pipeline. BERT erzeugt kontextuelle Einbettungen von SQL-Abfragen; ein GNN modelliert die graphstrukturierte Abfragedarstellung, um strukturelle Muster zu erfassen. Hyperparameter werden mit Optuna abgestimmt.Plus der Datensatz, der zum Trainieren und Bewerten beider Pipelines verwendet wurde:
SQL_Injection_Dataset.csv — beschriftete SQL-Abfragen (gutartig vs. bösartig).| Pipeline | Genauigkeit | Adversariale Genauigkeit (FGSM) | Anmerkungen |
|---|---|---|---|
| DistilBERT-Stacked Ensemble | 99,81 % | 99,77 % | Ausgewählter empfohlener Ansatz; schnelle Ausführungszeit |
| BERT-GNN | 99,48 % (99,67 % Hold-out) | — | Überlegenes strukturelles Verständnis; längere Ausführungszeit (23,13 s); Hold-out-Validierungs-Neutraining erreicht 99,67 %, siehe RESULTS.md |
| Beste konventionelle Baseline (Random Forest) | 94,47 % | — | In derselben Studie bewertet |
Alle vier Leistungsmetriken (Genauigkeit, Präzision, Recall, F1-Score) erreichen für beide Hybrid-Pipelines denselben Spitzenwert. Vollständige Modelltabellen, Konfusionsmatrizen, ROC-Kurven, Lernkurven und Sensitivitätsanalysen finden sich in den Notebooks und in der Dissertation.
Die adversariale Genauigkeit des DistilBERT-Stacked Ensemble von 99,77 % übertrifft das vergleichbare adversariale Testergebnis von Guan et al. (2023, Future Internet 15(4):133, DOI 10.3390/fi15040133) um 2,38 % — siehe Dissertation §4.4 für den vollständigen Vergleich.
.ipynb-Dateien im Repository-Stammverzeichnis enthalten den vollständigen Pipeline-Code (Datenladen, Vorverarbeitung, Einbettung, Training, Bewertung, adversariale Robustheit, Sensitivitätsanalyse). Die Ausgaben wurden entfernt, damit die Notebooks auf GitHub schnell und klein rendern; das Ausführen eines der Notebooks von oben nach unten erzeugt jede Abbildung neu.RESULTS.md zeigt alle Abbildungen (Konfusionsmatrizen, ROC-Kurven, Lernkurven, Sensitivitätsanalyse-Diagramme, Modellvergleich) als betrachtbare Galerie, ohne dass etwas ausgeführt werden muss.results/, benannt nach Pipeline und Abschnitt.Getestet unter Python 3.10+ mit einer Jupyter-Umgebung. So installieren Sie alle Abhängigkeiten:
python -m venv .venv
source .venv/bin/activate # macOS / Linux
.venv\Scripts\activate # Windows
pip install -r requirements.txt
Öffnen Sie dann eines der Notebooks in JupyterLab oder VS Code und führen Sie die Zellen von oben nach unten aus. Jede Pipeline ist durchgängig eigenständig: Datenladen und Vorverarbeitung → Einbettungsextraktion → Modelltraining → Bewertung → Adversarial-Robustheitsprüfung → Sensitivitätsanalyse. Eine GPU wird für den BERT-GNN-Trainingsschritt empfohlen, ist aber für die Inferenz oder das DistilBERT-Stacked Ensemble nicht erforderlich.
Ressourcenanforderung. Der DistilBERT- (und BERT-) Einbettungsextraktionsschritt hält das Sprachmodell und seine vollständigen Datensatzeinbettungen gleichzeitig im Speicher. Die End-to-End-Ausführung benötigt ungefähr 6–8 GB freien Arbeitsspeicher für die DistilBERT-Stacked-Ensemble-Pipeline und 8–12 GB für BERT-GNN. Die Notebooks wurden ursprünglich auf Google Colab entwickelt (das 12–16 GB und eine kostenlose GPU bereitstellt). Wenn Sie lokal auf einem Rechner mit insgesamt 8 GB Arbeitsspeicher arbeiten, schließen Sie zuerst andere Anwendungen oder führen Sie sie in Colab über die Badge-Links oben in jedem Notebook aus.
Die Skripte im Repository-Stammverzeichnis regenerieren die erweiterte Analyse, die im überarbeiteten BERT-GNN-Papier berichtet wird (Ablation, korrigierte Hold-out-Bewertung, strukturbewusster Graph, Verschleierungsrobustheit, die Sieben-Test-Robustheitssuite, vollständige Metriken und modellübergreifende Ausführungszeit). Sie lesen die festgeschriebene SQL_Injection_Dataset.csv, schreiben ihre Ausgaben nach results/ und speichern Zwischenartefakte (BERT-Einbettungen, Graphen, trainierte Modelle) unter .structure_work/ und .corrected_work/ zwischen. Diese Cache-Verzeichnisse werden absichtlich nicht versioniert; jedes Skript baut sie aus dem Datensatz neu auf und ist fortsetzbar, sodass ein auf einem reinen CPU-Rechner unterbrochener Lauf einfach neu gestartet werden kann und fortgesetzt wird.
Die Skripte bilden eine Produzent→Konsument-Kette durch diese Caches. Führen Sie sie daher in dieser Reihenfolge aus (jeder Schritt benötigt nur den Datensatz plus die von früheren Schritten geschriebenen Caches):
pip install -r requirements.txt
python structure_graph_gnn.py # Strukturgraphen + best.json (Optuna) + Struktur-GNN-Ergebnis
python corrected_bertgnn_retrain.py # Hold-out-Validierungs-Neutraining (Kettengraph) -> korrigiertes Ergebnis
python extract_train_cls.py # BERT-[CLS]-Einbettungen des Trainings-Splits (train_cls.npy)
python bert_only_ablation.py # Nur-BERT-Köpfe auf dem identischen Testsatz
python obfuscation_robustness.py # trainiert + cached gnn_model.pt / mlp_model.pkl; Evasion-Recall
python robustness_1_sensitivity.py # Sieben-Test-Robustheitssuite, ein Skript pro Test
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 # vollständige Metriktabellen pro Klasse
python complexity_breakdown.py # Genauigkeit nach Abfragekomplexität (Tabelle 4)
python make_result_figures.py # Konfusionsmatrizen + Vergleichsdiagramme
python model_execution_times.py # Trainings- + Inferenzzeit über alle Modelle
Alle Skripte lösen ihre Pfade relativ zum Repository auf, verwenden einen festen Seed (random_state=42) und benötigen keine Argumente. Die Ausführung auf der CPU wird vollständig unterstützt (eine GPU beschleunigt nur die Einbettungs- und GNN-Trainingsschritte).