תרחישים לדוגמה

בדף הזה מפורטים תרחישי שימוש נפוצים ב-AVF.

קומפילציה מבודדת

מכונה וירטואלית (VM) מוגנת היא מובלעת מאובטחת בתוכנה, שמספקת סביבה בטוחה להידור קוד רגיש מבחינת אבטחה. הסביבה הזו מאפשרת להעביר את הקומפילציה של קובצי ה-JAR של bootclasspath ושל שרת המערכת (מופעלת על ידי עדכון APEX) מההפעלה המוקדמת אל לפני ההפעלה מחדש, ומקצרת באופן משמעותי את זמן ההפעלה אחרי עדכון APEX.

ההטמעה מתבצעת ב-APEX‏ com.android.compos. הרכיב הזה הוא אופציונלי ואפשר לכלול אותו באמצעות makefile.

קומפילציה מבודדת

איור 1. הידור של קובצי JAR בעדכוני Mainline. הידור של קובצי JAR בעדכוני Mainline

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

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

המפתח של המכונה הווירטואלית נוצר מפרופיל ה-DICE של המכונה הווירטואלית, שמוגדר על ידי קובצי ה-APEX וקובצי ה-APK שמוצמדים למכונה הווירטואלית, בנוסף לפרמטרים אחרים של המכונה הווירטואלית, כמו יכולת ניפוי הבאגים.

כדי לקבוע אם המפתח הציבורי לא מגיע ממכונה וירטואלית לא צפויה, מערכת Android מאתחלת את המכונה הווירטואלית כדי לבדוק אם המפתח נכון. המכונה הווירטואלית מופעלת בהפעלה מוקדמת אחרי כל עדכון APEX.

באמצעות הפעלה מאומתת של מכונות וירטואליות מוגנות, שירות ההידור מפעיל רק קוד מאומת. כתוצאה מכך, הקוד יכול לקבוע לקבל רק קלטים שעומדים בתנאים מסוימים. לדוגמה, לקבל קובץ קלט רק אם השם שלו וערך הגיבוב fs-verity מוגדרים ברשימת ההיתרים.

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

ה-VM מאמת את התקינות של קובצי הקלט והפלט, והקבצים מאוחסנים ב-Android כשרת קבצים לא מהימן, באופן הבא:

  • לפני שמשתמשים בתוכן של קובץ קלט, צריך לאמת אותו באמצעות האלגוריתם fs-verity. כדי שקובץ קלט יהיה זמין במכונה הווירטואלית, צריך לספק את הגיבוב של השורש שלו בקונטיינר (APK) שמשתתף בפרופיל ה-DICE של המכונה הווירטואלית. בעזרת הגיבוב (hash) המהימן של הבסיס, תוקף לא יכול לשנות את הקלט בלי שזה יתגלה.
  • צריך לשמור על השלמות של קובץ הפלט במכונה הווירטואלית. גם אם קובץ פלט מאוחסן ב-Android, במהלך היצירה, השלמות נשמרת עם אותו פורמט עץ fs-verity, אבל אפשר לעדכן אותו באופן דינמי. אפשר לזהות את קובץ הפלט הסופי באמצעות הגיבוב הבסיסי, שהוא מבודד במכונה הווירטואלית. השירות במכונה הווירטואלית מגן על קובצי הפלט באמצעות חתימה.

סביבת פיתוח של Linux

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

סביבת הפיתוח של Linux זמינה במכשירים נבחרים ופועלת במכונה וירטואלית לא מוגנת.

תרחיש לדוגמה לשימוש בסביבת הפיתוח של Linux

איור 2. תרחיש לדוגמה לשימוש בסביבת פיתוח של Linux.

הרכיבים העיקריים של מכונת ה-VM של Linux הם:

  • אפליקציית Terminal: אפליקציה ל-Android שמספקת ממשק טרמינל. הוא משתמש ב-WebView כדי להתחבר לשירות אינטרנט שפועל במכונה הווירטואלית לצורך אינטראקציה. האפליקציה הזו מושבתת כברירת מחדל. מפעילים אותה בהגדרות למפתחים.
  • Android Virtualization Framework‏ (AVF): מערכת המשנה הקיימת של Android ליצירה ולניהול של מכונות וירטואליות. כדי לתמוך בתכונה הזו בתמונות של מערכות הפעלה בהתאמה אישית, נדרש שינוי מינימלי.
  • מכונה וירטואלית: מכונה וירטואלית שנוצרת על ידי AVF. הוא מארח את שירות הטרמינל, ו-AVF יוצר אותו במיוחד בשביל הפונקציונליות של אפליקציית הטרמינל.
  • תמונה של מערכת ההפעלה: תמונה של מערכת הפעלה שמבוססת על Debian, עם שינויים קלים מ-Debian upstream. אפליקציית הטרמינל מורידה את התמונה הזו משרת חיצוני של Google. הוא משמש כבסיס לפעולת המכונה הווירטואלית.
  • Guest Agent: תוכנה חדשה במכונה הווירטואלית. הוא מדווח על מצב מערכת ההפעלה ל-AVF ומספק שליטה במכונה הווירטואלית.
  • ttyd: תוכנה בקוד פתוח שפועלת במכונת ה-VM ומיישמת אמולציית מסוף באמצעות HTTP. ה-WebView של אפליקציית Terminal מתחבר אליו.
  • Tethering Manager: מערכת משנה קיימת של Android. הוא מספק גישה לרשת למכונה הווירטואלית על ידי שיתוף האינטרנט מהמכשיר עם מערכת ההפעלה Android.