تتيح نواة Kirisakura المخصصة لجهاز OnePlus 8 Pro التحكم في تكامل التدفق (CFI) لتحسين الأمان

التفاصيل الفنية حول التحكم في سلامة التدفق

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

LLVMيحاول CFI الخاص بـ CFI التخفيف من هذه الهجمات عن طريق تقييد أهداف الاتصال الصالحة وإجبار kernel على الذعر عند اكتشاف انتهاك CFI. تتم إضافة فحص قبل كل فرع غير مباشر للتأكد من أن العنوان الهدف يشير إلى وظيفة صالحة بتوقيع صحيح. يمنع هذا الفرع غير المباشر من الانتقال إلى موقع تعليمات برمجية عشوائية ويحد أيضًا من الوظائف التي يمكن استدعاؤها. سيظل المهاجم قادرًا على تغيير مؤشر الوظيفة، إذا كان هناك خطأ يسمح بالوصول. لكن CFI الخاص بـ LLVM يحد 55% من المكالمات غير المباشرة إلى 5 أهداف محتملة على الأكثر و80% إلى 20 هدفًا على الأكثر. من أجل تحديد جميع أهداف الاستدعاء الصالحة لكل فرع غير مباشر، يحتاج المترجم إلى رؤية كل كود النواة مرة واحدة.

استخدام LTO (تحسين وقت الارتباط) يجعل هذا ممكنا. يتطلب CFI الخاص بـ LLVM استخدام LTO، حيث يقوم المترجم بإنتاج كود بت خاص بـ LLVM لجميع لغات C. وحدات الترجمة، ويستخدم الرابط المدرك لـ LTO الواجهة الخلفية LLVM لدمج كود البت وتجميعه في الكود المحلي.

بالإضافة إلى السماح باستخدام CFI، يحقق LTO أداء أفضل في وقت التشغيل من خلال تحليل البرنامج بالكامل وتحسين الوحدات المشتركة.

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

نظرًا لأن CFI يقاطع تنفيذ البرنامج عند الوصول إلى فئات أخطاء معينة، فإنه يُصنف أيضًا على أنه أداة للبحث عن الأخطاء، كما ذكرنا سابقًا، عند استخدامه في الوضع المسموح به. سيُظهر CFI المسموح به انتهاكات CFI في سجل kernel، دون إثارة ذعر kernel. تحتوي النواة 4.9 (أجهزة جيل Pixel 3) و4.14 (أجهزة جيل Pixel 4) على عدة أنواع من الوظائف حالات عدم التطابق التي تؤدي إلى انتهاكات CFI، والتي تمت معالجتها بواسطة Google في مجموعات التصحيح المتوفرة على kernel/common اتفاقات إعادة الشراء.

ومع ذلك، نظرًا لطبيعة نظام Android البيئي، فمن المحتمل أن يتم العثور على حالات عدم التطابق هذه في التعليمات البرمجية الخاصة بالشركة المصنعة لـ SoC (في هذه الحالة، Qualcomm) أو التعليمات البرمجية المحددة لـ OEM (OnePlus) أيضًا. تم إصلاح العديد من انتهاكات CFI في كود Qualcomm المميز للنواة 4.19 على نواة Kirisakura لجهاز OnePlus 8 Pro (على سبيل المثال: 1, 2, 3).

أدى تشغيل kernel في CFI المسموح به إلى الكشف عن انتهاكات CFI في التعليمات البرمجية المتعلقة ببرامج تشغيل OnePlus أيضًا (يمكن العثور على الالتزامات ذات الصلة هنا و هنا). تعمل نواة Kirisakura لجهاز OnePlus 8 Pro مع فرض CFI، مما يحمي مستخدميها من هذا النوع من هجمات إعادة استخدام التعليمات البرمجية.

اقرأ أكثر

متحمس للأعمال اليدوية (أي إنقاذ أجزاء الكمبيوتر القديمة). مستخدم متعطش لنظام Android منذ أيام Eclair، كما يحب Skanda متابعة اتجاهات التطوير الحديثة في عالم الحوسبة ذات اللوحة الواحدة.