اختبار الزغب (Fuzzing) البرنامج التعليمي

⚡ ملخص ذكي

يقوم اختبار Fuzz بإدخال بيانات غير صالحة أو غير متوقعة أو عشوائية إلى البرنامج ويراقب الأعطال والتوقفات وأخطاء الذاكرة، مما يكشف عن عيوب أمنية لا تصل إليها الاختبارات الوظيفية المكتوبة من تلقاء نفسها.

  • 🔘 الأصل: صاغ بارتون ميلر المصطلح في جامعة ويسكونسن-ماديسون، وأدت أولى عمليات اختبار التشويش في عام 1989 إلى تعطل ما يقرب من ثلث أدوات يونكس التي تم اختبارها.
  • ☑️ حلقة من ست خطوات: حدد الهدف، وحدد المدخلات، وقم بإنشاء بيانات ضبابية، ونفذ، وراقب السلوك، ثم سجل كل عيب يظهر.
  • ✅ استراتيجيات الأجيال الثلاثة: تقوم أدوات اختبار الطفرات بتشويه العينات الصالحة، وتقوم أدوات اختبار التوليد ببناء المدخلات من نموذج، وتعمل أدوات اختبار البروتوكولات من مواصفات محددة.
  • 🧪 أدت ملاحظات التغطية إلى تغيير المجال: تحتفظ المحركات الحديثة بأي مدخلات تصل إلى التعليمات البرمجية الجديدة، والتي تجد أخطاءً أعمق بكثير من البيانات العشوائية البحتة.
  • 🛠️ لقد تطورت صناعة الأدوات: تمت أرشفة Peach Fuzzer و WebScarab، بينما AFL++ و libFuzzer و OSS-Fuzz و boofuzz ​​و OWASP ZAP هي الخيارات التي يتم صيانتها.
  • ⚙️ الحدود المعروفة: يكتشف اختبار الاختراق الأعطال، وليس العيوب المنطقية، لذا فهو يكمل مراجعة التعليمات البرمجية واختبار الاختراق بدلاً من أن يحل محلهما.

اختبار الزغب (Fuzzing) البرنامج التعليمي

ما هو اختبار الزغب؟

اختبار التشويش أو اختبار التشويش اختبار التشويش هو أسلوب لاختبار البرمجيات يعتمد على إدخال بيانات غير صالحة أو عشوائية تُسمى بيانات التشويش (FUZZ) في نظام برمجي لاكتشاف أخطاء البرمجة والثغرات الأمنية. يهدف اختبار التشويش إلى إدخال البيانات باستخدام تقنيات آلية أو شبه آلية، واختبار النظام بحثًا عن استثناءات مختلفة، مثل تعطل النظام أو فشل التعليمات البرمجية المدمجة.

طُوِّر اختبار التشويش في الأصل على يد بارتون ميلر في جامعة ويسكونسن-ماديسون، الذي صاغ المصطلح بعد أن تسبب تشويش الخط على وصلة المودم في تعطل البرامج التي كان يستخدمها. أجرى طلابه أولى اختبارات التشويش في عام 1989، ووجدوا أن ما يقرب من ثلث أدوات يونكس التي استهدفوها تعطلت أو توقفت عن العمل. اختبار التشويش هو اختبار البرمجيات تقنية، وهي نوع من اختبار الأمان.

يوضح الرسم البياني أدناه حلقة الاختبار العشوائي الأساسية، حيث يتم دفع البيانات المولدة إلى التطبيق قيد الاختبار ويتم مراقبة الاستجابة.

سير عمل اختبار التشويش: يقوم برنامج التشويش بتوليد مدخلات غير صحيحة وإدخالها إلى التطبيق قيد الاختبار.

لماذا يجب إجراء اختبار الزغب؟

يكتسب اختبار التشويش مكانته في خطة الاختبار لأنه يستكشف المدخلات التي لم يفكر أحد في كتابة حالة اختبار لها. وفيما يلي الأسباب الرئيسية التي تدفع الفرق إلى تبنيه.

  • عادةً ما يكشف اختبار التشويش عن أخطر الأخطاء والعيوب الأمنية، لأن العطل هو دليل مباشر على وجود مسار إدخال غير معالج.
  • يُعطي اختبار التشويش نتائج أكثر فعالية عند استخدامه مع اسود Box الاختبارواختبار بيتا وطرق التصحيح الأخرى.
  • يُستخدم اختبار Fuzz للتحقق من ثغرات البرامج، وهو أسلوب اختبار فعال من حيث التكلفة للغاية لأن المدخلات يتم إنشاؤها بدلاً من كتابتها يدويًا.
  • يُعد اختبار التشويش أحد أساليب اختبار الصندوق الأسود. كما يُعدّ التشويش من أكثر الطرق شيوعًا التي يستخدمها المخترقون لاكتشاف الثغرات الأمنية في الأنظمة، لذا فإنّ تشغيله أولًا يُزيل أسهل طريق للمهاجم للاختراق.

أنواع اختبارات التشويش

عادةً ما يتم تصنيف أدوات اختبار الثغرات الأمنية (Fuzizers) حسب مدى معرفتها بالبرنامج الذي تهاجمه. فكلما زادت معرفة أداة الاختبار، كلما تعمقت في اختراق الشيفرة البرمجية.

النوع ما يعرفه جهاز اختبار التشويش الاستخدام النموذجي
اختبار التمويه بالصندوق الأسود لا شيء عن التفاصيل الداخلية؛ فهو لا يرى سوى المدخلات والمخرجات. يتم تشغيل اختبار الدخان السريع على ملف تنفيذي أو نقطة نهاية حية.
اختبار التمويه في الصندوق الأبيض شفرة المصدر الكاملة، وغالبًا ما يتم دمجها مع التنفيذ الرمزي لحل مشكلة الفروع التي يصعب الوصول إليها. تحليل معمق لمكون تتوفر مصادره.
اختبار التمويه بالصندوق الرمادي لا توجد مراجعة للمصدر، ولكن يتم تقديم ملاحظات وقت التشغيل مثل فروع التعليمات البرمجية التي وصل إليها الإدخال. الوضع الافتراضي للمحركات الحديثة مثل AFL++ و libFuzzer.

يفصل بينهما انقسام ثانٍ أقدم التلاعب بالألفاظ من اختبار ذكييقوم برنامج الفحص العشوائي البسيط بقلب البتات دون أي فكرة عن تنسيق الإدخال، لذا يتم رفض معظم بياناته من قبل أول محلل يواجهه. أما برنامج الفحص العشوائي الذكي فيفهم المجاميع الاختبارية وحقول الطول وبنية الرسالة، لذا فإن مدخلاته تجتاز عملية التحقق وتصل إلى المنطق الأساسي. اختبار التشويش الموجه بالتغطية إن تحسين الصندوق الرمادي هو الذي جعل اختبار البرمجيات العشوائي شائعًا: يقوم المحرك بتجهيز الملف الثنائي، ويحتفظ بأي مدخلات تصل إلى فرع جديد، ويقوم بتحوير العناصر المتبقية، بحيث تتطور المجموعة بشكل مطرد نحو التعليمات البرمجية غير المستكشفة بدلاً من إعادة التشغيل من الضوضاء العشوائية.

كيفية إجراء اختبار الزغب

تتضمن خطوات اختبار التشويش خطوات الاختبار الأساسية التالية:

الخطوة 1) تحديد النظام المستهدف — اختر نقطة النهاية الثنائية أو المكتبة أو الخدمة أو البروتوكول التي سيتم مهاجمتها، وتأكد من أنه مسموح لك باختبارها.

الخطوة 2) تحديد المدخلات — سرد كل نقطة دخول يقرأ منها الهدف: الملفات، وسيطات سطر الأوامر، ومتغيرات البيئة، وحزم الشبكة، وحقول النماذج، وحمولات واجهة برمجة التطبيقات.

الخطوة 3) إنشاء بيانات مشوشة — إنتاج مدخلات مشوهة عن طريق تحوير العينات الصالحة، أو عن طريق توليدها من نموذج للتنسيق، أو عن طريق الجمع بين الاثنين.

الخطوة الرابعة) تنفيذ الاختبار باستخدام البيانات الضبابية — قم بتشغيل الهدف مقابل المدخلات التي تم إنشاؤها، ومن الأفضل أن يكون ذلك في حلقة تعيد تشغيل العملية تلقائيًا بعد كل فشل.

الخطوة 5) مراقبة سلوك النظام — راقب الأعطال، والتوقفات، وفشل التأكيدات، والاستخدام المفرط للذاكرة، وتقارير المنظف بدلاً من مجرد التحقق من المخرجات المطبوعة.

الخطوة 6) سجل العيوب — احفظ المدخلات الدقيقة التي تسببت في كل فشل، واختصرها إلى أصغر حالة قابلة للتكرار، ثم ضعها في ملف المكدس. tracمرفق.

أمثلة على الزغب

يتم تصنيف أدوات اختبار التشويش أيضًا حسب كيفية بناء مدخلاتها، والأساليب الثلاثة التالية هي التي ستصادفها في أغلب الأحيان.

  • Fuzzers القائم على الطفرة يُعدّل هذا الأسلوب عينات البيانات الموجودة لإنشاء بيانات اختبار جديدة. وهو أسلوب بسيط ومباشر للغاية: يبدأ بعينات صالحة من بروتوكول معين، ثم يستمر في تغيير كل بايت أو ملف.
  • Fuzzers على أساس الجيل يقومون بتحديد بيانات جديدة بناءً على مدخلات النموذج. ويبدأون في توليد المدخلات من الصفر بناءً على المواصفات.
  • أدوات اختبار التشويش القائمة على البروتوكول يعتمد هذا النوع من الاختبارات على معرفة دقيقة بتنسيق البروتوكول المراد اختباره، وهذه المعرفة مستمدة من المواصفات. يتضمن ذلك كتابة مصفوفة من المواصفات في الأداة، ثم استخدام تقنية توليد اختبارات قائمة على النماذج لفحص المواصفات وإضافة عدم انتظام في محتوى البيانات وتسلسلها، وما إلى ذلك. يُعرف هذا أيضًا باختبار بناء الجملة، أو اختبار القواعد، أو اختبار المتانة. يمكن لأداة اختبار الثغرات (fuzzer) توليد حالات اختبار من حالة موجودة، أو يمكنها استخدام مدخلات صحيحة أو غير صحيحة.

هناك نوعان من القيود على التشويش القائم على البروتوكول:

  1. لا يمكن مواصلة الاختبار حتى تنضج المواصفات.
  2. العديد من البروتوكولات المفيدة هي امتداد للبروتوكولات المنشورة. إذا كان اختبار الزغب يعتمد على المواصفات المنشورة، تغطية الاختبار للبروتوكولات الجديدة ستكون محدودة.

أبسط أشكال تقنية اختبار البرمجيات العشوائي هي إرسال مدخلات عشوائية إلى البرنامج، إما كحزم بروتوكول أو كحدث. تُعدّ هذه التقنية فعّالة للغاية في اكتشاف الأخطاء في العديد من التطبيقات والخدمات. تتوفر تقنيات أخرى أيضًا، وهي سهلة التطبيق. لتطبيق هذه التقنيات، نحتاج فقط إلى تغيير المدخلات الموجودة، ويمكننا تغيير أي مدخل ببساطة عن طريق تبديل بتاته.

أنواع الأخطاء التي اكتشفها اختبار Fuzz

لأن عملية اختبار البرمجيات العشوائية تحكم على التشغيل من خلال كيفية تصرف البرنامج بدلاً من القيمة المتوقعة، فإن العيوب التي تكشف عنها تتجمع في ثلاث مجموعات.

  • حالات فشل التأكيدات وتسرب الذاكرة: تُستخدم هذه المنهجية على نطاق واسع في التطبيقات الكبيرة حيث تؤثر الأخطاء على سلامة الذاكرة، وهو ما يمثل ثغرة أمنية خطيرة. Buffer تظهر هنا جميع حالات تجاوز السعة، واستخدام الذاكرة بعد تحريرها، وقراءة البيانات خارج النطاق.
  • إدخال غير صالح: في اختبار التشويش، تُستخدم أدوات التشويش لتوليد مدخلات غير صالحة تُستخدم لاختبار إجراءات معالجة الأخطاء، وهذا أمر بالغ الأهمية للبرامج التي لا تتحكم في مدخلاتها. ويمكن اعتبار التشويش البسيط وسيلةً لأتمتة... اختبار سلبي.
  • أخطاء في التصحيح: يمكن استخدام اختبار البرمجيات العشوائي (Fuzzing) أيضًا للكشف عن بعض أنواع أخطاء "الصحة"، مثل قاعدة بيانات تالفة أو نتائج بحث ضعيفة. ويُعدّ اختبار البرمجيات العشوائي التفاضلي، الذي يُدخل نفس البيانات إلى تطبيقين ويقارن النتائج، الطريقة المعتادة لاكتشاف هذه الأخطاء.

