
केक फ़ज़र एक परियोजना है जो विशिष्ट फ्रेमवर्क पर आधारित वेब अनुप्रयोगों में बहुत सीमित झूठी सकारात्मकताओं के साथ स्वचालित रूप से और लगातार कमजोरियों की खोज करने में मदद करने के लिए है।
नवीनतम रिलीज़: 1.0
लाइसेंस: GNU GPL v3.0
Cake Fuzzer एक परियोजना है जिसका उद्देश्य विशिष्ट फ्रेमवर्क पर आधारित वेब एप्लिकेशन में कम झूठी सकारात्मकता के साथ स्वचालित और निरंतर रूप से कमजोरियों की खोज करने में मदद करना है। वर्तमान में इसे Cake PHP फ्रेमवर्क को सपोर्ट करने के लिए लागू किया गया है।
यदि आप शोध प्रक्रिया के बारे में अधिक जानना चाहते हैं, तो इस लेख श्रृंखला को देखें: CakePHP एप्लिकेशन साइबर सुरक्षा अनुसंधान
नीचे Cake Fuzzer द्वारा खोजी गई कुछ बग्स की सूची दी गई है:
| शीर्षक | गंभीरता | लिंक |
|---|
| Cerebrate में ब्लाइंड SQL इंजेक्शन | 9.8 गंभीर | https://zigrin.com/advisories/cerebrate-blind-sql-injection/ |
| CRUD घटक में SQL इंजेक्शन | 8.8 उच्च | https://zigrin.com/advisories/misp-sql-injection-in-crud-component/ |
| DOM-आधारित XSS | 6.1 मध्यम | https://zigrin.com/advisories/misp-dom-based-xss/ |
| ऑर्डर पैरामीटर में ब्लाइंड SQL इंजेक्शन | 8.8 उच्च | https://zigrin.com/advisories/misp-blind-sql-injection-in-order-parameter/ |
| ऐरे इनपुट पैरामीटर में ब्लाइंड SQL इंजेक्शन | 8.8 उच्च | https://zigrin.com/advisories/misp-blind-sql-injection-in-array-input-parameters/ |
| /Logs/index में टाइम-आधारित SQL इंजेक्शन | 7.2 उच्च | https://zigrin.com/advisories/misp-time-based-sql-injection-in-logs-index/ |
वेब एप्लिकेशन में स्वचालित उपकरणों का उपयोग करके कमजोरियों की खोज के सामान्य दृष्टिकोण हैं:
दोनों विधियों के नुकसान हैं। SAST के परिणामस्वरूप उच्च प्रतिशत झूठी सकारात्मकता होती है – ऐसे निष्कर्ष जो या तो कमजोरियां नहीं हैं या शोषण योग्य कमजोरियां नहीं हैं। DAST के परिणामस्वरूप कम झूठी सकारात्मकता होती है लेकिन सीमित जानकारी के कारण कम कमजोरियों का पता चलता है। इसके लिए एप्लिकेशन के बारे में कुछ ज्ञान और स्कैन चलाने वाले व्यक्ति की सुरक्षा पृष्ठभूमि की भी आवश्यकता होती है। इसके लिए ठीक से काम करने के लिए अक्सर प्रति एप्लिकेशन एक कस्टम स्कैन कॉन्फ़िगरेशन की आवश्यकता होती है।
Cake Fuzzer परियोजना दोनों दृष्टिकोणों के लाभों को संयोजित करने और उपरोक्त नुकसानों को समाप्त करने के लिए है। इस दृष्टिकोण को इंटरेक्टिव एप्लिकेशन सुरक्षा परीक्षण (IAST) कहा जाता है।
परियोजना के लक्ष्य हैं:
नोट: कुछ प्रकार की कमजोरियां Cake Fuzzer का लक्ष्य नहीं हैं, इसलिए Cake Fuzzer उनका पता लगाने में सक्षम नहीं होगा। उन प्रकारों के उदाहरण व्यावसायिक तर्क कमजोरियां और पहुंच नियंत्रण समस्याएं हैं।

