תצורת MTE

ניתן להפעיל MTE באופן עצמאי בקרנל האנדרואיד ובכל תהליך במערכת האנדרואיד. גוגל אינה מחייבת שום תצורה ספציפית ומטרתה לספק גמישות מירבית לבוני המכשירים.

מסמך זה מתאר את ההגדרות וההיקף של MTE שלדעתנו מספקים פשרה טובה בין אבטחה לעלות עבור משתמשי אנדרואיד כמפחית פגיעות תמידית.

גַרעִין

MTE בקרנל מוגדר דרך שורת הפקודה. ברירת המחדל היא ON במצב סנכרון. זה נתון לשינוי עתידי מכמה סיבות:

  • הוכח שהוא משפיע באופן משמעותי על הביצועים וצריך עבודת אופטימיזציה.
  • איכות קוד הליבה נתפסת כבלתי מספקת כדי לשלוח MTE במצב האכיפה (כלומר, פאניקה על כשל).

ההמלצה הנוכחית היא להשבית את ליבת MTE במכשירי ייצור. כדי לעשות זאת, הוסף את kasan=off לשורת הפקודה של הליבה.

מרחב משתמש

גוגל מספקת רשימת ברירת מחדל של קבצים בינאריים של מרחב המשתמש שיש להגן באמצעות MTE. הרשימה הורכבה עם הקלט מאבטחת אנדרואיד וכוללת רכיבים בעלי הרשאות ו/או מטפלים בקלט לא מהימן. את הרשימה העדכנית של קבצים בינאריים מקוריים המומלצים עם MTE ניתן למצוא בקובץ memtag-common.mk במערכת ה-build של אנדרואיד. בנוסף, מספר יישומי מערכת כלולים גם כן: כרגע, Nfc, Bluetooth ו-SecureElement. קבצים בינאריים ויישומים אלה מופעלים במצב אסינכרון כברירת מחדל.

ההמלצה הנוכחית היא להשתמש ברשימת יעדי ברירת המחדל (אין צורך בשינויים). בנוסף, מומלץ להעריך תוספות BSP ו-OEM למערכת הליבה ולאפשר MTE באלה הרגישים לאבטחה.

יישומים

שלושת יישומי המערכת המפורטים לעיל הם היחידים המשתמשים ב-MTE בשלב זה. על מנת שאפליקציה של צד שלישי תאפשר MTE, AndroidManifest.xml שלה יצטרך לציין את android:memtagMode עם ערך שאינו off . לפיכך, חבילות בנצ'מרק נפוצות כגון Geekbench או AnTuTu אינן פועלות עם MTE. אם גם ליבת MTE מושבתת (ראה kasan=off לעיל), אז המדדים צפויים להראות השפעת ביצועים מוגבלת מאוד, אם בכלל.

לגבי האפליקציות האחרות, יש פיתוח פעיל של תמיכת MTE בכרום. הגרסה הנוכחית של חנות Play של Chrome כוללת הגדרת memtagMode=async במניפסט. זו גם הציפייה שלנו שמספר אפליקציות מודעת אבטחה במערכת האקולוגית של אנדרואיד (לדוגמה, אפליקציות בנקאיות) יעשו את אותו הדבר בסופו של דבר. מצד שני, אנו מצפים שחלק מהיישומים הדורשים ביצועי CPU שיא כמו משחקים יבחרו להשאיר את MTE מושבת.

מצבים אחרים

ההוראות לעיל משתמשות רק במצב MTE אסינכרוני בכל מקום. בהתאם לחומרה, מצבים אחרים עשויים להיות מהירים כמעט או בדיוק באותה מידה. הם גם מספקים אבחון טוב יותר ומאפיינים חזקים יותר להפחתת פגיעות.

אנו ממליצים לבדוק תצורה אחת או שתיים אחרות כדי לראות אם הן מספיק טובות לדרישות הביצועים/הספק שלך. ניתן להגדיר מצבי MTE עבור כל ליבת מעבד במערכת על ידי כתיבה אל /sys/devices/system/cpu/cpu*/mte_tcf_preferred . לדוגמה, כתיבת sync (או asymm ) תגרום לכל תהליך מרחב משתמש שביקש מצב Async ישודרג אוטומטית בשקט לסינכרון (או Asymm) בזמן שהוא פועל על הליבה הזו. ניתן לבצע הגדרה זו בקובץ rc בזמן אתחול המכשיר.

אנו ממליצים למדוד תצורה אחת או שתיים אחרות כדי לבדוק אם הן עומדות בדרישות הביצועים וההספק שלך. כמה תצורות מעניינות לחקור:

  • Asymm על כל הליבות.
  • Asymm על ליבות גדולות, סנכרון על ליבות אחרות.

כדי לוודא שתהליך מבקש מצב אסינכרון (עם שדרוג אוטומטי אפשרי), בדוק שהשורה הבאה כוללת גם PR_MTE_TCF_SYNC וגם PR_MTE_TCF_ASYNC :

  debuggerd  | head -30 | grep tagged_addr

למרבה הצער, אין דרך קלה לראות את המצב היעיל עבור תהליך; אבל כל תהליך שמציג את שני הערכים המפורטים למעלה כפוף להתנהגות השדרוג האוטומטי.