كشفت Microsoft النقاب عن CHERIoT ، وهو حل للأجهزة لتحسين أمان كود C.

اكتشفت Microsoft تطورات تتعلق بمشروع CHERIoT (امتداد أجهزة القدرة إلى RISC-V لإنترنت الأشياء)، والذي يهدف إلى منع المشكلات الأمنية في التعليمات البرمجية الموجودة في C وC++. تقدم CHERIoT حلاً يسمح لك بحماية قواعد تعليمات برمجية C/C++ الموجودة دون الحاجة إلى إعادة صياغتها. يتم تنفيذ الحماية من خلال استخدام مترجم معدل يستخدم مجموعة موسعة خاصة من تعليمات المعالج (ISA)، التي يوفرها المعالج وعلى مستوى الأجهزة لمراقبة الوصول إلى الذاكرة، والتحقق من صحة العمل باستخدام المؤشرات وضمان عزل كتل التعليمات البرمجية.

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

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

تم تصميم مكونات أجهزة CHERIoT كوحدة تحكم دقيقة تعتمد على بنية RISC-V، وتنفيذ بنية معالج CHERI (امتداد أجهزة القدرة إلى RISC-V) المحمية، والتي توفر نموذجًا للوصول إلى الذاكرة الخاضعة للتحكم استنادًا إلى "القدرة" (كل قراءة وكتابة) العملية على الذاكرة مسموح بها). استنادًا إلى بنية مجموعة التعليمات (ISA) المتوفرة في CHERIoT، تم إنشاء نموذج برمجي يضمن سلامة العمل مع الذاكرة على مستوى الكائنات الفردية، ويوفر الحماية ضد الوصول إلى الذاكرة المحررة بالفعل، وينفذ نظام عزل الوصول إلى الذاكرة خفيف الوزن . ينعكس نموذج حماية البرنامج المحدد بشكل مباشر في نموذج لغة C/C++، مما يسمح باستخدامه لحماية التطبيقات الموجودة (مطلوب فقط إعادة الترجمة والتشغيل على المعدات التي تدعم ISA CHERIoT).

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

يتضمن المشروع مواصفات بنية مجموعة تعليمات CHERIoT الموسعة، وتطبيقًا مرجعيًا لوحدة المعالجة المركزية RISC-V 32 بت التي تدعم CHERIoT ISA، ومجموعة أدوات LLVM معدلة. يتم توزيع المخططات النموذجية لوحدة المعالجة المركزية وأوصاف كتلة الأجهزة في Verilog بموجب ترخيص Apache 2.0. تم استخدام نواة Ibex من مشروع lowRISC كأساس لوحدة المعالجة المركزية. يتم تعريف نموذج كود CHERIoT ISA بلغة Sail وهو مرخص بموجب ترخيص BSD.

بالإضافة إلى ذلك، تم اقتراح نموذج أولي لنظام التشغيل في الوقت الحقيقي CHERIoT RTOS، والذي يوفر القدرة على عزل الأجزاء حتى على الأنظمة المدمجة مع 256 ميجابايت من ذاكرة الوصول العشوائي. كود CHERIoT RTOS مكتوب بلغة C++ ويتم توزيعه بموجب ترخيص MIT. تم تصميم المكونات الأساسية لنظام التشغيل، مثل أداة تحميل التشغيل والمجدول ونظام توزيع الذاكرة، على شكل مقصورات.

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

المصدر: opennet.ru

إضافة تعليق