
مُختبر اختراق مُوجَّه قائم على الطفرات لجدران الحماية لتطبيقات الويب المعتمدة على التعلّم الآلي
مُشعِّلٌ موجَّهٌ قائمٌ على الطفرات لجدران الحماية النارية لتطبيقات الويب المعتمدة على التعلم الآلي، مستوحىً من AFL ومبنيٌّ على FuzzingBook لأندرياس زيلر وآخرين.
بالنظر إلى استعلام حقن SQL مُدخل، يحاول إنتاج استعلام ثابت دلاليًا قادر على تجاوز جدار الحماية الناري المستهدف. يمكنك استخدام هذه الأداة لتقييم متانة منتجك من خلال السماح لـ WAF-A-MoLE باستكشاف فضاء الحلول لإيجاد "نقاط عمياء" خطيرة لم يغطيها المصنِّف المستهدف.

يأخذ WAF-A-MoLE حمولة أولية ويُدخلها في مجمَّع الحمولات، الذي يدير طابورًا ذا أولوية مُرتبًا حسب درجة ثقة جدار الحماية الناري في كل حمولة.
خلال كل تكرار، يُمرَّر رأس مجمَّع الحمولات إلى المُشعِّل، حيث يتم تحويره عشوائيًا بتطبيق أحد مشغلات التحوير المتاحة.
جميع مشغلات الطفرات تحافظ على الدلالة وتستفيد من القدرة التعبيرية العالية للغة SQL (في هذه النسخة، MySQL).
فيما يلي مشغلات الطفرات المتاحة في النسخة الحالية من WAF-A-MoLE.
يطبِّق WAF-A-MoLE المنهجية المقدمة في "WAF-A-MoLE: Evading Web Application Firewalls through Adversarial Machine Learning". يمكن أيضًا العثور على نسخة ما قبل الطباعة من مقالتنا على arXiv.
إذا كنت ترغب في الاستشهاد بنا، يُرجى استخدام المرجع التالي (BibTeX):
@inproceedings{demetrio20wafamole,
title={WAF-A-MoLE: evading web application firewalls through adversarial machine learning},
author={Demetrio, Luca and Valenza, Andrea and Costa, Gabriele and Lagorio, Giovanni},
booktitle={Proceedings of the 35th Annual ACM Symposium on Applied Computing},
pages={1745--1752},
year={2020}
}
pip install -r requirements.txt
يمكنك تقييم متانة جدار الحماية الناري الخاص بك، أو تجربة WAF-A-MoLE ضد بعض المصنِّفات النموذجية. في الحالة الأولى، ألقِ نظرة على صنف Model. يجب على نموذجك المخصص تنفيذ هذا الصنف ليتم تقييمه بواسطة WAF-A-MoLE. لقد قدمنا بالفعل مغلِّفات لمصنِّفات sci-kit learn و keras يمكن توسيعها لتناسب مرحلة استخراج الميزات الخاصة بك (إن وجدت).
wafamole --help
Usage: wafamole [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
evade Launch WAF-A-MoLE against a target classifier.
wafamole evade --help
Usage: wafamole evade [OPTIONS] MODEL_PATH PAYLOAD
Launch WAF-A-MoLE against a target classifier.
Options:
-T, --model-type TEXT Type of classifier to load
-t, --timeout INTEGER Timeout when evading the model
-r, --max-rounds INTEGER Maximum number of fuzzing rounds
-s, --round-size INTEGER Fuzzing step size for each round (parallel fuzzing
steps)
--threshold FLOAT Classification threshold of the target WAF [0.5]
--random-engine TEXT Use random transformations instead of evolution
engine. Set the number of trials
--output-path TEXT Location were to save the results of the random
engine. NOT USED WITH REGULAR EVOLUTION ENGINE
--help Show this message and exit.
نقدم بعض النماذج المُدرَّبة مسبقًا التي يمكنك التجربة بها، والموجودة في wafamole/models/custom/example_models. المصنِّفات التي استخدمناها مُدرجة في الجدول أدناه.
بالإضافة إلى جدران الحماية النارية القائمة على التعلم الآلي، يدعم WAF-a-MoLE أيضًا جدران الحماية النارية القائمة على القواعد. على وجه التحديد، يوفر مغلِّفًا لجدار الحماية الناري ModSecurity المُزوَّد بـ OWASP Core Rule Set (CRS)، استنادًا إلى مشروع pymodsecurity.
تجاوز المصنِّف المُدرَّب مسبقًا لـ WAF-Brain باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5 "admin' OR 1=1#"
تجاوز المصنِّف SVM المُدرَّب مسبقًا لـ ML-Based-WAF باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump "admin' OR 1=1#"
تجاوز المصنِّف SVM المُدرَّب مسبقًا لـ ML-Based-WAF باستخدام مكافئ لـ admin' OR 1=1#. لاحظ أن SQLiV5 هي مجموعة بيانات مأخوذة من Kaggle موسعة بسلسلة من الاستعلامات التي تم إنشاؤها بواسطة WAF-A-MoLE نفسه، كدليل على المفهوم أن استعلامات WAF-A-MoLE يمكن أن تعزز متانة جدار الحماية الناري بإعادة التدريب. استخدم mlbasedwaf_svc_sqliv3.dump لتجاوز الجدار الناري المُدرَّب بمجموعة بيانات Kaggle الأصلية (SQLiV3).
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc_sqliv5.dump "admin' OR 1=1#"
تجاوز المصنِّف SGD المُدرَّب مسبقًا لـ ML-Based-WAF باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_sgd.dump "admin' OR 1=1#"
تجاوز المصنِّف AdaBoost المُدرَّب مسبقًا لـ ML-Based-WAF باستخدام مكافئ لـ admin' OR 1=1# (يستغرق وقتًا أطول من النماذج الأخرى، حوالي 2 إلى 5 دقائق من وقت التشغيل).
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_ada.dump "admin' OR 1=1#"
تجاوز المصنِّف Naive Bayes المُدرَّب مسبقًا والقائم على الرموز باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type token wafamole/models/custom/example_models/naive_bayes_trained.dump "admin' OR 1=1#"
تجاوز المصنِّف Random Forest المُدرَّب مسبقًا والقائم على الرموز باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type token wafamole/models/custom/example_models/random_forest_trained.dump "admin' OR 1=1#"
تجاوز المصنِّف SVM الخطي المُدرَّب مسبقًا والقائم على الرموز باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type token wafamole/models/custom/example_models/lin_svm_trained.dump "admin' OR 1=1#"
تجاوز المصنِّف SVM الغاوسي المُدرَّب مسبقًا والقائم على الرموز باستخدام مكافئ لـ admin' OR 1=1#.
wafamole evade --model-type token wafamole/models/custom/example_models/gauss_svm_trained.dump "admin' OR 1=1#"
تجاوز المصنِّف SQLiGOT المُدرَّب مسبقًا باستخدام مكافئ لـ admin' OR 1=1#.
استخدم DP، UP، DU، أو UU لـ (على التوالي) موجه متناسب، غير موجه متناسب، موجه غير متناسب وغير موجه غير متناسب.
wafamole evade --model-type DP wafamole/models/custom/example_models/graph_directed_proportional_sqligot "admin' OR 1=1#"
تجاوز OWASP ModSecurity CRS باستخدام مكافئ لـ admin' OR 1=1#.
يحتاج المستخدم أيضًا إلى تحديد مستوى البارانويا بالإضافة إلى المسار لتحديد موقع قواعد CRS (مثل /etc/coreruleset).
wafamole evade --model-type modsecurity_pl[1-4] /etc/coreruleset "admin' OR 1=1#"
قبل تشغيل التقييم على SQLiGoT
هذه المصنِّفات أكثر متانة من غيرها، حيث أن مرحلة استخراج الميزات تنتج متجهات ذات بنية أكثر تعقيدًا، وجميع المصنِّفات المُدرَّبة مسبقًا تمت تنظيمها بشدة. قد يستغرق الأمر ساعات لبعض المتغيرات لإنتاج حمولة تحقق التجاوز (انظر قسم المعيار).
ملاحظة حول نماذج ML-Based-WAF الأحدث
تمت مؤخرًا إضافة بعض النماذج المستندة إلى نسخة معدلة قليلاً من ML-Based-WAF الخاص بـ vladan-stojnic، من امتداد لـ WAF-A-MoLE بعنوان wafamole++ بواسطة nidnogg. قد يستغرق اختبار نموذج AdaBoost وقتًا أطول من المعتاد (عادةً 2 إلى 5 دقائق).
هناك متغيرات مُدرَّبة باستخدام مجموعة بيانات SQLiV5.json، بينما تستخدم معظمها حقن SQL الأصلي من مجموعة بيانات WAF-A-MoLE افتراضيًا.
يتم توفير دفتر ملاحظات على Google Colaboratory مع إجراءات التدريب لبعض هذه النماذج، باستخدام مجموعة بيانات WAF-A-MoLE الأصلية (المعدلة إلى تنسيق SQLiV5). يمكن استخدام أي مجموعة بيانات طالما أنها بنفس تنسيق SQLiV5.json.
أولاً، أنشئ صنف Model مخصصًا ينفذ طريقتي extract_features و classify.
class YourCustomModel(Model):
def extract_features(self, value: str):
# TODO: extract features
feature_vector = your_custom_feature_function(value)
return feature_vector
def classify(self, value):
# TODO: compute confidence
confidence = your_confidence_eval(value)
return confidence
ثم، أنشئ كائنًا من النموذج وقم بإنشاء كائن engine يستخدم صنف النموذج الخاص بك.
model = YourCustomModel() #your init
engine = EvasionEngine(model)
result = engine.evaluate(payload, max_rounds, round_size, timeout, threshold)
قمنا بتقييم WAF-A-MoLE ضد جميع نماذجنا النموذجية.
يُظهر الرسم البياني أدناه الوقت الذي استغرقه WAF-A-MoLE لتحوير الحمولة admin' OR 1=1# حتى تم قبولها كحميدة من قبل كل مصنِّف.
على المحور x لدينا الوقت (بالثواني، بمقياس لوغاريتمي). على المحور y لدينا قيمة الثقة، أي مدى تأكد المصنِّف من أن حمولة معينة هي حقن SQL (بالنسبة المئوية).
لاحظ أن كون المصنِّف "متأكدًا بنسبة 50%" من أن الحمولة هي حقن SQL يعادل رمي قطعة نقدية. هذا هو عتبة التصنيف المعتادة: إذا كانت الثقة أقل، يتم تصنيف الحمولة على أنها حميدة.

تم إجراء التجارب على DigitalOcean Standard Droplets.
الأسئلة وتقارير الأخطاء وطلبات السحب مرحب بها.
على وجه الخصوص، إذا كنت مهتمًا بتوسيع هذا المشروع، فإننا نبحث عن المساهمات التالية:
| المشغل | مثال |
|---|
| تبديل حالة الأحرف | admin' OR 1=1# ⇒ admin' oR 1=1# |
| استبدال المسافات | admin' OR 1=1# ⇒ admin'\t\rOR\n1=1# |
| حقن التعليقات | admin' OR 1=1# ⇒ admin'/**/OR 1=1# |
| إعادة كتابة التعليقات | admin'/**/OR 1=1# ⇒ admin'/*xyz*/OR 1=1#abc |
| ترميز الأعداد الصحيحة | admin' OR 1=1# ⇒ admin' OR 0x1=(SELECT 1)# |
| تبديل العوامل | admin' OR 1=1# ⇒ admin' OR 1 LIKE 1# |
| الثابت المنطقي | admin' OR 1=1# ⇒ admin' OR 1=1 AND 0<1# |
| خلط الأرقام | admin' OR 1=1# ⇒ admin' OR 2=2# |
| اسم المصنف | الخوارزمية |
|---|
| WafBrain | شبكة عصبية متكررة |
| ML-Based-WAF | SVM غير خطي |
| ML-Based-WAF | الانحدار التدرج العشوائي |
| ML-Based-WAF | AdaBoost |
| قائم على الرموز | Naive Bayes |
| قائم على الرموز | Random Forest |
| قائم على الرموز | SVM خطي |
| قائم على الرموز | SVM غاوسي |
| SQLiGoT - موجه متناسب | SVM غاوسي |
| SQLiGoT - موجه غير متناسب | SVM غاوسي |
| SQLiGoT - غير موجه متناسب | SVM غاوسي |
| SQLiGoT - غير موجه غير متناسب | SVM غاوسي |