
WAFs के परीक्षण हेतु फ्रेमवर्क (FTW!)
यह परियोजना ModSecurity और Fastly के शोधकर्ताओं द्वारा WAF नियमों के लिए कठोर परीक्षण प्रदान करने में मदद के लिए बनाई गई थी। यह WAF पर नियमों का परीक्षण करने के लिए आधार रेखा के रूप में OWASP Core Ruleset V3 का उपयोग करता है। नियम सेट के प्रत्येक नियम को एक YAML फ़ाइल में लोड किया जाता है जो इन नियमों को ट्रिगर करने वाले HTTP अनुरोध जारी करता है।
लक्ष्य / उपयोग मामले शामिल हैं:
git clone [email protected]:fastly/ftw.gitcd ftwMake sure that pip is installed apt-get install python-pip``pip install -r requirements.txtpy.test test/test_default.py --ruledir test/yamlयदि आपको WAF नियमों के परीक्षण के लिए एक वातावरण की आवश्यकता है, तो Apache, Modsecurity और OWASP कोर नियम सेट के संस्करण 3.0.0 के साथ एक बनाया गया है। इसे निम्न द्वारा तैनात किया जा सकता है:
vagrant uppy.test test/test_default.py --ruledir=test/yaml --destaddr=domain.com --port 443 --protocol httpspy.test test/integration/test_logcontains.py -s --ruledir=test/integration/*.py फ़ाइल बनाएं, एक उदाहरण test/integration/test_logcontains.py में दिखाया गया हैtest* वाले सभी फ़ंक्शन py.test द्वारा चलाए जाएंगे, इसलिए एक फ़ंक्शन def test_somewaf बनाएंLogChecker से विरासत में मिलता है
get_logs() फ़ंक्शन लागू करें। FTW परीक्षण चलाने के बाद इस फ़ंक्शन को कॉल करेगा, और यह self.start और self.end के डेटटाइम सेट करेगाget_logs() से लौटाएंpy.test fixtures का उपयोग करें। एक फंक्शन डेकोरेटर @pytest.fixture का उपयोग करें, अपना नया ऑब्जेक्ट लौटाएं। जब भी आप अपने परीक्षणों में एक फंक्शन आर्गुमेंट का उपयोग करते हैं जो उस के नाम से मेल खाता है, तो यह आपके ऑब्जेक्ट को इंस्टेंटिएट करेगा और परीक्षण चलाना आसान बनाएगा। इसका एक उदाहरण चरण 1 की पायथन फ़ाइल में है।हालांकि YAML प्रारूप का उपयोग करके अनुरोध करना पसंद किया जाता है, अक्सर स्वचालित परीक्षणों में कई गतिशील अनुरोध करने की आवश्यकता होती है। ऐसे मामले में संपूर्ण के हिस्से के रूप में चलाए जा सकने वाले परीक्षण मामलों का उत्पादन करने के लिए py.test ढाँचे का उपयोग करने की अनुशंसा की जाती है। सामान्यतः HTTP अनुरोध करना सरल है:
HttpUA() क्लास का एक इंस्टेंस बनाएंInput() क्लास का एक इंस्टेंस बनाएं जो उन पैरामीटरों को प्रदान करता है जिन्हें आप डिफ़ॉल्ट नहीं करना चाहते हैंHttpUA.send_request() को प्रदान करेंकुछ उदाहरणों के लिए http एकीकरण परीक्षण देखें
LogChecker@pytest.fixture*.yaml प्रारूप में एक परीक्षण कॉन्फ़िगरेशन लिखें जैसा कि test/integration/LOGCONTAINSFIXTURE.yaml में देखा गया है, log_contains पंक्ति में एक स्ट्रिंग की आवश्यकता होती है जो एक regex है। FTW YAML फ़ाइल में प्रत्येक चरण से log_contains स्ट्रिंग को एक regex में संकलित करेगा। फिर इस regex का उपयोग get_logs() से पारित लॉग की पंक्तियों के साथ मिलान खोजने के लिए किया जाएगा। log_contains स्ट्रिंग, तब, एक अद्वितीय नियम-आईडी होनी चाहिए क्योंकि FTW लालची है और पहले मैच पर आगे बढ़ेगा। LogChecker ऑब्जेक्ट को पारित शुरू/अंत समय से झूठी सकारात्मकता को कम किया जाता है, लेकिन सुरक्षित रहने और अद्वितीय regex का उपयोग करना सबसे अच्छा है।get_logs() फ़ंक्शन को कॉल किया जाता है, इसलिए यदि आप इस तरह से अपने लॉग प्राप्त करते हैं तो API कॉल के लिए खाता बनाना सुनिश्चित करें।