Drawio: Cake Fuzzer आर्किटेक्चर
Cake Fuzzer में 3 मुख्य (काफी स्वतंत्र) सर्वर शामिल हैं जो कुल मिलाकर CakePHP एप्लिकेशन के गतिशील भेद्यता परीक्षण की अनुमति देते हैं।
अन्य घटकों में शामिल हैं:
Cake Fuzzer इंटरेक्टिव एप्लिकेशन सुरक्षा परीक्षण (IAST) की अवधारणा पर आधारित है। इसमें हमलों का एक पूर्वनिर्धारित सेट होता है जिसे निष्पादन से पहले बेतरतीब ढंग से संशोधित किया जाता है। Cake Fuzzer को Cake PHP फ्रेमवर्क के कारण एप्लिकेशन के आंतरिक कार्यों का ज्ञान होता है, इसलिए हमले एप्लिकेशन के सभी संभावित प्रवेश बिंदुओं पर लॉन्च किए जाएंगे।
हमले के दौरान, Cake Fuzzer एप्लिकेशन और अंतर्निहित सिस्टम के विभिन्न पहलुओं की निगरानी करता है जैसे:
जानकारी के ये स्रोत Cake Fuzzer को अधिक कमजोरियों की पहचान करने और उन्हें उच्च निश्चितता के साथ रिपोर्ट करने की अनुमति देते हैं।
निम्नलिखित अनुभाग Cake Fuzzer विकास पर्यावरण स्थापित करने के चरणों का वर्णन करता है जहां लक्ष्य पुराना MISP v2.4.146 है जो CVE-2021-41326 के लिए कमजोर है।
अपने होस्ट ऑपरेटिंग सिस्टम पर एक पुराना MISP VM डाउनलोड करने के लिए निम्नलिखित कमांड चलाएँ:
cd ~/Downloads # या जहाँ भी आप MISP VM स्टोर करना चाहते हैं
wget https://vm.misp-project.org/MISP_v2.4.146@0c25b72/[email protected] -O MISP.zip
unzip MISP.zip
rm MISP.zip
mv VMware/ MISP-2.4.146
अपने होस्ट OS और MISP के बीच Cake Fuzzer फ़ाइलों को साझा करने के लिए VMWare GUI में निम्नलिखित क्रियाएँ करें:
अपने होस्ट OS पर निम्नलिखित कमांड चलाएँ (MISP_IP_ADDRESS को पहले नोट किए गए IP पते से बदलें):
ssh-copy-id misp@MISP_IP_ADDRESS
ssh misp@MISP_IP_ADDRESS
एक बार जब आप MISP में SSH कर लें, तो होस्ट OS और MISP के बीच Cake Fuzzer फ़ाइलों को साझा करने की सेटअप पूरी करने के लिए निम्नलिखित कमांड चलाएँ (MISP टर्मिनल में):
sudo apt update
sudo apt-get -y install open-vm-tools open-vm-tools-desktop
sudo apt-get -y install build-essential module-assistant linux-headers-virtual linux-image-virtual && sudo dpkg-reconfigure open-vm-tools
sudo mkdir /cake_fuzzer # नोट: यह पथ निश्चित है क्योंकि यह इंस्ट्रुमेंटेशन (एक पैच) में हार्डकोडेड है
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000 -o max_write=61440
# max_write अजीब फ़ाइल कॉपी बग को ठीक करता है: https://github.com/vmware/open-vm-tools/issues/437#issuecomment-669663891
ls -l /cake_fuzzer # यदि सब कुछ ठीक रहा तो आपको अपने होस्ट OS से Cake Fuzzer निर्देशिका की सामग्री दिखाई देनी चाहिए। आपके होस्ट OS पर कोई भी परिवर्तन VM के अंदर दिखाई देगा और इसके विपरीत।
MISP को सरल परीक्षण के लिए तैयार करें (MISP टर्मिनल में):
CAKE=/var/www/MISP/app/Console/cake
SUDO='sudo -H -u www-data'
$CAKE userInit -q
$SUDO $CAKE Admin setSetting "Security.password_policy_length" 1
$SUDO $CAKE Admin setSetting "Security.password_policy_complexity" '/.*/'
$SUDO $CAKE Password [email protected] admin --override_password_change
अंत में Cake Fuzzer निर्भरताएं स्थापित करें और वेनव तैयार करें (MISP टर्मिनल में):
source /cake_fuzzer/precheck.sh
Cake Fuzzer /cake_fuzzer/strategies फ़ोल्डर के अंदर कमजोरियों के लिए स्कैन करता है।
एक नया हमला जोड़ने के लिए हमें strategies फ़ोल्डर में एक नया new-attack.json फ़ाइल जोड़नी होगी।
प्रत्येक भेद्यता में 2 मुख्य फ़ील्ड होते हैं: Scenarios और Scanners। Scenarios वह जगह है जहाँ हमले के पेलोड के आधार रूप संग्रहीत होते हैं। दूसरी ओर Scanners प्रतिक्रिया, स्टडआउट, स्टडरर, लॉग और परिणामों के लिए रेगेक्स या वाक्यांशों का पता लगाते हैं।
Scenarios के लिए पेलोड बनानापेलोड बनाने के लिए पहले आपको भेद्यता और यह समझने की आवश्यकता है कि इसे यथासंभव कम पेलोड के साथ कैसे पता लगाया जाए।
परिदृश्य का निर्माण करते समय आपको यथासंभव सामान्य पेलोड के बारे में सोचना चाहिए। हालांकि, जितना अधिक सामान्य पेलोड होगा, उतनी ही अधिक संभावना है कि यह झूठी सकारात्मकता उत्पन्न करेगा।
अपने परिदृश्यों में __cakefuzzer__new-attack_§CAKEFUZZER_PAYLOAD_GUID§__ जैसे कैनरी मान का उपयोग करना बेहतर है।
कैनरी मान में एक निश्चित स्ट्रिंग (उदाहरण के लिए: __cakefuzzer__new-attack_) और एक गतिशील पहचानकर्ता होता है जो फज़र द्वारा गतिशील रूप से बदला जाएगा (GUID भाग §CAKEFUZZER_PAYLOAD_GUID§)। पहले कैनरी भाग का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि पेलोड का Scanners द्वारा पता लगाया जाए। दूसरा कैनरी भाग, GUID, आपके पेलोड के प्रत्येक निष्पादन पर छद्म-यादृच्छिक मान में अनुवादित किया जाता है। इसलिए जब भी आपका पेलोड एप्लिकेशन द्वारा उपयोग किए गए किसी पैरामीटर में इंजेक्ट किया जाएगा, तो कैनरी कुछ इस तरह बदल जाएगा: __cakefuzzer__new-attack_8383938__, जहाँ 8383938 अन्य सभी हमलों में अद्वितीय है।
Scanners का पता लगाना और उत्पन्न करनास्कैनर बनाने के लिए, पहले आपको यह समझना होगा कि जब भेद्यता ट्रिगर होती है तो एप्लिकेशन कैसे व्यवहार कर सकता है। कुछ स्कैनर प्रकार हैं जिनका आप उपयोग कर सकते हैं जैसे प्रतिक्रिया, स्टडरर, लॉग, फ़ाइलें और प्रक्रियाएं। प्रत्येक स्कैनर एक अलग उद्देश्य प्रदान करता है।
उदाहरण के लिए जब आप XSS के लिए स्कैनर बना रहे हैं, तो आप एप्लिकेशन के HTML प्रतिक्रिया में भेद्यता के संकेत की तलाश करेंगे। आप कैनरी मान और पेलोड की तलाश के लिए ResultOutputScanner स्कैनर का उपयोग कर सकते हैं। दूसरी ओर SQL इंजेक्शन कमजोरियों का पता त्रुटि लॉग के माध्यम से लगाया जा सकता है। इस उद्देश्य के लिए आप LogFilesContentsScanner और ResultErrorsScanner का उपयोग कर सकते हैं।
Scanner नियमित अभिव्यक्तियों का अंतिम गुण एक कुशल रेगेक्स उत्पन्न करना है। उन रेगेक्स का उपयोग करने से बचें जो सभी मामलों से मेल खाते हैं .* या .+। वे बहुत समय लेने वाले होते हैं और पूरे स्कैन को पूरा करने में लगने वाले समय को नाटकीय रूप से बढ़ाते हैं।जैसा कि पहले उल्लेख किया गया है, दक्षता कमजोरियों का एक महत्वपूर्ण हिस्सा है। दोनों Scenarios और Scanners में यथासंभव कम तत्व शामिल होने चाहिए। ऐसा इसलिए है क्योंकि Cake Fuzzer प्रत्येक एकल परिदृश्य को सभी संभावित पाए गए पथों में कई बार निष्पादित करता है। दूसरी ओर, सभी प्रतिक्रियाएं, नई लॉग प्रविष्टियां आदि लगातार Scanners द्वारा जांची जाती हैं। बहुत सारे पैरामीटर, पथ और एंडपॉइंट का पता लगाया जाना चाहिए और इसलिए अधिक पेलोड या Scanner का उपयोग करना दक्षता को काफी प्रभावित करता है।
यदि आप किसी विशिष्ट भेद्यता वर्ग को स्कैन नहीं करना चाहते हैं, तो strategies फ़ोल्डर से निर्दिष्ट json फ़ाइल हटाएं, डेटाबेस साफ़ करें और फिर से fuzzer चलाएं।
उदाहरण के लिए यदि आप अपने एप्लिकेशन को SQL इंजेक्शन कमजोरियों के लिए स्कैन नहीं करना चाहते हैं, तो निम्नलिखित चरण करें:
सबसे पहले पहले से तैयार हमले के परिदृश्यों को हटा दें। इसे प्राप्त करने के लिए /cake_fuzzer/databases फ़ोल्डर के अंदर सभी फ़ाइलों को हटा दें:
rm /cake_fuzzer/databases/*
उसके बाद /cake_fuzzer/strategies से sqlinj.json फ़ाइल हटाएं:
rm /cake_fuzzer/strategies/sqlinj.json
अंत में fuzzer को फिर से चलाएं और सभी cake_fuzzer चल रही प्रक्रियाओं को बिना किसी SQL इंजेक्शन हमले के निष्पादित करें।
git clone https://github.com/Zigrin-Security/CakeFuzzer /cake_fuzzer
चेतावनी Cake Fuzzer
/cake_fuzzerके अलावा किसी अन्य पथ पर ठीक से काम नहीं करेगा। ध्यान रखें कि इसे फ़ाइल सिस्टम की रूट निर्देशिका के अंतर्गत रखा जाना चाहिए,/root,/tmpआदि के बगल में।
cd /cake_fuzzer
यदि आप पहले से वर्चुअल एनवायरनमेंट में नहीं हैं तो इसमें प्रवेश करें:
source /cake_fuzzer/precheck.sh
या
source venv/bin/activate
cp config/config.example.ini config/config.ini
config/config.ini कॉन्फ़िगर करें:
WEBROOT_DIR="/var/www/html" # परीक्षण किए गए एप्लिकेशन के `webroot` निर्देशिका का पथ
CONCURRENT_QUEUES=5 # [वैकल्पिक] एक साथ निष्पादित हमलों की संख्या
ONLY_PATHS_WITH_PREFIX="/" # [वैकल्पिक] फज़र केवल इस उपसर्ग से शुरू होने वाले हमलों के लिए हमले उत्पन्न करेगा
EXCLUDE_PATHS="" # [वैकल्पिक] फज़र उन सभी पथों को स्कैन करने से बाहर कर देगा जो इस नियमित अभिव्यक्ति से मेल खाते हैं। यदि यह खाली है, तो सभी पथों को संसाधित किया जाएगा
PAYLOAD_GUID_PHRASE="§CAKEFUZZER_PAYLOAD_GUID§" # [वैकल्पिक] आंतरिक कीवर्ड जो हमले से ठीक पहले अद्वितीय पेलोड आईडी के साथ प्रतिस्थापित किया जाता है
INSTRUMENTATION_INI="config/instrumentation_cake4.ini" # [वैकल्पिक] एप्लिकेशन के कस्टम इंस्ट्रुमेंटेशन का पथ
चेतावनी Cake Fuzzer स्कैन के दौरान, आपके एप्लिकेशन की कई कार्यक्षमताओं को अनियंत्रित तरीके से कई बार आह्वान किया जाएगा। इसके परिणामस्वरूप आपके एप्लिकेशन से जुड़ी बाहरी सेवाओं से कनेक्शन जारी हो सकते हैं, और उनसे डेटा खींचा या धकेला जा सकता है। संवेदनशील बाहरी सेवाओं तक पहुंच के बिना पृथक नियंत्रित वातावरण में Cake Fuzzer चलाने की अत्यधिक अनुशंसा की जाती है।
नोट Cake Fuzzer ब्लैकहोलिंग, CSRF सुरक्षा और प्राधिकरण को बायपास करता है। यह डेटाबेस में पहले उपयोगकर्ता के विशेषाधिकारों के साथ सभी हमले भेजता है। यह अनुशंसा की जाती है कि इस उपयोगकर्ता के पास उच्चतम अनुमतियां हों।
एप्लिकेशन में कई घटक शामिल हैं।
चेतावनी सभी cake_fuzzer कमांड को root के रूप में निष्पादित किया जाना चाहिए।
फज़र शुरू करने से पहले सुनिश्चित करें कि आपका लक्ष्य एप्लिकेशन पूरी तरह से इंस्ट्रुमेंटेड है:
python cake_fuzzer.py instrument check
यदि कुछ अप्रयुक्त परिवर्तन हैं तो उन्हें इसके साथ लागू करें:
python cake_fuzzer.py instrument apply
Cake fuzzer चलाने के लिए निम्नलिखित करें (कम से कम 3 अलग-अलग टर्मिनल का उपयोग करने की अनुशंसा की जाती है):
# पहला टर्मिनल
python cake_fuzzer.py run fuzzer # हमले उत्पन्न करता है, उन्हें QUEUE में जोड़ता है और नए SCANNERS पंजीकृत करता है (फिर बाहर निकलता है)
python cake_fuzzer.py run periodic_monitors # निगरानी के लिए जिम्मेदार (रोकने के लिए CTRL+C का उपयोग करें और स्कैन के अंत में बाहर निकलें)
# दूसरा टर्मिनल
python cake_fuzzer.py run iteration_monitors # निगरानी के लिए जिम्मेदार (रोकने के लिए CTRL+C का उपयोग करें और स्कैन के अंत में बाहर निकलें)
# तीसरा टर्मिनल
python cake_fuzzer.py run attack_queue # ATTACK QUEUE शुरू करता है (रोकने के लिए CTRL+C का उपयोग करें और स्कैन के अंत में बाहर निकलें)
# एक बार सभी हमले निष्पादित हो जाने के बाद
python cake_fuzzer.py run registry # पाई गई कमजोरियों के आधार पर `results.json` उत्पन्न करता है
नोट: वर्तमान में एक बग है जो लॉग (या लक्ष्य वेब ऐप की किसी भी अन्य गतिशील रूप से बदली गई फ़ाइलों) के स्वामी को बदल सकता है। इससे वेब एप्लिकेशन का सामान्य रूप से उपयोग करते समय त्रुटियां हो सकती हैं या भविष्य के Cake Fuzzer निष्पादनों पर झूठी-नकारात्मकता भी हो सकती है। MISP के लिए हम फ़ज़र के प्रत्येक निष्पादन के बाद निम्नलिखित चलाने की अनुशंसा करते हैं:
sudo chown -R www-data:www-data /var/www/MISP/app/tmp/logs/
एक बार आपका स्कैन समाप्त हो जाए, तो इंस्ट्रुमेंटेशन को वापस लाएं:
python cake_fuzzer.py instrument revert
Cake fuzzer को फिर से चलाने के लिए, निम्नलिखित करें:
एप्लिकेशन लॉग हटाएं (उदाहरण के रूप में, MISP लॉग /var/www/MISP/app/tmp/logs में संग्रहीत हैं):
rm /var/www/MISP/app/tmp/logs/*
/cake_fuzzer/databases फ़ोल्डर के अंदर सभी फ़ाइलों को हटाएं:
rm /cake_fuzzer/databases/*
cake_fuzzer/results.json फ़ाइल हटाएं (पहले पिछले स्कैन परिणामों को सहेजना या जांचना न भूलें):
rm /cake_fuzzer/results.json
अंत में 3 टर्मिनलों के साथ पिछली चलाने की प्रक्रिया का फिर से पालन करें
अटैक क्यू डेटाबेस में निष्पादित हमलों को 'executed' के रूप में चिह्नित करता है, इसलिए पूरे सूट को फिर से चलाने के लिए आपको डेटाबेस को हटाना और हमलों को फिर से जोड़ना होगा।
डेटाबेस हटाने से पहले मॉनिटर और अटैक क्यू को मारना सुनिश्चित करें।
rm database.db*
python cake_fuzzer.py run fuzzer
python cake_fuzzer.py run attack_queue
यह संभवतः इस तथ्य के कारण है कि पिछली लॉग फ़ाइलों को root द्वारा अधिलेखित कर दिया गया था। Cake Fuzzer root के रूप में काम करता है, इसलिए नई लॉग फ़ाइलें root को स्वामी के रूप में बनाई जाएंगी। उन्हें हटाएं:
chmod -R a+w /var/www/MISP/app/tmp/logs/*
यदि आप अपने होस्ट मशीन के साथ cake fuzzer साझा करने के लिए VM का उपयोग करते हैं, तो सुनिश्चित करें कि होस्ट निर्देशिका गेस्ट VM से ठीक से जुड़ी हुई है:
sudo vmhgfs-fuse .host:/cake_fuzzer /cake_fuzzer -o allow_other -o uid=1000
Cake Fuzzer मशीन की रूट निर्देशिका के अंतर्गत स्थित होना चाहिए और आधार निर्देशिका का नाम विशेष रूप से cake_fuzzer होना चाहिए।
mv CakeFuzzer/ /cake_fuzzer
instrument apply चलाने पर "पैच" त्रुटियांइंस्ट्रुमेंटेशन प्रक्रिया Cake Fuzzer निष्पादन प्रवाह का एक हिस्सा है। जब आप instrument apply और फिर instrument check चलाते हैं, तो इन दोनों कमांड के परिणामस्वरूप समान संख्या में परिवर्तन होने चाहिए।
यदि आपको कोई "पैच" त्रुटि मिलती है, तो आप पैच को मैन्युअल रूप से लागू कर सकते हैं और समस्या पैदा करने वाली पैच फ़ाइल को हटा सकते हैं। पैच /cake_fuzzer/cakefuzzer/instrumentation/pathces निर्देशिका के अंतर्गत स्थित हैं।
स्थापना या चलाने के दौरान यदि आपको पायथन निर्भरता त्रुटि मिलती है, तो वर्चुअल एनवायरनमेंट पर स्विच करने के बाद निर्भरताओं को मैन्युअल रूप से स्थापित करें।
पहले वर्चुअल एनवायरनमेंट पर स्विच करें:
source venv/bin/activate
उसके बाद आप pip3 के साथ निर्भरताएं स्थापित कर सकते हैं।
pip3 install -r requriments.txt
यह परियोजना निम्नलिखित से प्रेरित थी:
यह परियोजना निम्नलिखित द्वारा कमीशन की गई थी: