البرمجة الموجهة نحو إرجاع الإشارة

البرمجة الموجهة نحو إشارة الإرجاع ( SROP ) هي تقنية استغلال أمني للحاسوب تسمح للمهاجم بتنفيذ التعليمات البرمجية في ظل وجود إجراءات أمنية مثل الذاكرة غير القابلة للتنفيذ وتوقيع التعليمات البرمجية. [ 1 ] عُرضت هذه التقنية لأول مرة في ندوة IEEE الخامسة والثلاثين للأمن والخصوصية عام 2014، حيث فازت بجائزة أفضل ورقة بحثية طلابية . [ 2 ] تعتمد هذه التقنية على نفس الافتراضات الأساسية لتقنية البرمجة الموجهة نحو الإرجاع (ROP): حيث يتمكن المهاجم، الذي يتحكم في مكدس الاستدعاءات ، على سبيل المثال من خلال تجاوز سعة مخزن المكدس ، من التأثير على مسار البرنامج عبر تسلسلات تعليمات بسيطة تُسمى أدوات . يعمل الهجوم عن طريق دفع بنية سياق إشارة مزورة [ 3 ] إلى مكدس الاستدعاءات، واستبدال عنوان الإرجاع الأصلي بموقع أداة تسمح للمهاجم باستدعاء استدعاء النظام sigreturn [ 4 ] . [ 5 ] غالبًا ما تكفي أداة واحدة لتنفيذ هذا الهجوم بنجاح. قد يكون هذا الجهاز موجودًا في موقع ثابت، مما يجعل هذا الهجوم بسيطًا وفعالًا، مع إعداد أبسط وأكثر قابلية للنقل بشكل عام من ذلك المطلوب في تقنية البرمجة الموجهة بالعودة البسيطة. [ 1 ]

يمكن اعتبار البرمجة الموجهة نحو إرجاع الإشارة آلة غريبة لأنها تسمح بتنفيذ التعليمات البرمجية خارج المواصفات الأصلية للبرنامج. [ 1 ]

خلفية

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

استغلال ثغرات التنقل بين المكدسات

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

لا تحتوي معظم البرامج على وظائف تسمح للمهاجم بتنفيذ الإجراء المطلوب مباشرة (مثل الحصول على إمكانية الوصول إلى واجهة سطر الأوامر )، ولكن التعليمات اللازمة غالباً ما تكون متناثرة في الذاكرة. [ 6 ]

تتطلب البرمجة الموجهة نحو العودة أن تنتهي هذه التسلسلات من التعليمات، والتي تُسمى الأدوات، بتعليمات RET. وبهذه الطريقة، يستطيع المهاجم كتابة سلسلة من العناوين لهذه الأدوات في المكدس، وبمجرد RETتنفيذ تعليمة في إحدى الأدوات، ينتقل مسار التحكم إلى الأداة التالية في القائمة.

آلية معالجة الإشارات

محتوى المكدس أثناء معالجة الإشارة (لينكس x86/64) بما في ذلك بنية sigcontext

يُمكن استغلال هذا الهجوم بسبب طريقة معالجة الإشارات في معظم الأنظمة الشبيهة بنظام POSIX . فعند ورود أي إشارة، يحتاج نظام التشغيل إلى تبديل السياق إلى معالج الإشارة المُثبَّت. وللقيام بذلك، يحفظ نظام التشغيل سياق التنفيذ الحالي في إطار على المكدس. [ 5 ] [ 6 ] البنية التي تُدفع إلى المكدس هي نسخة خاصة بالمعمارية من بنية sigcontext ، والتي تحتوي على بيانات متنوعة تشمل محتويات السجلات لحظة تبديل السياق. عند اكتمال تنفيذ معالج الإشارة، sigreturn()يتم استدعاء دالة النظام.

إن استدعاء نظام sigreturn يعني القدرة على ضبط محتويات السجلات بسهولة باستخدام أداة واحدة يمكن العثور عليها بسهولة في معظم الأنظمة. [ 1 ]

الاختلافات عن اعتلال الشبكية الخداجي

