# تنوع البرمجيات

تنوع البرمجيات هو مجال بحثي حول فهم وهندسة التنوع في سياق البرمجيات.

## مجالات رئيسية

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

## مجالات فرعية

يمكن تنويع البرمجيات في معظم المجالات:
* في البرامج الثابتة للأنظمة وأجهزة الاستشعار المضمنة.
* في تطبيقات الإنترنت.
* في تطبيقات الجوال.

## تقنيات

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

## مراجع

* ↑ Deswarte, Y.; Kanoun, K.; Laprie, J.-C. (Jul 1998). Diversity against accidental and deliberate faults (بالإنجليزية الأمريكية). IEEE Comput. Soc. pp. 171–181. CiteSeerX:10.1.1.27.9420. DOI:10.1109/csda.1998.798364. ISBN:978-0769503370. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (help)
* ↑ Knight, John C. (2011), "Diversity", Dependable and Historic Computing, Lecture Notes in Computer Science (بالإنجليزية), Springer Berlin Heidelberg, vol. 6875, pp. 298–312, DOI:10.1007/978-3-642-24541-1_23, ISBN:9783642245404
* ↑ Just، James E.؛ Cornwell، Mark (29 أكتوبر 2004). Review and analysis of synthetic diversity for breaking monocultures. ACM. ص. 23–32. CiteSeerX:10.1.1.76.3691. DOI:10.1145/1029618.1029623. ISBN:978-1581139709.
* ↑ Baudry، Benoit؛ Monperrus، Martin (29 سبتمبر 2015). "The Multiple Facets of Software Diversity: Recent Developments in Year 2000 and Beyond". ACM Computing Surveys. ج. 48 ع. 1: 16. arXiv:1409.7324. DOI:10.1145/2807593. ISSN:0360-0300.
* ↑ Schaefer, Ina; Rabiser, Rick; Clarke, Dave; Bettini, Lorenzo; Benavides, David; Botterweck, Goetz; Pathak, Animesh; Trujillo, Salvador; Villela, Karina (28 Jul 2012). "Software diversity: state of the art and perspectives". International Journal on Software Tools for Technology Transfer (بالإنجليزية). 14 (5): 477–495. CiteSeerX:10.1.1.645.1960. DOI:10.1007/s10009-012-0253-y. ISSN:1433-2779.
* 1 2 Hosseinzadeh، Shohreh؛ Rauti، Sampsa؛ Hyrynsalmi، Sami؛ Leppanen، Ville (ديسمبر 2015). Security in the Internet of Things through obfuscation and diversification. ص. 1–5. DOI:10.1109/cccs.2015.7374189. ISBN:978-1-4673-9354-6. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (مساعدة)
* ↑ Franz، Michael (21 سبتمبر 2010). "E unibus pluram". E unibus pluram: massive-scale software diversity as a defense mechanism. ص. 7–16. DOI:10.1145/1900546.1900550. ISBN:9781450304153.
* ↑ "Protecting Applications with Automated Software Diversity". Galois, Inc. 10 سبتمبر 2018. مؤرشف من الأصل في 2020-03-09. اطلع عليه بتاريخ 2019-02-12.
* ↑ Coppens، Bart؛ De Sutter، Bjorn؛ Volckaert، Stijn (1 مارس 2018)، "Multi-variant execution environments"، The Continuing Arms Race: Code-Reuse Attacks and Defenses، ACM، ص. 211–258، DOI:10.1145/3129743.3129752، ISBN:9781970001839
* ↑ Cohen، Frederick B. (1993). "Operating system protection through program evolution" (PDF). Computers & Security. ج. 12 ع. 6: 565–584. DOI:10.1016/0167-4048(93)90054-9. ISSN:0167-4048. مؤرشف من الأصل (PDF) في 2015-09-10.
* ↑ Chenxi Wang; Davidson, J.; Hill, J.; Knight, J. (2001). Protection of software-based survivability mechanisms (PDF) (بالإنجليزية الأمريكية). IEEE Comput. Soc. pp. 193–202. CiteSeerX:10.1.1.1.7416. DOI:10.1109/dsn.2001.941405. ISBN:978-0769511016. Archived from the original (PDF) on 2017-07-06. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (help)
* ↑ Forrest, S.; Somayaji, A.; Ackley, D.H. (1997). Building diverse computer systems (PDF) (بالإنجليزية الأمريكية). IEEE Comput. Soc. Press. pp. 67–72. CiteSeerX:10.1.1.131.3961. DOI:10.1109/hotos.1997.595185. ISBN:978-0818678349. Archived from the original (PDF) on 2016-04-13. {{استشهاد بكتاب}}: |صحيفة= تُجوهل (help)
* ↑ Schulte, Eric; Fry, Zachary P.; Fast, Ethan; Weimer, Westley; Forrest, Stephanie (28 Jul 2013). "Software mutational robustness" (PDF). Genetic Programming and Evolvable Machines (بالإنجليزية). 15 (3): 281–312. arXiv:1204.4224. DOI:10.1007/s10710-013-9195-8. ISSN:1389-2576. Archived from the original (PDF) on 2017-08-11.
* ↑ Baudry، Benoit؛ Allier، Simon؛ Monperrus، Martin (21 يوليو 2014). Proceedings of the 2014 International Symposium on Software Testing and Analysis - ISSTA 2014. ACM. ص. 149–159. arXiv:1401.7635. DOI:10.1145/2610384.2610415. ISBN:9781450326452. مؤرشف من الأصل في 2018-11-07.
* ↑ "Automated Software Diversity: Sometimes More Isn't Merrier". Galois, Inc. 10 سبتمبر 2018. مؤرشف من الأصل في 2020-03-09. اطلع عليه بتاريخ 2019-02-12.
* ↑ Harrand, Nicolas; Allier, Simon; Rodriguez-Cancio, Marcelino; Monperrus, Martin; Baudry, Benoit (25 Jun 2019). "A journey among Java neutral program variants". Genetic Programming and Evolvable Machines (بالإنجليزية). 20 (4): 531–580. arXiv:1901.02533. DOI:10.1007/s10710-019-09355-3. ISSN:1389-2576.
* بوابة علم الحاسوب