تعمل Google على تطوير أجزاء من Android في Rust لتحسين الأمان

click fraud protection

تقوم Google بكتابة وإعادة كتابة أجزاء من Android في Rust لتحسين أمان نظام التشغيل ككل، مقارنةً بـ C وC++. واصل القراءة لمعرفة المزيد!

يتضمن Android كحل نظام تشغيل كامل الكثير من الأجزاء المتحركة. بشكل عام، هذه الأجزاء هي النظام البيئي للتطبيق ومن ثم نظام التشغيل نفسه. كمطور، تختلف لغة البرمجة التي تختارها اعتمادًا على الجزء الذي تعمل عليه في Android. بالنسبة لمطوري التطبيقات، تعد Java وKotlin من الخيارات الشائعة. بالنسبة للمطورين الذين يعملون على نظام التشغيل والمستويات الأدنى فيه، كانت C وC++ من الخيارات الشائعة حتى الآن. واليوم تضيف جوجل خيارًا ثالثًا لمطوري أنظمة التشغيل، حيث يدعم مشروع Android مفتوح المصدر الآن لغة البرمجة Rust لتطوير نظام التشغيل نفسه.

حدود C وC++

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

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

تشكل C وC++ معًا عشرات الملايين من أسطر التعليمات البرمجية على نظام Android الأساسي. تصبح أخطاء سلامة الذاكرة هذه هي المصدر الأكثر صعوبة في معالجة عدم صحة التعليمات البرمجية، وتمثل حوالي 70% من الثغرات الأمنية عالية الخطورة في Android. إن مجرد إصلاح هذه الأخطاء لا يكفي للتعامل مع المشكلة، وسيكون النهج الأفضل هو منعها في المقام الأول.

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

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

هذا هو المكان الذي يظهر فيه التحول إلى لغة آمنة للذاكرة مثل Rust.

الصدأ وفوائده

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

على الرغم من أن Rust له فوائده بالفعل، إلا أنه ليس من الممكن تحويل نظام التشغيل Android بأكمله إلى Rust بين عشية وضحاها. وقد لا تكون هناك حاجة لذلك، حيث أن معظم أخطاء ذاكرة Android تحدث في تعليمات برمجية جديدة أو تم تعديلها مؤخرًا، مع وجود حوالي 50٪ منها أقل من عام. تعتقد Google أن جهودها اللغوية الآمنة للذاكرة تركز بشكل أفضل على التطورات الجديدة بدلاً من إعادة كتابة أكواد C وC++ الناضجة.

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

ماذا يعني التحول إلى Rust لنظام Android؟

تقول Google إنها أضافت دعم Rust إلى مشروع Android مفتوح المصدر على مدار الـ 18 شهرًا الماضية. لكن إضافة لغة جديدة إلى نظام أندرويد يعد مهمة هائلة. يجب صيانة بعض سلاسل الأدوات والتبعيات، كما يجب تحديث البنية التحتية للاختبار والأدوات، كما يحتاج المطورون إلى التدريب.

لدى Google عدد قليل من مشاريع التبني المبكرة التي ستشاركها في الأشهر المقبلة. ولكن على الرغم من ذلك، فقد تم التوضيح أن توسيع نطاق دعم Rust ليشمل المزيد من أنظمة التشغيل هو مشروع يستغرق عدة سنوات.

مما يمكننا رؤيته، جوجل تستخدم بالفعل Rust في أماكن قليلة. يقوم مكدس البلوتوث الجديد لنظام Android بإعادة كتابة الرمز المسمى "جابيلدورش"يتم كتابته في الصدأ. بدأ العمل على Gabeldorsche في وقت قريب من إصدار Android 11 ولكنه لا يزال غير مستخدم بعد. أندرويد مخزن المفاتيح 2.0 الوحدة النمطية مكتوبة بلغة Rust، وكذلك جزء مساحة المستخدم من Binder، برنامج تشغيل IPC لنظام Android. على الرغم من عدم ارتباطه بنظام Android، ضارب الى الحمرةالجديد netstack يتم كتابته أيضًا باللغة الصدأ.

بالنسبة لمطوري التطبيقات، لا يغير المفتاح شيئًا فيما يتعلق بكيفية قيامك، كمطور تطبيقات، بكتابة التطبيقات أو كيفية عمل واجهات برمجة التطبيقات (APIs) الإطارية. يؤثر رمز التبديل هذا فقط على كيفية كتابة نظام التشغيل. وفقًا لأحد أعضاء فريق علاقات مطوري Android، لا تخطط Google أيضًا لإصدار Rust NDK في الوقت الحالي. ستظل اللغات المدعومة لتطوير التطبيقات هي Kotlin وJava وC وC++.