Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Final-project-SQL-injection-pipeline — Pipeline di machine learning ibrido per il rilevamento di SQL injection nel traffico web, che combinano i modelli DistilBERT e BERT-GNN con training avversario e analisi della robustezza. | Kitploit
Strumenti/GitHubGitHub/mlily2024/final-project-sql-injection-pipeline
Analisi delle VulnerabilitàSicurezza WebMachine LearningPaper e RicercaApprendimento e FormazioneRilevamento di Anomalie
GitHubmlily2024/final-project-sql-injection-pipeline

Final-project-SQL-injection-pipeline

Pipeline di machine learning ibrido per il rilevamento di SQL injection nel traffico web, che combinano i modelli DistilBERT e BERT-GNN con training avversario e analisi della robustezza.

Vedi Repository
21 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Rilevamento delle Iniezioni SQL — Pipeline ML Ibride

Codice sorgente per la tesi di laurea magistrale: Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection

AutoreLilliane Linnet Musoke
IstituzioneUniversity of Reading, Dipartimento di Informatica
ProgrammaMSc Data Science and Advanced Computing
SupervisoreProfessor Atta Badii
Presentata17 settembre 2024

Contenuto di questo repository

Due nuove pipeline ibride di Machine Learning, ciascuna implementata come notebook Jupyter autonomo, per il rilevamento degli attacchi di SQL Injection (SQLi) nel traffico delle applicazioni web:

  1. DistilBERT_Stacked_Ensemble_pipeline.ipynb — una pipeline DistilBERT-Stacked Ensemble (Meta-Learner). Utilizza gli embedding contestuali di DistilBERT come input per uno stack di classificatori ML convenzionali e ensemble (Logistic Regression, XGBoost, SVM), combinati sotto un meta-learner basato su rete neurale. L'addestramento avversariale viene eseguito con il Fast Gradient Sign Method (FGSM); gli iperparametri vengono ottimizzati con Optuna.
  2. BERT_GNN_pipeline_FINAL.ipynb — una pipeline ibrida BERT–Graph-Neural-Network. BERT genera embedding contestuali delle query SQL; una GNN modella la rappresentazione della query come struttura a grafo per catturare i pattern strutturali. Iperparametri ottimizzati con Optuna.

Più il dataset utilizzato per addestrare e valutare entrambe le pipeline:

  1. SQL_Injection_Dataset.csv — query SQL etichettate (benigne vs dannose).

Risultati principali (dalla tesi)

PipelineAccuratezzaAccuratezza avversariale (FGSM)Note
DistilBERT-Stacked Ensemble99,81%99,77%Approccio raccomandato selezionato; tempi di esecuzione rapidi
BERT-GNN99,48% (99,67% su held-out)—Comprensione strutturale superiore; tempi di esecuzione più lunghi (23,13 s); il riaddestramento su validazione held-out raggiunge il 99,67%, vedi RESULTS.md
Migliore baseline convenzionale (Random Forest)94,47%—Valutata nello stesso studio

Tutte e quattro le metriche di performance (accuratezza, precisione, recall, F1-score) raggiungono lo stesso valore principale per entrambe le pipeline ibride. Le tabelle complete per modello, le matrici di confusione, le curve ROC, le curve di apprendimento e le analisi di sensibilità sono nei notebook e nella tesi.

L'accuratezza avversariale del DistilBERT-Stacked Ensemble del 99,77% supera il risultato comparabile di test avversariale riportato da Guan et al. (2023, Future Internet 15(4):133, DOI 10.3390/fi15040133) del 2,38% — vedi la sezione §4.4 della tesi per il confronto completo.

