
Hybride Machine-Learning-Pipelines zur Erkennung von SQL-Injection im Web-Traffic, die DistilBERT- und BERT-GNN-Modelle mit adversarialem Training und Robustheitsanalyse kombinieren.
| 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).
Erwartete Reproduktionspräzision. Zahlen reproduzieren sich auf ungefähr ±0,1–0,2 Prozentpunkte und nicht bitgenau. Geringfügige Abweichungen stammen von CPU- gegenüber GPU-Ausführung, PyTorch-Nichtdeterminismus und davon, dass sich die Early-Stopping-Epoche zwischen Läufen um ein oder zwei unterscheidet. Die berichteten Schlussfolgerungen (der Graph bringt keinen Gewinn bei der sauberen Genauigkeit, verbessert aber die Robustheit gegenüber URL-Encoding-Evasion, und die zugehörigen statistischen Tests) sind innerhalb dieser Toleranz stabil.
Betreuer: Professor Atta Badii (University of Reading). Dank auch an den Doktoranden Ahmed Ashlam für die Beratung während der Durchführung des Projekts. Beide werden in der Dissertation gewürdigt.
Wenn Sie diese Arbeit referenzieren:
Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. MSc-Dissertation, University of Reading.
Veröffentlicht unter der MIT-Lizenz.
Dieses GitHub-Repository spiegelt die ursprüngliche Einreichung im institutionellen Gitlab der University of Reading wider: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.
Erklärung zur Originalarbeit (aus der Dissertation): „Ich, Lilliane Linnet Musoke, vom Fachbereich Informatik der University of Reading, bestätige, dass dies meine Originalarbeit ist, außer in den Fällen, in denen ich die Beiträge anderer Autoren ausdrücklich anerkannt habe."