يمكن تفعيل ميزة MTE بشكل مستقل في نواة Android وفي أي عملية في نظام Android. لا تفرض Google أي إعدادات محدّدة وتهدف إلى توفير أقصى قدر من المرونة لمطوّري الأجهزة.
يوضّح هذا المستند إعدادات MTE ونطاقها الذي نرى أنّه يقدّم مفاضلة جيدة بين الأمان والتكلفة لمستخدمي Android كإجراء دائم للحد من التعرّض للثغرات الأمنية.
فرقعة
يتم ضبط MTE في النواة من خلال سطر الأوامر. يكون الإعداد التلقائي هو "مفعَّل" في وضع "المزامنة". وقد يتغيّر هذا المبلغ في المستقبل لعدة أسباب:
- وقد تبيّن أنّه يؤثر بشكل كبير في الأداء ويحتاج إلى إجراء تحسين.
- يُعتقد على نطاق واسع أنّ جودة رمز النواة غير كافية لطرح MTE في وضع التنفيذ (أي وضع الذعر عند حدوث خطأ).
يُنصح حاليًا بإيقاف ميزة MTE في kernel على
الأجهزة العلنية. لإجراء ذلك، أضِف kasan=off
إلى
سطر أوامر kernel.
مساحة المستخدم
توفّر Google قائمة تلقائية بالبرامج الثنائية في مساحة المستخدم التي يجب حمايتها باستخدام MTE. تم إنشاء القائمة استنادًا إلى المدخلات الواردة من فريق أمان Android وتشمل المكوّنات التي تتمتع بامتيازات و/أو تعالج مدخلات غير موثوق بها. يمكن العثور على القائمة المحدّثة للبرامج الثنائية الأصلية التي يُنصح باستخدامها مع MTE فيملف memtag-common.mk في نظام ملفّات برمجة التطبيقات في Android. بالإضافة إلى ذلك، يتم أيضًا تضمين العديد من تطبيقات النظام: في الوقت الحالي، تشمل هذه التطبيقات NFC وBluetooth وSecureElement. تكون هذه التطبيقات والبرامج الثنائيّة مفعّلة في وضع Async تلقائيًا.
يُنصح حاليًا باستخدام قائمة الاستهداف التلقائية (ما مِن تغييرات مطلوبة). بالإضافة إلى ذلك، يُنصح بتقييم إضافات BSP والمصنّعين الأصليّين للأجهزة إلى النظام الأساسي وتفعيل MTE على التطبيقات الحسّاسة من حيث الأمان.
التطبيقات
تطبيقات النظام الثلاثة المُدرَجة أعلاه هي التطبيقات الوحيدة التي تستخدم
MTE في الوقت الحالي. لكي يتمكّن تطبيق تابع لجهة خارجية من تفعيل
ميزة MTE، يجب أن يحدّد AndroidManifest.xml
android:memtagMode
بقيمة مختلفة عن
off
. وبالتالي، لا يتم تشغيل مجموعات معايير الأداء الشائعة، مثل
Geekbench أو AnTuTu، باستخدام MTE. إذا تم أيضًا
إيقاف ميزة MTE في kernel (راجِع kasan=off
أعلاه)، من المتوقّع أن تُظهر معايير الأداء أثرًا محدودًا جدًا في الأداء، إن وجد.
بالنسبة إلى التطبيقات الأخرى، يتم تطوير ميزة MTE بشكل نشط في Chrome. يتضمّن الإصدار الحالي من Chrome على "متجر Play" الإعداد
memtagMode=async
في البيان. نتوقع أيضًا
أن يتّخذ عدد من التطبيقات المهتمة بالأمان في منظومة Android المتكاملة
(مثل التطبيقات المصرفية) الإجراء نفسه في نهاية المطاف. من ناحية أخرى، نتوقع أن تختار بعض التطبيقات التي تتطلّب ذروة أداء وحدة المعالجة المركزية، مثل الألعاب، إبقاء ميزة MTE غير مفعّلة.
الأوضاع الأخرى
لا تستخدم التعليمات أعلاه سوى وضع MTE غير المتزامن في كل مكان. استنادًا إلى الجهاز، قد تكون الأوضاع الأخرى سريعة تقريبًا أو بالسرعة نفسها. كما توفّر هذه الأدوات أيضًا عمليات تشخيص أفضل وخصائص معالجة للثغرات بشكلٍ أفضل.
ننصحك باختبار إعدادات أخرى واحدة أو اثنتين لمعرفة ما إذا كانت
جيدة بما يكفي لمتطلبات الأداء/الطاقة. يمكن ضبط أوضاع MTE
لكل وحدة معالجة مركزية في النظام من خلال الكتابة إلى
/sys/devices/system/cpu/cpu*/mte_tcf_preferred
. على سبيل المثال، سيؤدي كتابة
sync
(أو asymm
) إلى ترقية أي عملية في مساحة المستخدم التي طلبت
وضع Async تلقائيًا إلى Sync (أو Asymm) أثناء
تشغيلها على هذا المعالج. يمكن إجراء هذا الإعداد في ملف .rc في وقت التمهيد على الجهاز.
ننصحك بقياس إعدادَين آخرين للتحقّق مما إذا كانتا تلبّيان متطلبات الأداء واستهلاك الطاقة. في ما يلي بعض الإعدادات المثيرة للاهتمام التي يمكنك استكشافها:
- Asymm على جميع النوى
- Asymm على النوى الكبيرة، Sync على النوى الأخرى
للتأكّد من أنّ إحدى العمليات تطلب وضع Async (مع ترقية automatic محتملة)، تأكّد من أنّ السطر التالي يتضمّن كلاً من PR_MTE_TCF_SYNC وPR_MTE_TCF_ASYNC:
debuggerd <PID> | head -30 | grep tagged_addr
لا تتوفّر طريقة سهلة لمعرفة الوضع الفعال لعملية معيّنة، ولكن أي عملية تعرض القيمتَين المذكورتَين أعلاه تخضع لسلوك الترقية التلقائية.