
하이브리드 머신러닝 파이프라인으로 웹 트래픽에서 SQL 인젝션을 탐지하며, DistilBERT와 BERT-GNN 모델을 결합하고 적대적 훈련 및 견고성 분석을 포함합니다.
| 저자 | Lilliane Linnet Musoke |
| 기관 | University of Reading, 컴퓨터과학과 |
| 과정 | MSc 데이터 사이언스 및 고급 컴퓨팅 |
| 지도교수 | Professor Atta Badii |
| 제출일 | 2024년 9월 17일 |
웹 애플리케이션 트래픽에서 SQL 인젝션(SQLi) 공격을 탐지하기 위한 두 가지 새로운 하이브리드 머신러닝 파이프라인으로, 각각 독립적인 Jupyter 노트북으로 구현되어 있습니다:
DistilBERT_Stacked_Ensemble_pipeline.ipynb — DistilBERT-스태킹 앙상블(메타러너) 파이프라인. DistilBERT 컨텍스트 임베딩을 기존 ML 및 앙상블 분류기(로지스틱 회귀, XGBoost, SVM) 스택의 입력으로 사용하며, 신경망 메타러너 아래에서 결합됩니다. 적대적 훈련은 FGSM(Fast Gradient Sign Method)으로 수행되며, 하이퍼파라미터는 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% | — | 동일 연구에서 벤치마킹됨 |
네 가지 성능 지표(정확도, 정밀도, 재현율, 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) 임베딩 추출 단계는 언어 모델과 전체 데이터셋 임베딩을 동시에 메모리에 보관합니다. 종단 간 실행에는 DistilBERT-스태킹 앙상블 파이프라인의 경우 약 6–8GB의 여유 RAM, BERT-GNN의 경우 8–12GB가 필요합니다. 노트북은 원래 Google Colab(12–16GB 및 무료 GPU 제공)에서 개발되었습니다. 총 RAM이 8GB인 머신에서 로컬로 실행하는 경우 먼저 다른 애플리케이션을 닫거나 각 노트북 상단의 배지 링크를 통해 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가지 테스트 견고성 스위트, 각각 하나의 스크립트
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(University of Reading). 또한 프로젝트 실행 중 조언을 제공한 박사 과정 Ahmed Ashlam에게도 감사를 표합니다. 두 분 모두 학위논문에서 감사 인사를 받았습니다.
이 작업을 참조하는 경우:
Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. MSc 학위논문, University of Reading.
MIT 라이선스에 따라 배포됩니다.
이 GitHub 저장소는 University of Reading 기관 Gitlab의 원본 제출물을 미러링합니다: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.
원본 작업 선언(학위논문에서 발췌): "저는 University of Reading 컴퓨터과학과의 Lilliane Linnet Musoke는 다른 저자의 기여를 명시적으로 인정한 경우를 제외하고, 이것이 나의 원본 작업임을 증명합니다."