המסמך הזה מכיל תרחישים נפוצים לדוגמה ל-AVF.
הידור מבודד
כתחום מוגן בתוכנה, מכונה וירטואלית מוגנת מספקת סביבה בטוחה ל-compile קוד רגיש לאבטחה. הסביבה הזו מאפשרת להעביר את הידור קובצי ה-JAR של bootclasspath
ושל שרת המערכת (שמתבצעים בעקבות עדכון APEX) מהשלב המוקדם של האתחול לשלב שלפני ההפעלה מחדש, ומקצרת באופן משמעותי את זמן האתחול לאחר עדכון APEX.
ההטמעה מתבצעת ב-APEX של com.android.compos
. הרכיב הזה הוא אופציונלי ואפשר לכלול אותו באמצעות makefile.
מטרת האבטחה היא לבצע הידור של קלט מאומת בצורה נכונה וליצור את הפלט בידוד. Android, כלקוח לא מהימן, לא יכול לשנות את הפלט של הידור בשום דרך מלבד לגרום לכשל (כש-Android חוזרת להידור בזמן האתחול).
שירות הידור ב-VM יוצר חתימה רק אם לא מתרחשת שגיאה במהלך כל תהליך הידור. Android יכול לאחזר את המפתח הציבורי מהמכונה הווירטואלית כדי לאמת את החתימה.
המפתח של המכונה הווירטואלית נוצר מפרופיל ה-DICE של המכונה הווירטואלית, שמוגדר על ידי קובצי ה-APEX וה-APK שמצורפים למכונה הווירטואלית, בנוסף לפרמטרים אחרים של המכונה הווירטואלית, כמו יכולת ניפוי באגים.
כדי לקבוע אם המפתח הציבורי לא מגיע ממכונה וירטואלית לא צפויה, Android מפעילה את המכונה הווירטואלית כדי לקבוע אם המפתח תקין. המכונה הווירטואלית מופעלת בשלב מוקדם של האתחול אחרי כל עדכון של APEX.
כשמשתמשים בהפעלה המאומתת של מכונה וירטואלית מוגנת, שירות הידור מפעיל רק קוד מאומת. לכן, הקוד יכול לקבוע לקבל רק קלט שעומד בתנאים מסוימים, למשל, לקבל קובץ קלט רק אם השם שלו וה-digest של fs-verity
מוגדרים ברשימת ההיתרים.
כל ממשקי ה-API שנחשפים מהמכונה הווירטואלית הם שטחי התקפה. ההנחה היא שכל קבצי הקלט והפרמטרים מגיעים מלקוח לא מהימן, ולכן צריך לאמת אותם ולבדוק אותם לפני העיבוד.
תקינות קובצי הקלט/פלט מאומתת על ידי המכונה הווירטואלית, והקבצים מאוחסנים ב-Android בתור שרת קבצים לא מהימן, באופן הבא:
- צריך לאמת את התוכן של קובץ הקלט לפני השימוש באמצעות האלגוריתם
fs-verity
. כדי שקובץ קלט יהיה זמין ב-VM, צריך לספק את גיבוב הבסיס שלו בקונטיינר (APK) שתורם לפרופיל DICE של ה-VM. בעזרת גיבוב הבסיס המהימן, תוקף לא יכול לשבש את הקלט בלי שיזוהה. - יש לשמור על תקינות קובץ הפלט ב-VM. גם אם קובץ הפלט מאוחסן ב-Android, במהלך היצירה, השלמות נשמרת באותו פורמט של עץ
fs-verity
, אבל אפשר לעדכן אותו באופן דינמי. אפשר לזהות את קובץ הפלט הסופי באמצעות גיבוב הבסיס, שמבודד ב-VM. השירות במכונה הווירטואלית מגן על קובצי הפלט באמצעות חתימה.