
خطوط أنابيب هجينة قائمة على التعلم الآلي لكشف حقن SQL في حركة مرور الويب، تجمع بين نماذج DistilBERT وBERT-GNN مع تدريب عدائي وتحليل للمتانة.
| المؤلف | Lilliane Linnet Musoke |
| الجامعة | جامعة ريدينغ، قسم علوم الحاسوب |
| البرنامج | ماجستير علوم البيانات والحوسبة المتقدمة |
| المشرف | البروفيسور Atta Badii |
| تاريخ التقديم | 17 سبتمبر 2024 |
خطّا أنابيب هجينان جديدان للتعلم الآلي، كلٌّ منهما مُنفَّذ كدفتر Jupyter مستقل بذاته، لكشف هجمات حقن SQL في حركة مرور تطبيقات الويب:
DistilBERT_Stacked_Ensemble_pipeline.ipynb — خط أنابيب تجميع مكدّس قائم على DistilBERT (متعلم فوقي). يستخدم التضمينات السياقية من DistilBERT كمدخلات لمجموعة من المصنفات التقليدية ومصنفات التجميع (الانحدار اللوجستي، XGBoost، SVM)، مدمجة تحت متعلم فوقي قائم على شبكة عصبية. يتم التدريب العدائي باستخدام طريقة إشارة التدرج السريع (FGSM)؛ ويتم ضبط المعلمات الفائقة باستخدام Optuna.BERT_GNN_pipeline_FINAL.ipynb — خط أنابيب هجين يجمع بين BERT والشبكات العصبية الرسومية. يولّد BERT تضمينات سياقية لاستعلامات SQL؛ بينما تقوم الشبكة العصبية الرسومية بنمذجة التمثيل الرسومي للاستعلام لالتقاط الأنماط البنيوية. تم ضبط المعلمات الفائقة باستخدام Optuna.بالإضافة إلى مجموعة البيانات المستخدمة لتدريب وتقييم خطّي الأنابيب:
SQL_Injection_Dataset.csv — استعلامات SQL مُصنَّفة (حميدة مقابل خبيثة).| خط الأنابيب | الدقة | الدقة العدائية (FGSM) | ملاحظات |
|---|---|---|---|
| التجميع المكدّس القائم على DistilBERT | 99.81% | 99.77% | النهج الموصى به؛ زمن تنفيذ سريع |
| BERT-GNN | 99.48% (99.67% على البيانات المحجوزة) | — | فهم بنيوي فائق؛ زمن تنفيذ أطول (23.13 ثانية)؛ إعادة التدريب على التحقق المحجوز تصل إلى 99.67%، انظر RESULTS.md |
| أفضل خط أساس تقليدي (Random Forest) | 94.47% | — | تمت مقارنته في نفس الدراسة |
جميع مقاييس الأداء الأربعة (الدقة، الضبط، الاستدعاء، درجة 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 وشغّل الخلايا من البداية إلى النهاية. كل خط أنابيب مستقل بذاته من البداية إلى النهاية: تحميل البيانات ومعالجتها المسبقة ← استخراج التضمين ← تدريب النموذج ← التقييم ← فحص المتانة العدائية ← تحليل الحساسية. يُنصح باستخدام GPU لخطوة تدريب BERT-GNN ولكنها غير مطلوبة للاستدلال أو للتجميع المكدّس القائم على DistilBERT.
متطلبات الموارد. خطوة استخراج التضمين في DistilBERT (وBERT) تُبقي نموذج اللغة وتضميناته لمجموعة البيانات الكاملة في الذاكرة في وقت واحد. يتطلب التنفيذ من البداية إلى النهاية حوالي 6–8 جيجابايت من ذاكرة الوصول العشوائي الحرة لخط أنابيب التجميع المكدّس القائم على DistilBERT و8–12 جيجابايت لـ BERT-GNN. تم تطوير الدفاتر أصلاً على Google Colab (الذي يوفر 12–16 جيجابايت وGPU مجاني). إذا كنت تشغّل محليًا على جهاز بذاكرة إجمالية 8 جيجابايت، أغلق التطبيقات الأخرى أولاً أو شغّل في Colab عبر روابط الشارات أعلى كل دفتر.
البرامج النصية في جذر المستودع تعيد توليد التحليل الموسّع المُبلَّغ عنه في ورقة BERT-GNN المنقّحة (الاستئصال، التقييم المصحح على البيانات المحجوزة، الرسم البياني المراعي للبنية، متانة التمويه، مجموعة اختبار المتانة السباعية، المقاييس الكاملة، وزمن التنفيذ عبر النماذج). تقرأ ملف SQL_Injection_Dataset.csv المُلتزَم، وتكتب مخرجاتها إلى results/، وتخزّن مؤقتًا الوسائط الوسيطة (تضمينات BERT، الرسوم البيانية، النماذج المدربة) تحت .structure_work/ و.corrected_work/. مجلدات التخزين المؤقت هذه غير متتبَّعة عمدًا؛ كل برنامج نصي يعيد بنائها من مجموعة البيانات وهو قابل للاستئناف، لذا يمكن ببساطة إعادة تشغيل تشغيل توقف على جهاز CPU-only وسيستمر.
تشكّل البرامج النصية سلسلة منتج←مستهلك عبر تلك المخزونات المؤقتة، لذا شغّلها بهذا الترتيب (كل خطوة تحتاج فقط مجموعة البيانات بالإضافة إلى المخزونات المؤقتة المكتوبة بالخطوات السابقة):
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 # مجموعة اختبار المتانة السباعية، برنامج نصي واحد لكل منها
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، واختلاف عصر الإيقاف المبكر بفارق واحد أو اثنين بين التشغيلات. الاستنتاجات المُبلَّغة (أن الرسم البياني لا يضيف مكسبًا للدقة النظيفة ولكنه يحسّن المتانة ضد تهرب ترميز URL، والاختبارات الإحصائية المرتبطة) مستقرة جيدًا ضمن ذلك الهامش.
المشرف: البروفيسور Atta Badii (جامعة ريدينغ). تقدير أيضًا لمرشح الدكتوراه Ahmed Ashlam على النصائح أثناء تنفيذ المشروع. كلاهما مُشار إليه في الرسالة.
إذا أشرت إلى هذا العمل:
Musoke, L. L. (2024). تعزيز جدار حماية تطبيقات الويب باستخدام التعلم الآلي لكشف حقن SQL. رسالة ماجستير، جامعة ريدينغ.
صدر بموجب رخصة MIT.
يعكس مستودع GitHub هذا النسخة الأصلية المُقدَّمة في Gitlab المؤسسي لجامعة ريدينغ: https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.
إعلان العمل الأصلي (من الرسالة): "أنا، Lilliane Linnet Musoke، من قسم علوم الحاسوب بجامعة ريدينغ، أشهد أن هذا عملي الأصلي، باستثناء الحالات التي أقررت فيها صراحةً بمساهمات مؤلفين آخرين."