ניתן להפעיל MTE באופן עצמאי בליבה (kernel) של Android ובכל במערכת Android. Google לא מורה על ושמטרתה לספק למכשיר גמישות מקסימלית לבניית מודלים של בנייה.
במסמך הזה מתוארות ההגדרות וההיקף של MTE, שלדעתנו מספק שילוב טוב בין אבטחה לבין עלות ב-Android לצמצום נקודות חולשה באופן קבוע.
ליבה
MTE בליבה מוגדר באמצעות שורת הפקודה. ברירת המחדל היא 'מופעל' במצב סנכרון. הדבר עשוי להשתנות בעתיד עבור מכמה סיבות:
- הנתונים מראים שהוא משפיע באופן משמעותי על הביצועים ועל הצרכים אופטימיזציה קלאסית.
- בדרך כלל, איכות קוד הליבה לא מספיק טובה למשלוח MTE במצב אכיפה (כלומר, פאניקה במקרה של כשל).
ההמלצה הנוכחית היא להשבית את MTE בליבה (kernel) ב-
בסביבת הייצור. כדי לעשות את זה, צריך להוסיף את kasan=off
אל
בשורת הפקודה של הליבה.
מרחב משתמשים
Google מספקת רשימת ברירת מחדל של קבצים בינאריים במרחב המשתמש שצריך להגן עליהם עם MTE. הרשימה נוצרה עם הקלט מ-Android Security והיא כוללת רכיבים בעלי הרשאות ו/או רכיבים שמטפלים באתרים לא מהימנים של קלטים. הרשימה המעודכנת של קבצים בינאריים מקומיים מומלצים עם MTE, ה memtag-common.mk בקובץ ה-build של Android המערכת. בנוסף, כמה אפליקציות מערכת נכללות גם: כרגע, Nfc, Bluetooth ו-SecureElement. הקבצים הבינאריים והאפליקציות האלה מופעלת במצב אסינכרוני כברירת מחדל.
ההמלצה הנוכחית היא להשתמש ברשימת היעדים המוגדרת כברירת מחדל (אין צורך לבצע שינויים). בנוסף, מומלץ להעריך הוספות BSP ו-OEM למערכת הליבה והפעלה של 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
אפשר להגדיר לכל ליבה של המעבד (CPU) במערכת על ידי כתיבת
/sys/devices/system/cpu/cpu*/mte_tcf_preferred
לדוגמה, הכתיבה
הפקודה sync
(או asymm
) תגרום לכל תהליך במרחב המשתמשים שביקש אותו
מצב אסינכרוני שישודרג אוטומטית באופן שקט לסנכרון (או ל-Asymm) בזמן
שפועלות על הליבה. אפשר לבצע את ההגדרה הזו בקובץ .rc במכשיר
בזמן האתחול.
מומלץ למדוד הגדרה אחת או שתיים אחרות כדי לבדוק אם הם מספקים מענה לדרישות הביצועים והחשמל שלכם. במידה מסוימת תצורות מעניינות שכדאי לבדוק:
- Asymm בכל הליבות.
- Asymm בליבות גדולות, Sync(סנכרון) בליבות אחרות.
כדי לוודא שתהליך מסוים מבקש מצב אסינכרוני (במקרים שבהם האפשרות קיימת) שדרוג אוטומטי), ודאו שהשורה הבאה כוללת את PR_MTE_TCF_SYNC ו-PR_MTE_TCF_ASYNC:
debuggerd <PID> | head -30 | grep tagged_addr
למרבה הצער, אין דרך קלה לראות את המצב האפקטיבי תהליך; אבל כל תהליך שמציג את שני הערכים שצוינו למעלה בכפוף להתנהגות של השדרוג האוטומטי.