هناك عدة عوامل تميز استغلال ثغرات SROP وتميزه عن استغلال ثغرات البرمجة الموجهة نحو العودة التقليدية. [ 7 ]

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

على الرغم من وجود مترجمات ROP كاملة تورينج ، [ 8 ] إلا أن إنشاء سلسلة ROP عادة ما يكون أمراً غير بديهي. [ 7 ]

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

قائمة بالأجهزة لأنظمة مختلفة
نظام التشغيلASLRأداةخريطة الذاكرةموقع الذاكرة الثابت
لينكس i386نعمsigreturn[vdso]
لينكس < 3.11 ARMلاsigreturn[متجهات]0xffff0000
لينكس < 3.3 x86-64لااستدعاء النظام والعودة[vsyscall]0xffffffffff600000
لينكس ≥ 3.3 x86-64نعماستدعاء النظام والعودةمكتبة
لينكس x86-64نعمsigreturnمكتبة
FreeBSD 9.2 x86-64لاsigreturn0x7ffffffff000
نظام التشغيل ماك أو إس إكس x86-64نعمsigreturnمكتبة
نظام التشغيل iOS ARMنعمsigreturnنظام المكتبة
نظام التشغيل iOS ARMنعماستدعاء النظام والعودةنظام المكتبة

الهجمات

لينكس

يمكن دائمًا العثور على مثال لنوع الأداة اللازمة لاستغلال ثغرات SROP في منطقة ذاكرة الكائن المشترك الديناميكي الافتراضي (VDSO) على أنظمة x86- Linux :

__kernel_sigreturn proc قريب : pop eax mov eax , 77h int 80h ; لينكس - sys_sigreturn nop lea esi , [ esi + 0 ] __kernel_sigreturn endp

في بعض إصدارات نواة لينكس ، يمكن تعطيل ASLR عن طريق ضبط الحد الأقصى لحجم المكدس على غير محدود، [ 9 ] مما يؤدي فعليًا إلى تجاوز ASLR والسماح بالوصول السهل إلى الأداة الموجودة في VDSO.

بالنسبة لنوى لينكس قبل الإصدار 3.3، من الممكن أيضًا العثور على أداة مناسبة داخل صفحة vsyscall، وهي آلية لتسريع الوصول إلى استدعاءات نظام معينة تستخدمها البرامج القديمة وتوجد دائمًا في موقع ثابت.

اكتمال تورينج

من الممكن استخدام أدوات للكتابة في محتويات إطارات المكدس، مما يُتيح إنشاء برنامج ذاتي التعديل . باستخدام هذه التقنية، يُمكن تصميم آلة افتراضية بسيطة ، يُمكن استخدامها كهدف تجميع للغة كاملة تورينج . يُمكن إيجاد مثال على هذا النهج في ورقة بوسمان، التي تُوضح بناء مُفسِّر للغة مُشابهة للغة برمجة Brainfuck . تُوفر هذه اللغة عدادًا للبرنامج PC، ومؤشرًا للذاكرة P، وسجلًا مؤقتًا يُستخدم لجمع 8 بتات A. هذا يعني أنه يُمكن أيضًا تصميم أبواب خلفية مُعقدة أو هجمات مُبهمة. [ 1 ]

وسائل الدفاع والتخفيف

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

عشوائية تخطيط مساحة العناوين

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

ملفات تعريف الارتباط الخاصة بالإشارة

تم اقتراح حل لتخفيف مشكلة SROP يُسمى ملفات تعريف الارتباط للإشارة . ويتمثل هذا الحل في طريقة للتحقق من عدم التلاعب ببنية sigcontext باستخدام ملف تعريف ارتباط عشوائي يتم دمجه مع عنوان موقع المكدس الذي سيتم تخزينه فيه. وبهذه الطريقة، لا يحتاج استدعاء النظام sigreturn إلا إلى التحقق من وجود ملف تعريف الارتباط في الموقع المتوقع، مما يخفف بشكل فعال من مشكلة SROP مع تأثير ضئيل على الأداء. [ 1 ] [ 10 ]

