سلامة الذاكرة

عدم أمان الذاكرة

تعد أخطاء سلامة الذاكرة، والأخطاء في التعامل مع الذاكرة بلغات البرمجة الأصلية، هي المشكلة الأكثر شيوعًا في قواعد تعليمات Android. فهي تمثل أكثر من 60% من الثغرات الأمنية عالية الخطورة وتتسبب في ملايين الأعطال التي يراها المستخدم.

تؤثر أخطاء سلامة الذاكرة على تجربة المستخدم والتكاليف والأمان.
الشكل 1 : أخطاء سلامة الذاكرة وتأثيرها السلبي على الجودة والأمان والتكاليف

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

تؤثر أخطاء سلامة الذاكرة سلبًا على الجودة

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

نلاحظ كل يوم الملايين من الأعطال الأصلية من أجهزة المستخدم النهائي ومع تقديم GWP-ASan ، قمنا بتتبع معظمها بسبب أخطاء تتعلق بسلامة الذاكرة.
تتحقق نقطة البيانات هذه من العلاقة بين جودة وكثافة أخطاء سلامة الذاكرة وتتوافق مع ما لاحظه زملاؤنا في Chrome (راجع القائمة الساخنة للأخطاء في Chrome GWP-ASan ).

تؤثر أخطاء سلامة الذاكرة سلبًا على الأمان

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

تؤثر أخطاء سلامة الذاكرة سلبًا على الأمان.
الشكل 2 : مساهمة أخطاء سلامة الذاكرة في ثغرات Android

على الرغم من أنه من المشجع معرفة أن هذه ليست مشكلة Android فقط (راجع إحصائيات Chrome و Microsoft )، إلا أننا نحتاج إلى بذل المزيد من الجهد من أجل سلامة مستخدمينا.
يقوم فريق Project Zero في Google بتتبع ثغرات يوم الصفر التي تم استخدامها في هجمات حقيقية ضد المستخدمين باعتبارها نقاط ضعف يوم الصفر. هذه ليست أخطاء افتراضية ولكنها ثغرات تُستخدم بشكل نشط في الهجمات ضد المستخدمين. تشكل أخطاء سلامة الذاكرة (فساد الذاكرة والاستخدام بعد الاستخدام المجاني) الأغلبية الساحقة.

تزيد الأخطاء المتعلقة بسلامة الذاكرة من التكاليف

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

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

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

سلامة الذاكرة

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

من المرجح أن تصبح سلامة الذاكرة عامل تمييز للجودة والأمان في السنوات القادمة، ويخطط Android لقيادة الطريق.

متطلبات دعم سلامة الذاكرة

توصي وثيقة تعريف توافق Android (CDD) بشدة باستخدام أدوات أمان الذاكرة أثناء التطوير.
نحن نعمل بشكل وثيق مع نظامنا البيئي لزيادة استخدام أدوات أمان الذاكرة ودمجها في عمليات التكامل والاختبار المستمرة.
بمرور الوقت، نود التأكد من أن كل جهاز يجتاز مجموعة اختبار التوافق ( CTS ) الكاملة، باستخدام أدوات أمان الذاكرة، مما يوضح أنه لم يتم العثور على مثل هذه الأخطاء. على سبيل المثال، سيُطلب من منصات Arm v9 توفير تشغيل CTS مع تمكين وضع علامات الذاكرة، بينما سيُطلب من منصات Arm v8 توفير تشغيل CTS باستخدام HWASAN وKASAN.

الصدأ كلغة برمجة جديدة لرمز النظام الأساسي

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

أدوات سلامة الذاكرة

يدعم Android مجموعة واسعة من الأدوات التي تساعد في اكتشاف أخطاء سلامة الذاكرة. يعرض الشكل أدناه تصنيفًا لأدوات أمان ذاكرة Android المتوفرة.

تؤثر أخطاء سلامة الذاكرة سلبًا على الأمان.
الشكل 3 : أدوات سلامة ذاكرة Android

تغطي أدواتنا نطاقًا واسعًا من سيناريوهات وأهداف النشر. تصف الوثائق التالية كل أداة وتوفر مرجعًا لاستخدامها في منتجاتك.