בדף הזה מפורטים תרחישי שימוש נפוצים ב-AVF.
קומפילציה מבודדת
מכונה וירטואלית (VM) מוגנת היא מובלעת מאובטחת בתוכנה, שמספקת סביבה בטוחה להידור קוד רגיש מבחינת אבטחה.
הסביבה הזו מאפשרת להעביר את הקומפילציה של קובצי ה-JAR של bootclasspath
ושל שרת המערכת (מופעלת על ידי עדכון APEX) מההפעלה המוקדמת אל לפני ההפעלה מחדש, ומקצרת באופן משמעותי את זמן ההפעלה אחרי עדכון APEX.
ההטמעה מתבצעת ב-APEX com.android.compos
. הרכיב הזה הוא אופציונלי ואפשר לכלול אותו באמצעות makefile.
יעד האבטחה הוא לקמפל באופן מהימן קלט מאומת ולהפיק את הפלט בבידוד. לקוח לא מהימן כמו 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, צריך להפעיל את האפשרויות למפתחים.
- אחרי שמפעילים את האפשרויות למפתחים, אפליקציית הטרמינל מופיעה במפעיל האפליקציות במסך הבית.
- מפעילים את אפליקציית Terminal ממרכז האפליקציות.
- אם צריך, אפליקציית Terminal מורידה את תמונת מערכת ההפעלה מ-Play.
- אפליקציית הטרמינל משתמשת ב-Android Virtualization Framework (AVF) כדי ליצור מכונה וירטואלית (VM).
- לאחר מכן, AVF מפעיל את מכונת ה-VM עם תמונת מערכת ההפעלה.
- מערכת ההפעלה מופעלת במכונה הווירטואלית מהתמונה.
- אחרי שהמכונה הווירטואלית מופעלת, ה-WebView באפליקציית הטרמינל מתחבר לשירות אינטרנט במכונה הווירטואלית. השירות הזה מספק גישה לטרמינל באמצעות HTTP.
- כדי לקיים אינטראקציה עם הטרמינל, מזינים פקודות וצופים בפלט באפליקציה.
הרכיבים העיקריים של מכונת ה-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.
בטיחות בנוגע לתוכן במכשיר
הפתרון 'בטיחות בנוגע לתוכן במכשיר' הוא פתרון לשמירה על פרטיות בנושא בטיחות תוכן, שנוצר על ידי הצוות של 'בטיחות בנוגע לתוכן במכשיר'. הוא מסווג את רמת הבטיחות של התוכן במכשירים של צד ראשון וצד שלישי במגוון מוצרי Google, ומגן על יותר ממיליארד משתמשים מפני תוכן פוגע, בלי לשלוח את נתוני המשתמשים בחזרה לשרתי Google. הוא מתוכנן לפעול בהתאם לעקרונות של Private Compute Core (PCC) כדי להבטיח תקשורת שקופה ושמירה על הפרטיות בין הלקוח, המכונה הווירטואלית (VM) ולמנוע חילוץ של נתוני משתמשים. אפשר להשתמש בו למטרות כמו הפעלת זיהוי של ניצול לרעה במכשירים, כמו זיהוי איומים בזמן אמת ב-Play Protect.
בתרחיש השימוש הזה, המערכת משתמשת במכונות וירטואליות מוגנות כדי להריץ את סיווג המודלים שלה לצורך זיהוי איומים בזמן אמת ב-Play Protect, וכך משפרת באופן משמעותי את האבטחה של המודלים וההגנות שלה. כך נמנעים הנדסה הפוכה ומניפולציה על ידי תוקפים, גם במכשירים עם הרשאות Root. זאת באמצעות וידוא שרק קוד מאושר פועל ושהפעולות שלו מוסתרות מתהליכים חיצוניים.
אלה התהליכים העיקריים:
- זיהוי איומים בזמן אמת שולח פינג ל-Private Compute Services כדי להפעיל את המכונה הווירטואלית. Private Compute Services הוא שירות ביניים שמתמקד בפרטיות בין PCC לבין שרת הענן
- Private Compute Services מפעיל את המכונה הווירטואלית ומקבל ממנה את המפתח הציבורי
- Private Compute Services מעביר את הבעלות על המכונה הווירטואלית ל-Play Protect live threat detection
- Private Compute Services שולח אימות ומפתח ציבורי לשרת
- השרת מאמת את האישור ומצפין את ההגנות באמצעות המפתח הציבורי של מכונת ה-VM
- השרת שולח בחזרה למכשיר את אמצעי ההגנה המוצפנים
- לאחר מכן, זיהוי האיומים בזמן אמת במכשיר יכול להשתמש בהגנה מוצפנת במכונה הווירטואלית. המכונה הווירטואלית היא הישות היחידה עם המפתח הפרטי שיכול לפענח את ההגנות
הרכיבים העיקריים הם:
- השרת: מצפין ומספק הגנות מוצפנות למכונה הווירטואלית
- שירותי מחשוב פרטיים: משמשים להפעלת המכונה הווירטואלית ולתיווך התקשורת עם המכונה הווירטואלית, ומציגים שקיפות לגבי העובדה שנתוני משתמשים לא עוברים דרך Astrea לשרת
- זיהוי איומים בזמן אמת ב-Play Protect:
- מכיל מסווגים של מודלים שסופקו על ידי Content Safety במכשיר ומשתמש בהם
- מקבל את הבעלות על המכונה הווירטואלית ומחזיק בה לשימוש בסיווג
- מפעיל ומפסיק את ה-VM לפי הצורך.