Come visualizzare il lavoro

  • Notebook — i due file .ipynb nella radice del repository contengono il codice completo delle pipeline (caricamento dati, preprocessamento, embedding, addestramento, valutazione, robustezza avversariale, analisi di sensibilità). Gli output sono stati rimossi affinché i notebook vengano visualizzati rapidamente e in modo leggero su GitHub; eseguendo uno dei due notebook dall'inizio alla fine si rigenerano tutte le figure.
  • Galleria dei risultati — RESULTS.md mostra tutte le figure (matrici di confusione, curve ROC, curve di apprendimento, grafici dell'analisi di sensibilità, confronto per modello) come galleria consultabile senza dover eseguire nulla.
  • Tutte le figure — le esportazioni PNG individuali di ogni figura dei risultati si trovano nella cartella results/, denominate per pipeline e sezione.

Come eseguire i notebook in locale

Testato con Python 3.10+ in ambiente Jupyter. Per installare tutte le dipendenze:

root@kitploit:~
python -m venv .venv
source .venv/bin/activate          # macOS / Linux
.venv\Scripts\activate             # Windows
pip install -r requirements.txt

Quindi aprire uno dei notebook in JupyterLab o VS Code ed eseguire le celle dall'inizio alla fine. Ogni pipeline è completamente autonoma: caricamento e preprocessamento dei dati → estrazione degli embedding → addestramento del modello → valutazione → verifica della robustezza avversariale → analisi di sensibilità. Una GPU è consigliata per la fase di addestramento BERT-GNN ma non è necessaria per l'inferenza né per il DistilBERT-Stacked Ensemble.

Requisiti di risorse. La fase di estrazione degli embedding di DistilBERT (e BERT) mantiene in memoria simultaneamente il modello linguistico e gli embedding dell'intero dataset. L'esecuzione end-to-end richiede circa 6–8 GB di RAM libera per la pipeline DistilBERT-Stacked Ensemble e 8–12 GB per BERT-GNN. I notebook sono stati originariamente sviluppati su Google Colab (che fornisce 12–16 GB e una GPU gratuita). Se si esegue in locale su una macchina con 8 GB di RAM totale, chiudere prima le altre applicazioni oppure eseguire su Colab tramite i link badge in cima a ciascun notebook.

Riproduzione dei risultati della revisione

Gli script nella radice del repository rigenerano l'analisi estesa riportata nell'articolo BERT-GNN revisionato (ablation, valutazione held-out corretta, grafo sensibile alla struttura, robustezza all'offuscamento, suite di robustezza a sette test, metriche complete e tempi di esecuzione tra modelli). Leggono il file SQL_Injection_Dataset.csv incluso, scrivono i loro output in results/ e memorizzano nella cache gli artefatti intermedi (embedding BERT, grafi, modelli addestrati) sotto .structure_work/ e .corrected_work/. Queste directory di cache non sono volutamente tracciate; ogni script le ricostruisce dal dataset ed è ripristinabile, quindi un'esecuzione interrotta su una macchina solo CPU può semplicemente essere riavviata e continuerà.

Gli script formano una catena produttore→consumatore attraverso queste cache, quindi eseguirli in questo ordine (ogni passaggio richiede solo il dataset più le cache scritte dai passaggi precedenti):

root@kitploit:~
pip install -r requirements.txt

python structure_graph_gnn.py        # grafi strutturali + best.json (Optuna) + risultato struttura-GNN
python corrected_bertgnn_retrain.py  # riaddestramento su validazione held-out (grafo a catena) -> risultato corretto
python extract_train_cls.py          # embedding BERT [CLS] della suddivisione di addestramento (train_cls.npy)
python bert_only_ablation.py         # sole testate BERT sullo stesso set di test
python obfuscation_robustness.py     # addestra e memorizza nella cache gnn_model.pt / mlp_model.pkl; recall di evasione
python robustness_1_sensitivity.py   # suite di robustezza a sette test, uno script ciascuno
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            # tabelle complete delle metriche per classe
python complexity_breakdown.py       # accuratezza per complessità della query (Tabella 4)
python make_result_figures.py        # matrici di confusione + grafici di confronto
python model_execution_times.py      # tempi di addestramento + inferenza su tutti i modelli

Tutti gli script risolvono i propri percorsi relativamente al repository, utilizzano un seed fisso (random_state=42) e non richiedono argomenti. L'esecuzione su CPU è pienamente supportata (una GPU accelera solo i passaggi di embedding e addestramento della GNN).

Precisione attesa della riproduzione. I numeri si riproducono con una precisione approssimativa di ±0,1–0,2 punti percentuali piuttosto che bit per bit. Piccole variazioni derivano dall'esecuzione su CPU rispetto a GPU, dalla non-determinismo di PyTorch e dall'epoca di early stopping che differisce di uno o due tra le esecuzioni. Le conclusioni riportate (il grafo non aggiunge guadagno in accuratezza pulita ma migliora la robustezza all'evasione tramite URL-encoding, e i relativi test statistici) sono stabili ben all'interno di quel margine.

Ringraziamenti

Supervisore: Professor Atta Badii (University of Reading). Ringraziamento anche al dottorando Ahmed Ashlam per i consigli durante l'esecuzione del progetto. Entrambi sono ringraziati nella tesi.

Citazione

Se si fa riferimento a questo lavoro:

Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. Tesi di laurea magistrale, University of Reading.

Licenza

Rilasciato sotto la Licenza MIT.

Repository complementare

Questo repository GitHub rispecchia la presentazione originale sul Gitlab istituzionale della University of Reading: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.


Dichiarazione di opera originale (dalla tesi): "Io, Lilliane Linnet Musoke, del Dipartimento di Informatica della University of Reading, attesto che questa è la mia opera originale, eccetto per quei casi in cui ho esplicitamente riconosciuto i contributi di altri autori."

Scarica lo strumento