محاكاة Vsyscall

في إصدارات نواة لينكس الأحدث من 3.3، تتم محاكاة واجهة vsyscall، وأي محاولة لتنفيذ الأدوات مباشرةً في الصفحة ستؤدي إلى استثناء. [ 11 ] [ 12 ]

راب

Grsecurity عبارة عن مجموعة من التصحيحات لنواة لينكس لتعزيز وتحسين أمان النظام. [ 13 ] وهي تتضمن ما يُسمى بحماية عنوان الإرجاع (RAP) للمساعدة في الحماية من هجمات إعادة استخدام التعليمات البرمجية. [ 14 ]

بتوقيت وسط أوروبا

بدأت شركة إنتل في عام 2016 بتطوير تقنية فرض التحكم في التدفق ( CET ) للمساعدة في التخفيف من ثغرات استغلال تجاوزات المكدس ومنعها. تعمل تقنية CET من خلال إنشاء مكدس ظل في ذاكرة الوصول العشوائي (RAM) يحتوي فقط على عناوين العودة، وهو محمي بواسطة وحدة إدارة الذاكرة في وحدة المعالجة المركزية . [ 15 ] [ 16 ]

انظر أيضاً

مراجع

  1. 1 2 3 4 5 6 بوسمان، إريك؛ بوس، هربرت (2014). "تأطير الإشارات - عودة إلى الشيفرة المحمولة" (ملف PDF) . ندوة IEEE للأمن والخصوصية لعام 2014. الصفحات 243-358 . doi : 10.1109/SP.2014.23 . ISBN  978-1-4799-4686-0. S2CID 6153855 . تم الاسترجاع بتاريخ 16-06-2016 . 
  2. "أوراق الجوائز المقدمة في ندوة IEEE للأمن والخصوصية لعام 2014" . أمن IEEE . اللجنة الفنية للأمن والخصوصية التابعة لجمعية IEEE للحاسبات . تاريخ الاسترجاع: 17 يونيو 2016 .
  3. "Linux Cross Reference - sigcontext.h" .
  4. "SIGRETURN(2) - صفحة دليل لينكس" .
  5. 1 2 "اللعب بالإشارات: نظرة عامة على البرمجة الموجهة نحو إرجاع الإشارة" . تم الاسترجاع في 21-06-2016 .
  6. 1 2 3 "البرمجة الموجهة نحو Sigreturn وتخفيف آثارها" . تم الاسترجاع في 20-06-2016 .
  7. 1 2 3 بوسمان، إريك؛ بوس، هربرت. "تأطير الإشارات: العودة إلى الشفرة المحمولة" (PDF) .
  8. "ROPC — مترجم ROP كامل تورينج (الجزء 1)" . 12 ديسمبر 2013.
  9. "CVE-2016-3672 - إلغاء تقييد المكدس لم يعد يعطل ASLR" . تم الاطلاع عليه بتاريخ 20-06-2016 .
  10. "البرمجة الموجهة نحو إرجاع الإشارة وتخفيفها" . تم الاسترجاع في 2016-06-20 .
  11. "حول استدعاءات النظام الظاهري وvDSO" . تم الاطلاع عليه بتاريخ 20-06-2016 .
  12. "Hack.lu 2015 - Stackstuff 150: لماذا وكيف تعمل محاكاة vsyscall" . تم الاطلاع عليه بتاريخ 20-06-2016 .
  13. "أمان نواة لينكس (SELinux مقابل AppArmor مقابل Grsecurity)" .
  14. "راب: ارقد بسلام" (ملف PDF) . تم الاطلاع عليه بتاريخ 20-06-2016 .
  15. "RIP ROP: مؤامرة إنتل الماكرة للقضاء على ثغرات استغلال قفزات المكدس على مستوى وحدة المعالجة المركزية" . ذا ريجستر . تم الاطلاع عليه بتاريخ 20 يونيو 2016 .
  16. "معاينة تقنية التحكم في التدفق وفرضه" (ملف PDF) .