
Cake Fuzzer هو مشروع يهدف إلى المساعدة في اكتشاف الثغرات الأمنية تلقائياً وبشكل مستمر في تطبيقات الويب التي تم إنشاؤها استناداً إلى أطر عمل محددة، مع عدد محدود جداً من النتائج الإيجابية الخاطئة.
أحدث إصدار: 1.0
الترخيص: GNU GPL v3.0
Cake Fuzzer هو مشروع يهدف إلى المساعدة في اكتشاف الثغرات الأمنية بشكل تلقائي ومستمر في تطبيقات الويب التي تم إنشاؤها بناءً على أطر عمل محددة، مع عدد محدود جدًا من النتائج الإيجابية الزائفة. حاليًا، تم تنفيذه لدعم إطار عمل Cake PHP.
إذا كنت ترغب في معرفة المزيد عن عملية البحث، تحقق من سلسلة المقالات هذه: بحث الأمن السيبراني لتطبيقات CakePHP
فيما يلي قائمة ببعض الثغرات التي اكتشفها Cake Fuzzer:
| العنوان | الشدة | الرابط |
|---|---|---|
| حقن SQL أعمى في Cerebrate | 9.8 حرجة | https://zigrin.com/advisories/cerebrate-blind-sql-injection/ |
| حقن SQL في مكون CRUD | 8.8 عالية | https://zigrin.com/advisories/misp-sql-injection-in-crud-component/ |
| XSS قائم على DOM | 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/ |
| حقن SQL زمني في /Logs/index | 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:
cd ~/Downloads # أو أي مكان ترغب في تخزين جهاز MISP الافتراضي
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
قم بتنفيذ الإجراءات التالية في واجهة VMWare الرسومية لتجهيز مشاركة ملفات Cake Fuzzer بين نظام المضيف و MISP:
قم بتشغيل الأوامر التالية على نظام المضيف (استبدل MISP_IP_ADDRESS بعنوان IP الذي لاحظته سابقًا):
ssh-copy-id misp@MISP_IP_ADDRESS
ssh misp@MISP_IP_ADDRESS
بمجرد الاتصال بـ MISP عبر SSH، قم بتشغيل الأوامر التالية (في محطة 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 # إذا سارت الأمور بشكل جيد، يجب أن ترى محتوى دليل Cake Fuzzer من نظام المضيف. أي تغييرات على نظام المضيف ستنعكس داخل الجهاز الافتراضي والعكس صحيح.
قم بتجهيز 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.
لإضافة هجوم جديد، نحتاج إلى إضافة ملف new-attack.json جديد إلى مجلد strategies.
كل ثغرة تحتوي على حقلين رئيسيين: 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 ينفذ كل سيناريو فردي في جميع المسارات المكتشفة الممكنة عدة مرات. من ناحية أخرى، يتم فحص جميع الاستجابات وإدخالات السجل الجديدة وما إلى ذلك باستمرار بواسطة الماسحات الضوئية. سيتم اكتشاف العديد من المعاملات والمسارات ونقاط النهاية، وبالتالي فإن استخدام حمولة أكثر أو Scanner يؤثر على الكفاءة بشكل كبير.
إذا كنت لا ترغب في فحص فئة ثغرة معينة، فقم بإزالة ملف json المحدد من مجلد strategies، وقم بتنظيف قاعدة البيانات، ثم قم بتشغيل المقحم مرة أخرى.
على سبيل المثال، إذا كنت لا ترغب في فحص تطبيقك بحثًا عن ثغرات حقن SQL، فاتبع الخطوات التالية:
أولاً، قم بإزالة سيناريوهات الهجوم المعدة بالفعل. لتحقيق ذلك، احذف جميع الملفات داخل مجلد /cake_fuzzer/databases:
rm /cake_fuzzer/databases/*
بعد ذلك، قم بإزالة ملف sqlinj.json من مجلد /cake_fuzzer/strategies
rm /cake_fuzzer/strategies/sqlinj.json
أخيرًا، أعد تشغيل المقحم وجميع عمليات 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 بتجاوز حماية Blackhole و 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 # يقوم بتوليد الهجمات، إضافتها إلى قائمة الانتظار وتسجيل الماسحات الضوئية الجديدة (ثم يخرج)
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 # يبدأ قائمة انتظار الهجوم (استخدم 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 محطات طرفية
تقوم قائمة انتظار الهجوم بوضع علامة على الهجمات المنفذة في قاعدة البيانات على أنها 'منفذة'، لذا لتشغيل المجموعة الكاملة مرة أخرى، تحتاج إلى إزالة قاعدة البيانات وإضافة الهجمات مرة أخرى.
تأكد من إيقاف المراقبين وقوائم انتظار الهجوم قبل إزالة قاعدة البيانات.
rm database.db*
python cake_fuzzer.py run fuzzer
python cake_fuzzer.py run attack_queue
من المحتمل أن يكون هذا بسبب أن ملفات السجل السابقة قد تم استبدالها بواسطة المستخدم الجذر (root). يعمل Cake Fuzzer كمستخدم جذر، لذلك سيتم إنشاء ملفات سجل جديدة مع المالك الجذر. قم بإزالتها:
chmod -R a+w /var/www/MISP/app/tmp/logs/*
إذا كنت تستخدم جهازًا افتراضيًا مع مشاركة cake fuzzer مع جهاز المضيف، فتأكد من أن دليل المضيف متصل بشكل صحيح بالجهاز الافتراضي الضيف:
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، يجب أن ينتج عن كلا الأمرين نفس عدد التغييرات.
إذا واجهت أي خطأ متعلق بـ "patch"، يمكنك تطبيق التصحيحات يدويًا وحذف ملف التصحيح الإشكالي. توجد التصحيحات في دليل /cake_fuzzer/cakefuzzer/instrumentation/pathces.
أثناء التثبيت أو التشغيل، إذا واجهت خطأ في تبعيات Python، فقم بتثبيت التبعيات يدويًا بعد التبديل إلى البيئة الافتراضية.
أولاً، قم بالتبديل إلى البيئة الافتراضية
source venv/bin/activate
بعد ذلك، يمكنك تثبيت التبعيات باستخدام pip3.
pip3 install -r requriments.txt
هذا المشروع مستوحى من:
تم تكليف هذا المشروع من قبل: