الاختبار التفاضلي

الاختبار التفاضلي ، [ 1 ] المعروف أيضًا باسم اختبار التشويش التفاضلي ، هو أسلوب لاختبار البرمجيات يكشف الأخطاء البرمجية من خلال إدخال نفس البيانات إلى سلسلة من التطبيقات المتشابهة (أو إلى تطبيقات مختلفة لنفس التطبيق)، ومراقبة الاختلافات في تنفيذها. يُكمّل الاختبار التفاضلي اختبار البرمجيات التقليدي لأنه مناسب تمامًا لاكتشاف الأخطاء الدلالية أو المنطقية التي لا تُظهر سلوكيات خاطئة صريحة مثل الأعطال أو فشل التأكيدات. يُطلق على الاختبار التفاضلي أيضًا اسم الاختبار المتتالي.
يكتشف الاختبار التفاضلي الأخطاء الدلالية باستخدام تطبيقات مختلفة لنفس الوظائف كأدوات مرجعية متقاطعة ، ويحدد الاختلافات في مخرجاتها على نفس المدخلات: أي تناقض بين سلوكيات البرنامج على نفس المدخلات يتم وضع علامة عليه كخطأ محتمل.
مجالات التطبيق
استُخدم الاختبار التفاضلي بنجاح لاكتشاف الأخطاء الدلالية في مجالات متنوعة مثل تطبيقات SSL/TLS ، [ 2 ] [ 3 ] [ 4 ] [ 5 ] ومترجمات لغة C ، [ 6 ] وتطبيقات JVM ، [ 7 ] وجدران حماية تطبيقات الويب ، [ 8 ] وسياسات أمان واجهات برمجة التطبيقات ، [ 9 ] وبرامج مكافحة الفيروسات ، [ 4 ] [ 10 ] وأنظمة الملفات . [ 11 ] كما استُخدم الاختبار التفاضلي لتوليد بصمات تلقائية من تطبيقات بروتوكولات الشبكة المختلفة . [ 12 ]
توليد المدخلات
بدون توجيه
تُنشئ أدوات الاختبار التفاضلي غير الموجهة مدخلات الاختبار بشكل مستقل عبر التكرارات دون مراعاة سلوك برنامج الاختبار على المدخلات السابقة. لا تستخدم عملية توليد المدخلات هذه أي معلومات من المدخلات السابقة، بل تُنشئ مدخلات جديدة عشوائيًا من مساحة مدخلات ضخمة للغاية. قد يؤدي هذا إلى انخفاض كفاءة عملية الاختبار بشكل كبير، نظرًا للحاجة إلى توليد أعداد هائلة من المدخلات لاكتشاف خطأ واحد.
من الأمثلة على أنظمة الاختبار التفاضلي التي تُجري توليدًا غير مُوجَّه للمدخلات نظام "فرانكنسيرتس". [ 2 ] يقوم هذا النظام بتوليف شهادات فرانكنسيرتس من خلال دمج أجزاء من شهادات حقيقية عشوائيًا. ويستخدم شهادات صحيحة نحويًا لاختبار انتهاكات دلالية للتحقق من صحة شهادات SSL/TLS عبر تطبيقات متعددة. مع ذلك، ونظرًا لأن إنشاء شهادات فرانكنسيرتس واختيارها يتمان بشكل غير مُوجَّه تمامًا، فإن هذا النظام أقل كفاءة بشكل ملحوظ مقارنةً بالأدوات المُوجَّهة.
موجه
تهدف عملية توليد المدخلات الموجهة إلى تقليل عدد المدخلات اللازمة للعثور على كل خطأ من خلال أخذ معلومات سلوك البرنامج للمدخلات السابقة في الاعتبار.
التوجيه التطوري الخاص بالمجال
يُعد نظام Mucerts مثالاً على نظام اختبار تفاضلي يقوم بتوليد مدخلات موجهة بتغطية خاصة بالمجال . [ 3 ] يعتمد Mucerts على معرفة القواعد الجزئية لتنسيق شهادة X.509 ويستخدم خوارزمية أخذ عينات عشوائية لتوجيه عملية توليد المدخلات مع تتبع تغطية البرنامج.
يرتكز خط بحثي آخر على ملاحظة أن مشكلة توليد مدخلات جديدة من مدخلات موجودة يمكن نمذجتها كعملية عشوائية. ومن الأمثلة على أدوات الاختبار التفاضلي التي تستخدم نمذجة العمليات العشوائية لتوليد المدخلات أداة تشين وآخرون [ 7 ] . تُجري هذه الأداة اختبارًا تفاضليًا لآلات جافا الافتراضية (JVM) باستخدام أسلوب أخذ العينات مونت كارلو لسلسلة ماركوف (MCMC) لتوليد المدخلات. وتستخدم طفرات مخصصة خاصة بالمجال بالاستفادة من معرفة تفصيلية بتنسيق ملفات فئات جافا.
التوجيه التطوري المستقل عن المجال
يُعدّ برنامج NEZHA [ 4 ] مثالًا على أداة اختبار تفاضلي مزودة بآلية لاختيار المسار مصممة خصيصًا للاختبار التفاضلي المستقل عن المجال. يستخدم البرنامج مقاييس محددة (تُعرف باسم تنوع دلتا) لتلخيص وتحديد أوجه عدم التماثل الملحوظة بين سلوكيات تطبيقات الاختبار المتعددة. وقد أثبتت هذه المقاييس، التي تُعزز التنوع النسبي لسلوك البرنامج الملحوظ، فعاليتها في تطبيق الاختبار التفاضلي بطريقة مستقلة عن المجال وشفافة.
التوجيه القائم على التعلم الآلي
بالنسبة لتطبيقات مثل مرشحات البرمجة النصية عبر المواقع (XSS) والتحقق من اسم مضيف شهادة X.509، والتي يمكن نمذجتها بدقة باستخدام آلات الحالة المحدودة (FSA)، يمكن استخدام تقنيات تعلم آلات الحالة المحدودة القائمة على الأمثلة المضادة لتوليد مدخلات من المرجح أن تكتشف الأخطاء. [ 8 ] [ 5 ]
التوجيه القائم على التنفيذ الرمزي
التنفيذ الرمزي [ 13 ] هو أسلوب صندوق أبيض يُنفذ البرنامج رمزياً، ويحسب القيود على طول مسارات مختلفة، ويستخدم مُحلِّل قيود لتوليد مُدخلات تُحقق القيود المُجمَّعة على طول كل مسار. يُمكن أيضاً استخدام التنفيذ الرمزي لتوليد مُدخلات للاختبار التفاضلي. [ 12 ] [ 14 ]
تتفاقم القيود المتأصلة في أدوات الاختبار المدعومة بالتنفيذ الرمزي - كزيادة عدد المسارات وقابلية التوسع - بشكل خاص في سياق الاختبار التفاضلي حيث تُستخدم برامج اختبار متعددة. ولذلك، يصعب للغاية توسيع نطاق تقنيات التنفيذ الرمزي لإجراء اختبار تفاضلي لبرامج كبيرة متعددة.
انظر أيضاً
مراجع
- ↑ ويليام م. ماكيمان ، "الاختبار التفاضلي للبرمجيات"، المجلة التقنية الرقمية، المجلد 10، العدد 1، الصفحات 100-107، 1998.
- 1 2 سي. بروباكر، إس. جانا، بي. راي، إس. خورشيد، وفي. شماتيكوف، "استخدام فرانكنسيرتس للاختبار الآلي للخصومة للتحقق من صحة الشهادات في تطبيقات SSL/TLS"، في وقائع ندوة IEEE للأمن والخصوصية لعام 2014 (S&P). جمعية IEEE للحاسبات، 2014، ص 114-129.
- 1 2 ي. تشين وز. سو، "الاختبار التفاضلي الموجه للتحقق من صحة الشهادات في تطبيقات SSL/TLS"، في وقائع الاجتماع المشترك العاشر حول أسس هندسة البرمجيات (FSE). ACM، 2015، ص 793-804.
- 1 2 3 بيتسيوس، ت.، تانغ، أ.، ستولفو، س.، كيروميتيس، أ.د.، وجانا، س. (مايو 2017). نيزها: اختبار تفاضلي فعال مستقل عن المجال. في وقائع الندوة الثامنة والثلاثين لمعهد مهندسي الكهرباء والإلكترونيات حول الأمن والخصوصية، (سان خوسيه، كاليفورنيا).
- 1 2 S. Sivakorn, G. Argyros, K. Pei, AD Keromytis and S. Jana, “HVLearn: Automated Black-Box Analysis of Hostname Verification in SSL/TLS Implementations,” 2017 IEEE Symposium on Security and Privacy (S&P), San Jose, CA, USA, 2017, pp. 521–538.
- ↑ X. Yang, Y. Chen, E. Eide, and J. Regehr, “Finding and understanding bugs in C compilers,” in Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 2011, pp. 283–294.
- 1 2 واي. تشين، تي. سو، سي. صن، زد. سو، وجيه. تشاو، "الاختبار التفاضلي الموجه بالتغطية لتطبيقات JVM"، في وقائع المؤتمر السابع والثلاثين لجمعية ACM SIGPLAN حول تصميم وتنفيذ لغات البرمجة (PLDI). ACM، 2016، ص 85-99.
- 1 2 ج. أرغيروس، إ. ستايس، س. جانا، أ. د. كيروميتيس، و أ. كياياس، "SFADiff: هجمات التهرب الآلية وبصمات الأصابع باستخدام تعلم الأوتوماتا التفاضلية ذات الصندوق الأسود"، في وقائع مؤتمر ACM SIGSAC لعام 2016 حول أمن الحاسوب والاتصالات (CCS). ACM، 2016، ص 1690-1701.
- ↑ V. Srivastava, MD Bond, KS McKinley, and V. Shmatikov, “A security policy oracle: Detecting security holes using multiple API implementations,” ACM SIGPLAN Notices, vol. 46, no. 6, pp. 343–354, 2011.
- ↑ إس. جانا وف. شماتيكوف، "استغلال معالجة الملفات في كاشفات البرامج الضارة للمتعة والربح"، في وقائع ندوة IEEE للأمن والخصوصية لعام 2012 (S&P). جمعية IEEE للحاسبات، 2012، ص 80-94.
- ↑ ي. ليو، م. أدكار، ج. هولزمان، ج. كونينغ، ب. ليو، س. أ. سمولكا، و. سو، وإ. زادوك، "ميتيس: التحقق من نموذج نظام الملفات عبر مدخلات متعددة الاستخدامات واستكشاف الحالة"، في المؤتمر الثاني والعشرين لجمعية USENIX حول تقنيات الملفات والتخزين (FAST '24). جمعية USENIX، 2024، ص 123-140.
- 1 2 د. بروملي، ج. كاباليرو، ز. ليانغ، ج. نيوسوم، ود. سونغ، "نحو اكتشاف تلقائي للانحرافات في التطبيقات الثنائية مع تطبيقات للكشف عن الأخطاء وتوليد بصمات الأصابع"، في ندوة USENIX الأمنية السادسة عشرة (USENIX Security '07). جمعية USENIX، 2007.
- ↑ JC King, “Symbolic execution and program testing,” Communications of the ACM, vol. 19, no. 7, pp. 385–394, 1976.
- ↑ DA Ramos و DR Engler، "التحقق العملي من تكافؤ الكود الحقيقي بجهد منخفض"، في المؤتمر الدولي للتحقق بمساعدة الحاسوب. سبرينغر، 2011، ص 669-685.
- اختبار البرمجيات
