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