| 著者 | Lilliane Linnet Musoke |
| 機関 | レディング大学 コンピュータサイエンス学科 |
| プログラム | MSc Data Science and Advanced Computing |
| 指導教員 | Professor Atta Badii |
| 提出日 | 2024年9月17日 |
WebアプリケーションのトラフィックにおけるSQLインジェクション(SQLi)攻撃を検出するための、それぞれ自己完結型のJupyterノートブックとして実装された2つの新しいハイブリッド機械学習パイプライン:
DistilBERT_Stacked_Ensemble_pipeline.ipynb — DistilBERTスタック型アンサンブル(メタ学習器)パイプライン。DistilBERTの文脈埋め込みを、従来のMLおよびアンサンブル分類器(ロジスティック回帰、XGBoost、SVM)のスタックへの入力として使用し、ニューラルネットワークのメタ学習器の下で組み合わせる。敵対的学習はFast Gradient Sign Method(FGSM)で実行され、ハイパーパラメータはOptunaで調整される。BERT_GNN_pipeline_FINAL.ipynb — BERT–グラフニューラルネットワークハイブリッドパイプライン。BERTがSQLクエリの文脈埋め込みを生成し、GNNがグラフ構造のクエリ表現をモデル化して構造パターンを捕捉する。ハイパーパラメータはOptunaで調整される。さらに、両パイプラインのトレーニングと評価に使用したデータセット:
SQL_Injection_Dataset.csv — ラベル付きSQLクエリ(良性 vs 悪意)。| パイプライン | 精度 | 敵対的精度(FGSM) | 備考 |
|---|---|---|---|
| DistilBERTスタック型アンサンブル | 99.81% | 99.77% | 推奨アプローチとして選定。実行時間が短い |
| BERT-GNN | 99.48%(ホールドアウト99.67%) | — | 構造理解に優れる。実行時間が長い(23.13秒)。ホールドアウト検証での再トレーニングは99.67%に達する。RESULTS.mdを参照 |
| 最良の従来ベースライン(ランダムフォレスト) | 94.47% | — | 同じ研究でベンチマーク |
4つの性能指標(精度、適合率、再現率、F1スコア)はすべて、両ハイブリッドパイプラインで同じ主要数値に達している。モデル別の完全な表、混同行列、ROC曲線、学習曲線、感度分析はノートブックと論文に含まれている。
DistilBERTスタック型アンサンブルの敵対的精度**99.77%は、Guanら(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)の埋め込み抽出ステップでは、言語モデルとデータセット全体の埋め込みを同時にメモリに保持する。エンドツーエンドの実行には、DistilBERTスタック型アンサンブルパイプラインで約6〜8 GBの空きRAM、BERT-GNNで8〜12 GBが必要。ノートブックは元々Google Colab(12〜16 GBと無料GPUを提供)で開発された。合計8 GBのRAMを搭載したマシンでローカル実行する場合は、先に他のアプリケーションを閉じるか、各ノートブック上部のバッジリンクからColabで実行する。
リポジトリルートのスクリプトは、改訂されたBERT-GNN論文で報告された拡張分析(アブレーション、修正済みホールドアウト評価、構造認識グラフ、難読化ロバスト性、7テストロバスト性スイート、完全なメトリクス、クロスモデル実行時間)を再生成する。コミット済みのSQL_Injection_Dataset.csvを読み取り、出力をresults/に書き込み、中間成果物(BERT埋め込み、グラフ、トレーニング済みモデル)を.structure_work/および.corrected_work/の下にキャッシュする。これらのキャッシュディレクトリは意図的に追跡対象外となっている。各スクリプトはデータセットからそれらを再構築し、再開可能であるため、CPUのみのマシンで中断された実行は単に再起動すれば継続される。
スクリプトはこれらのキャッシュを通じてプロデューサー→コンシューマーのチェーンを形成するため、この順序で実行する(各ステップに必要なのはデータセットと、以前のステップで書き込まれたキャッシュのみ):
pip install -r requirements.txt
python structure_graph_gnn.py # 構造グラフ + best.json(Optuna)+ 構造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 # 7テストロバスト性スイート、各スクリプト1つ
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の非決定性、および早期停止エポックが実行間で1〜2回異なることに起因する。報告された結論(グラフはクリーンな精度の向上をもたらさないが、URLエンコーディング回避に対するロバスト性を改善する、および関連する統計的テスト)は、その範囲内で十分に安定している。
指導教員: Professor Atta Badii(レディング大学)。また、プロジェクトの実行中に助言を提供してくれた博士課程候補者Ahmed Ashlamにも謝意を表する。両名とも論文で謝辞が述べられている。
この研究を参照する場合:
Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. MSc dissertation, University of Reading.
MITライセンスの下で公開されている。
このGitHubリポジトリは、レディング大学の機関Gitlabへの元の提出物をミラーリングしたものである: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project。
原著者宣言(論文より): 「私は、レディング大学コンピュータサイエンス学科のLilliane Linnet Musokeは、他の著者の貢献を明示的に認めた箇所を除き、これが私のオリジナルの研究であることを証明する。」