قدم Kees Cook تصحيحات جديدة لتحسين أمان Linux Kernel Stack

لينكس

كيس كوك ، مسؤول النظام الرئيسي السابق في kernel.org وقائد فريق أمان Ubuntu ، ويعمل الآن في Google لحماية Android و ChromeOS ، أصدر مجموعة من التصحيحات التي تقوم بترتيب إزاحات مكدس النواة بشكل عشوائي عند التعامل مع مكالمات النظام. تعمل التصحيحات على تحسين أمان kernel عن طريق تغيير موقع المكدس ، lأو يجعل هجمات المكدس أكثر صعوبة وأقل نجاحًا

تنتمي الفكرة الأصلية للتصحيح إلى مشروع PaX RANDKSTACK. في عام 2019 ، حاولت Elena Reshetova ، مهندسة في Intel ، إنشاء تطبيق لهذه الفكرة ، مناسب لإدراجها في التكوين الرئيسي لنواة Linux.

في وقت لاحق ، اتخذت المبادرة من قبل كيس كوك الذي قدم تطبيقًا مناسبًا للإصدار الرئيسي من النواة والذي تم تخطيط تصحيحاته للإصدار 5.13 من Linux.

سيتم تعطيل الوضع افتراضيًا ولتمكينه ، يتم تقديم معلمة سطر أوامر kernel "Randomize_kstack_offset = تشغيل / إيقاف»والإعدادات CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT ، بالإضافة إلى ذلك ، تقدر النفقات العامة لتمكين الوضع بحوالي 1٪ من فقدان الأداء.

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

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

نظرًا لأن حماية مكدس نواة Linux قد تحسنت باستمرار (تعيين المكدس المستند إلى vmap مع صفحات الحماية ، وإزالة thread_info ، و STACKLEAK) ، كان على المهاجمين إيجاد طرق جديدة لعمل مآثرهم.

لديهم ، ويستمرون في الاعتماد على حتمية مكدس النواة ، في المواقف التي يكون فيها VMAP_STACK و THREAD_INFO_IN_TASK_STRUCT لم تكن ذات صلة. على سبيل المثال ، كان من الممكن إعاقة الهجمات الأخيرة التالية إذا لم تكن إزاحة المكدس حتمية بين استدعاءات النظام

الغرض من وظيفة randomize_kstack_offset هو إضافة إزاحة عشوائية بعد دفع pt_regs إلى المكدس وقبل استخدام بقية مكدس مؤشر الترابط أثناء معالجة استدعاء النظام ، وقم بتغييره في كل مرة تصدر فيها عملية استدعاء نظام. يتم تحديد مصدر العشوائية حاليًا من خلال البنية (لكن x86 يستخدم البايت المنخفض لـ rdtsc ()).

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

لا توجد تغييرات مرئية لهذا على x86 لأن مدخر المكدس معطل بالفعل دون قيد أو شرط لوحدة الترجمة ، ولكن التغيير مطلوب في arm64. لسوء الحظ ، لا توجد سمة يمكن استخدامها لتعطيل مدخر المكدس لوظائف محددة. مقارنة مع وظيفة PaX RANDKSTACK: تقوم وظيفة RANDKSTACK بتعيين موقع بداية المكدس عشوائيًا (cpu_current_top_of_stack) ، أي أنها تتضمن موقع بنية pt_regs على المكدس.

في البداية ، اتبع هذا التصحيح نفس النهج ، ولكن خلال المناقشات الأخيرة ، تم تحديد أنها ذات قيمة قليلة كما لو كانت وظيفة ptrace متاحة للمهاجم ، يمكنك استخدام PTRACE_PEEKUSR لقراءة / كتابة إزاحات مختلفة إلى بنية pt_regs ، ومراقبة سلوك ذاكرة التخزين المؤقت للوصول pt_regs ومعرفة تعويض المكدس العشوائي.

أخيرا ذكر ذلك يدعم التنفيذ الأولي معالجات ARM64 و x86 / x86_64.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: AB Internet Networks 2008 SL
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.