أدوات اختبار الزغب

يمكن استخدام الأدوات المستخدمة في أمن الويب على نطاق واسع في اختبارات التشويش، مثل: Burp Suite و Peach Fuzzer. تم أرشفة العديد من الأسماء الكلاسيكية المذكورة أدناه، لذا يتم ذكر حالتها الحالية بجانب كل إدخال.

  • فوزر الخوخيوفر برنامج Peach Fuzzer تغطية أمنية أكثر شمولاً من الماسح الضوئي. تقتصر أدوات الاختبار الأخرى على البحث عن التهديدات المعروفة فقط، بينما يُمكّن Peach Fuzzer المستخدمين من اكتشاف التهديدات المعروفة وغير المعروفة. استحوذت GitLab على شركة Peach Tech، ولم يعد الإصدار Community Edition v3 مدعومًا؛ أما الإصدار البديل المدعوم فهو... إصدار مجتمع GitLab Protocol Fuzzer.
  • وكيل سبايكأداة احترافية تبحث عن الثغرات الأمنية على مستوى التطبيقات في تطبيقات الويب. يغطي برنامج SPIKE Proxy الأساسيات، مثل: SQL حقن البرامج النصية عبر المواقع، على نظام مفتوح بالكامل Python البنية التحتية، وكانت متاحة لـ لينكس و Windowsلم تتم صيانته لسنوات عديدة، وقد تم إدراجه هنا للسياق التاريخي.
  • ويبسكارابتمت كتابة WebScarab بلغة Java وبالتالي، فهو قابل للنقل إلى العديد من المنصات. يتواصل إطار عمل WebScarab باستخدام بروتوكولي HTTP وHTTPS، ويعمل كوكيل اعتراض: فهو يسمح للمشغل بمراجعة وتعديل الطلبات التي يُنشئها المتصفح قبل أن يستقبلها الخادم، ومراجعة وتحديث الاستجابات التي يُنشئها الخادم قبل أن يستقبلها المتصفح. تُضاف أي ثغرة يكتشفها WebScarab إلى قائمة المشكلات المُبلغ عنها. أُرشف المستودع في أبريل 2024، وهو الآن للقراءة فقط.
  • برنامج OWASP WSFuzzerبرنامج WSFuzzer هو برنامج مرخص بموجب رخصة جنو العمومية (GPL) ومكتوب بلغة Python التي استهدفت خدمات الويب، وفي أحدث إصداراتها كانت تعتمد على بروتوكول HTTP خدمات الصابون كانت هي الهدف الرئيسي. تم شحنها كجزء من WebScarab وتم إيقافها معه؛ OWASP ZAP وملحق Fuzzer الخاص به وهي البديل الموصى به.
  • البدائل المتاحة: AFL++ و libFuzzer هي المحركات القياسية الموجهة بالتغطية للتعليمات البرمجية الأصلية، OSS الزغب يقوم بتشغيلها باستمرار ومجانًا لمشاريع المصادر المفتوحة، و بوفوز يغطي هذا التقرير اختبار بروتوكولات الشبكة باستخدام تقنية التشويش. Python. توجد قائمة أوسع في الدليل الخاص بـ أدوات اختبار الأمان.

اختبار الزغب أفضل الممارسات

نادراً ما يجد برنامج فحص الأخطاء الذي يُوجّه نحو هدفٍ ما ويُترك دون تدخلٍ نتائجَ تُذكر. تُفرّق الممارسات التالية بين حملةٍ تُنتج عيوباً مُسجّلة وأخرى تُهدر وقت المعالج فقط.

  • ابدأ بمجموعة بيانات أولية جيدة. اجمع مدخلات حقيقية وصحيحة يقبلها التطبيق بالفعل. إن تعديل ملف أصلي يصل إلى كود التحليل أسرع بكثير من تعديل بايتات عشوائية.
  • اكتب حزامًا صغيرًا وسريعًا. ينبغي أن تقوم نقطة الدخول بمهمة واحدة في كل تشغيل، وأن تتجنب استدعاءات الشبكة والكتابة على القرص، وأن تعود بسرعة، لأن الإنتاجية تُقاس بعدد عمليات التنفيذ في الثانية.
  • قم بتشغيل أجهزة التعقيم. غالباً لا يؤدي تلف الذاكرة الصامت إلى تعطل النظام. يقوم كل من AddressSanitizer و UndefinedBehaviorSanitizer بتحويله إلى عطل فوري قابل للتشخيص.
  • اركض لمسافات طويلة، واركض باستمرار. تشغيل لمدة ساعة أو ساعتين يكشف الأخطاء السطحية؛ أما المسارات العميقة فعادة ما تحتاج إلى ساعات عديدة، ولهذا السبب فإن اختبار التشويش ينتمي إلى مهمة CI ليلية بدلاً من جلسة يدوية.
  • قلل من تكرار كل عطل. قم بتقليص المدخلات الفاشلة إلى أصغر شكل ممكن، وقم بتجميع حالات التعطل حسب مكدس الاستدعاءات. tracوإلا فإن خطأً واحداً سيؤدي إلى مئات التذاكر.
  • احتفظ بمجموعة بيانات الانحدار. أضف كل مدخل قابل للتكرار إلى مجموعة دائمة تعمل في كل إصدار، بحيث لا يمكن أن يعود عيب ثابت بهدوء.
  • قم باستهداف الهدف بشكل قانوني. إن اختبار خدمة طرف ثالث مباشرة دون إذن كتابي لا يمكن تمييزه عن الهجوم.

مزايا اختبار الزغب

عند استخدامها بتوقعات واقعية، تضيف تقنية الفحص العشوائي قيمة يصعب على التقنيات الأخرى مجاراتها.

  • اختبار التشويش يحسن اختبار أمان البرمجيات.
  • تكون الأخطاء التي يتم اكتشافها أثناء اختبار البرمجيات أحيانًا خطيرة، وغالبًا ما تكون هي نفسها التي يستخدمها المهاجمون، بما في ذلك الأعطال وتسريبات الذاكرة والاستثناءات غير المعالجة.
  • إذا لم يلاحظ المختبرون أي أخطاء بسبب قيود الوقت والموارد، فسيتم العثور على تلك الأخطاء أيضًا في اختبار التشويش.
  • يتم توليد المدخلات بواسطة آلة، لذا تستمر التغطية في النمو طوال الليل دون بذل جهد يدوي إضافي.

عيوب اختبار الزغب

إن نفس الخصائص التي تجعل اختبار التشويه رخيصًا تحد أيضًا مما يمكن أن يثبته.

  • لا يمكن لاختبارات الفحص العشوائي وحدها أن توفر صورة كاملة عن التهديد الأمني ​​الشامل أو مجموعة الأخطاء.
  • يعد اختبار التشويش أقل فعالية في التعامل مع التهديدات الأمنية التي لا تتسبب في تعطل البرامج، مثل بعض الفيروسات والديدان وأحصنة طروادة.
  • لا يمكن لاختبارات الفحص العشوائي اكتشاف سوى الأخطاء أو التهديدات البسيطة نسبيًا، ولن تقوم بالتحليل المنطقي للأعمال.
  • لكي يعمل الجهاز بكفاءة، فإنه يتطلب وقتاً طويلاً للآلة.
  • يُعد تحديد شرط القيمة الحدية باستخدام مدخلات عشوائية أمرًا إشكاليًا للغاية، على الرغم من أن المختبرين يحلون الآن الكثير من هذا باستخدام خوارزميات حتمية مدفوعة بمدخلات المستخدم.

اختبار التشويش مقابل اختبار الاختراق

كلا النشاطين يبحثان عن عيوب أمنية، لكنهما يجيبان على أسئلة مختلفة ونادراً ما يكونان قابلين للتبادل.

