پیکربندی MTE

MTE را می توان به طور مستقل در هسته اندروید و در هر فرآیندی در سیستم اندروید فعال کرد. Google هیچ پیکربندی خاصی را اجباری نمی کند و هدف آن ارائه حداکثر انعطاف پذیری برای سازندگان دستگاه است.

این سند تنظیمات و دامنه MTE را توصیف می‌کند که به نظر ما، به عنوان کاهش آسیب‌پذیری همیشه فعال، یک مبادله خوب بین امنیت و هزینه را برای کاربران اندرویدی فراهم می‌کند.

هسته

MTE در هسته از طریق خط فرمان پیکربندی می شود. پیش‌فرض در حالت همگام‌سازی روشن است. این موضوع به دلایل متعددی ممکن است در آینده تغییر کند:

  • نشان داده شده است که به طور قابل توجهی بر عملکرد تأثیر می گذارد و به کار بهینه سازی نیاز دارد.
  • به طور گسترده ای تصور می شود که کیفیت کد هسته برای ارسال MTE در حالت اجرا (یعنی وحشت در هنگام شکست) کافی نیست.

توصیه فعلی غیرفعال کردن هسته MTE در دستگاه های تولیدی است. برای این کار، kasan=off به خط فرمان هسته اضافه کنید.

فضای کاربری

Google فهرستی پیش‌فرض از باینری‌های فضای کاربر را برای محافظت با MTE ارائه می‌کند. این فهرست با ورودی Android Security تشکیل شده است و شامل مؤلفه‌هایی است که دارای امتیاز هستند و/یا ورودی‌های غیرقابل اعتماد را مدیریت می‌کنند. لیست به روز باینری های بومی که با MTE توصیه می شوند را می توانید در فایل memtag-common.mk در سیستم ساخت اندروید بیابید. علاوه بر این، چندین برنامه سیستم نیز گنجانده شده است: در حال حاضر، Nfc، بلوتوث و SecureElement. این باینری ها و برنامه ها به طور پیش فرض در حالت Async فعال هستند.

توصیه فعلی استفاده از لیست هدف پیش فرض است (بدون نیاز به تغییر). علاوه بر این، توصیه می‌شود افزوده‌های BSP و OEM را به سیستم اصلی ارزیابی کنید و MTE را در مواردی که به امنیت حساس هستند فعال کنید.

برنامه ها

سه برنامه سیستمی ذکر شده در بالا تنها برنامه هایی هستند که در حال حاضر از MTE استفاده می کنند. برای اینکه یک برنامه شخص ثالث MTE را فعال کند، AndroidManifest.xml آن باید android:memtagMode با مقداری غیر از off مشخص کند. بنابراین، مجموعه‌های معیار رایج مانند Geekbench یا AnTuTu با MTE اجرا نمی‌شوند. اگر MTE هسته نیز غیرفعال باشد (به kasan=off بالا مراجعه کنید)، انتظار می‌رود که معیارها تأثیر عملکرد بسیار محدودی را نشان دهند.

در مورد سایر برنامه ها، توسعه فعال پشتیبانی MTE در کروم وجود دارد. نسخه فعلی فروشگاه Play Chrome شامل تنظیمات memtagMode=async در مانیفست است. همچنین انتظار ما این است که تعدادی از برنامه های امنیتی در اکوسیستم اندروید (به عنوان مثال، برنامه های بانکی) در نهایت همین کار را انجام دهند. از سوی دیگر، ما انتظار داریم که برخی از برنامه‌ها مانند بازی‌ها که به اوج عملکرد CPU نیاز دارند، MTE را غیرفعال نگه دارند.

حالت های دیگر

دستورالعمل های بالا در همه جا فقط از حالت Asynchronous MTE استفاده می کنند. بسته به سخت افزار، سایر حالت ها ممکن است تقریباً یا دقیقاً به همان سرعت باشند. آنها همچنین تشخیص بهتر و خواص کاهش آسیب پذیری قوی تر را ارائه می دهند.

ما توصیه می کنیم یک یا دو پیکربندی دیگر را آزمایش کنید تا ببینید آیا آنها به اندازه کافی برای عملکرد / توان مورد نیاز شما خوب هستند یا خیر. حالت های MTE را می توان برای هر هسته CPU در سیستم با نوشتن /sys/devices/system/cpu/cpu*/mte_tcf_preferred تنظیم کرد. به عنوان مثال، نوشتن sync (یا asymm ) باعث می شود هر فرآیند فضای کاربری که درخواست حالت Async را داشته باشد، در حین اجرا روی آن هسته، به طور خودکار به همگام سازی (یا Asymm) ارتقا یابد. این تنظیمات را می توان در یک فایل .rc در زمان راه اندازی دستگاه انجام داد.

توصیه می کنیم یک یا دو پیکربندی دیگر را اندازه گیری کنید تا بررسی کنید که آیا عملکرد و توان مورد نیاز شما را برآورده می کنند یا خیر. چند پیکربندی جالب برای کشف:

  • نامتقارن در تمام هسته ها.
  • نامتقارن در هسته(های) بزرگ، همگام سازی در هسته های دیگر.

برای تأیید اینکه فرآیندی حالت Async را درخواست می‌کند (با امکان ارتقا خودکار)، بررسی کنید که خط زیر شامل PR_MTE_TCF_SYNC و PR_MTE_TCF_ASYNC باشد:

  debuggerd <PID> | head -30 | grep tagged_addr

متأسفانه، هیچ راه آسانی برای مشاهده حالت مؤثر برای یک فرآیند وجود ندارد. اما هر فرآیندی که هر دو مقدار ذکر شده در بالا را نشان دهد، تابع رفتار ارتقاء خودکار است.