المعايير اختبار الزغب اختبار الاختراق
مدفوعا ب محرك آلي يُولّد مدخلات مشوهة مُختبِر ماهر يُحلل النظام
يبحث عن أعطال، وتوقفات مفاجئة، وأخطاء في أمان الذاكرة نقاط ضعف قابلة للاستغلال، بما في ذلك عيوب المنطق والتكوين
عمق تغطية إدخال واسعة للغاية، واستدلال سطحي تغطية دقيقة، واستدلال عميق
الناتج إعادة إنتاج المدخلات والمكدس traces تقرير النتائج يتضمن مسارات الاستغلال وتقييمات المخاطر
لحظة أفضل بشكل مستمر، في مسار البناء بشكل دوري، مقابل نسخة تجريبية

في الواقع، يغذي الاثنان بعضهما البعض: فالاختبار العشوائي يزيل الأعطال الرخيصة والقابلة للأتمتة بحيث تذهب ساعات عمل المختبر المحدودة إلى العيوب التي لا يكتشفها إلا الإنسان.

الأسئلة الشائعة

تُعدّ مجموعة البيانات الأولية مجموعة المدخلات الصالحة التي يقوم برنامج الفحص بتغييرها. وتُعتبر الملفات الصغيرة والمتنوعة والحقيقية هي الأفضل، لأن كل ملف منها يجتاز بالفعل عملية التحليل، مما يسمح للمحرك بتوجيه ميزانيته نحو التعليمات البرمجية الأكثر تعقيدًا بدلاً من فحص الصلاحية الأولي.

أداة اختبار التشويش هي دالة صغيرة تُمرر مخزنًا مؤقتًا واحدًا من البايتات المُشوشة إلى الكود قيد الاختبار. يجب أن تتجنب هذه الأداة تغيير الحالة العامة، وكتابة الملفات، واستدعاءات الشبكة، حتى يتمكن المحرك من تشغيلها آلاف المرات في الثانية.

تكشف ساعة أو ساعتان عن ثغرات بسيطة. أما الحملات الجادة فتستمر لساعات أو أيام، لأن التغطية الجديدة تصل على دفعات. إن استقرار منحنى التغطية، وليس قراءة الساعة، هو المؤشر الصادق على توقف الحملة عن تحقيق النتائج المرجوة.

يكشف برنامج AddressSanitizer عن تجاوزات سعة المخزن المؤقت واستخدام الذاكرة بعد تحريرها، بينما يكشف برنامج UndefinedBehaviorSanitizer عن إساءة استخدام الأعداد الصحيحة والمؤشرات، ويكشف برنامج MemorySanitizer عن عمليات قراءة الذاكرة غير المهيأة. وبدون هذه البرامج، تمر العديد من حالات التلف دون أن يلاحظها المستخدم، ولا يُبلغ برنامج الفحص عن أي خطأ على الإطلاق.

أعد إنتاج المشكلة، وقلل المدخلات إلى أصغر حالة فشل، وقم بتجميعها مع حالات التعطل التي تشترك في نفس المكدس. tracثم قم بتقديم طلب واحد بالطريقة المعتادة عملية إدارة العيوب وأضف المدخلات إلى مجموعة بيانات الانحدار.

يشتركون في العشوائية ولكن ليس في النية. اختبار القرود يقوم برمي إجراءات المستخدم العشوائية على واجهة قيد التشغيل، بينما يستهدف اختبار التشويش محلل إدخال محدد ويقيس تغطية التعليمات البرمجية، بحيث يمكنه توجيه نفسه نحو التعليمات البرمجية التي لم تصل إليها المدخلات السابقة.

تُستخدم نماذج اللغة لصياغة واجهات برمجة التطبيقات غير المُختبَرة، ولتوليد مدخلات أولية للتنسيقات غير الشائعة، ولتجميع وتلخيص تقارير الأعطال. لا يزال المحرك يُقدّم بيانات التغطية؛ ويُزيل النموذج بشكل أساسي عملية الإعداد اليدوي.

مساعد الطيار جيثب يمكن إنشاء نقطة دخول libFuzzer وملف بناء ومولد بذور من توقيع API موجود. Revانظر إلى النتيجة بعناية، لأن نظام الحماية الذي يتجاهل الأخطاء بهدوء لن يبلغ عن أي أعطال.

تلخيص هذه التدوينة بـ: