אבטחה

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

  • אנדרואיד מבטיחה שרק אפליקציות עם הרשאות pVM מורשות ליצור או לבדוק pVMs.

  • טוען האתחול - טוען האתחול מבטיח שרק תמונות pVM חתומות על ידי גוגל או ספקי מכשירים מורשים לאתחל ומכבד את נוהל האתחול המאומת של Android . ארכיטקטורה זו מרמזת על אפליקציות המריצות pVMs אינן יכולות לאגד את הגרעינים שלהן.

  • pVM מספק הגנה מעמיקה, כמו עם SELinux , עבור מטענים המופעלים ב-pVM. Defense-in-depth מונע מיפוי של נתוני הפעלה ( neverallow execmem ) ומבטיח ש- W^X מתקיים עבור כל סוגי הקבצים.

מודל אבטחה

סודיות, יושרה וזמינות (שלישיית CIA), מהווים מודל שנועד להנחות את מדיניות אבטחת המידע:

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

סודיות ויושרה

סודיות נובעת ממאפייני בידוד הזיכרון שנאכפים על ידי pKVM hypervisor. pKVM עוקב אחר בעלות הזיכרון של דפי זיכרון פיזיים בודדים וכל בקשות של בעלים לשיתוף דפים. pKVM מבטיח שרק ל-pVMs זכאים (מארח ואורחים) העמוד הנתון ממופה בטבלאות העמודים שלהם בשלב 2 שנשלטות על ידי ה-Hypervisor. ארכיטקטורה זו טוענת כי תוכן הזיכרון שבבעלות pVM נשאר פרטי אלא אם כן הבעלים חולק אותו במפורש עם pVM אחר.

הגבלות לשמירה על סודיות חלות גם על כל הישויות במערכת המבצעות גישה לזיכרון מטעם pVMs, כלומר התקנים ושירותים בעלי יכולת DMA הפועלים בשכבות מועדפות יותר . ספקי System-on-Chip (SoC) חייבים לעמוד בסט חדש של דרישות לפני שהם יכולים לתמוך ב-pKVM. אם לא, לא ניתן לספק סודיות.

שלמות חלה על נתונים בזיכרון ובחישוב . pVMs לא יכולים:

  • שנה את הזיכרון של זה ללא הסכמה.
  • להשפיע זה על מצב המעבד של זה.

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

העקרונות הללו אינם שונים מבידוד תהליכים שמציעה לינוקס, כאשר הגישה לדפי זיכרון נשלטת באמצעות טבלאות עמוד שלב 1 ומעברי ההקשר של הליבה בין תהליכים. עם זאת, לחלק EL2 של pKVM, אשר אוכף את המאפיינים הללו, יש בערך מחצית משטח ההתקפה בהשוואה לכל ליבת לינוקס (בערך 10,000 לעומת 20 מיליון שורות קוד) ולכן מציע בטחון חזק יותר לשימוש במקרים שהם רגישים מכדי להסתמך עליהם. על בידוד תהליך.

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

שאר העמודים מתייחסים להבטחות הסודיות והשלמות שכל רכיב סביב pKVM מספק.

היפרוויזר

pKVM הוא hypervisor מבוסס KVM המבודד מכשירי pVM ו-Android לתוך סביבות ביצוע שאינן מהימנות הדדית. מאפיינים אלה מתקיימים במקרה של פשרה בתוך כל pVM, כולל המארח. היפרוויזרים חלופיים התואמים ל-AVF צריכים לספק מאפיינים דומים.

  • pVM לא יכול לגשת לדף השייך לישות אחרת, כגון pVM או hypervisor, אלא אם כן שותף במפורש על ידי בעל הדף. כלל זה כולל את ה-pVM המארח והוא חל על גישה למעבד ו-DMA כאחד.

  • לפני שדף המשמש את pVM מוחזר למארח, למשל כאשר ה-pVM מושמד, הוא נמחק.

  • הזיכרון של כל ה-pVMs וקושחת ה-pVM מאתחול מכשיר אחד נמחק לפני שמטען האתחול של מערכת ההפעלה פועל באתחול ההתקן הבא.

  • כאשר מאתר באגים בחומרה, כגון SJTAG, מחובר, pVM לא יכול לגשת למפתחות שהוטבעו בעבר.

  • הקושחה של pVM לא מאתחלת אם היא לא יכולה לאמת את התמונה הראשונית.

  • הקושחה של pVM לא מאתחלת אם השלמות של ה- instance.img נפגעת.

  • שרשרת אישורי האתחול (BCC) ומזהי התקנים מורכבים (CDI) המסופקים למופע pVM יכולים להיגזר רק על ידי המופע המסוים הזה.

מערכת הפעלה אורחת

Microdroid הוא דוגמה למערכת הפעלה הפועלת בתוך pVM. Microdroid מורכב ממטען אתחול מבוסס U-boot, GKI, ומתת-קבוצה של מרחב משתמשי אנדרואיד, ומשגר עומסים. מאפיינים אלה מתקיימים במקרה של פשרה בתוך כל pVM, כולל המארח. מערכות הפעלה חלופיות הפועלות ב-pVM צריכות לספק מאפיינים דומים.

  • Microdroid לא יאתחל אם לא ניתן לאמת boot.img , super.img , vbmeta.img או vbmeta\_system.img .

  • Microdroid לא יאתחל אם אימות ה-APK נכשל.

  • אותו מופע Microdroid לא יאתחל גם אם ה-APK עודכן.

  • Microdroid לא יאתחל אם אחד מה-APEXs נכשל באימות.

  • Microdroid לא יאתחל (או אתחול עם מצב התחלתי נקי) אם ה- instance.img משתנה מחוץ ל-pVM האורח.

  • Microdroid מספק אישור לשרשרת האתחול.

  • כל שינוי (לא חתום) בתמונות הדיסק המשותף עם ה-pVM האורח גורם לשגיאת I/O בצד ה-pVM.

  • BCC ו-CDI שסופקו למופע pVM יכולים להיגזר רק על ידי המופע המסוים הזה.

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

דְמוּי אָדָם

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

  • PVM אורח לא יכול לקיים אינטראקציה ישירה עם (כגון ליצור חיבור vsock ) PVM אורח אחרים.

  • רק ה- VirtualizationService ב-pVM המארח יכול ליצור ערוץ תקשורת ל-pVM.

  • רק האפליקציות החתומות עם מפתח הפלטפורמה יכולות לבקש הרשאה ליצור, להחזיק או לקיים אינטראקציה עם מכשירי pVM.

  • המזהה, הנקרא מזהה הקשר (CID), המשמש בהגדרת חיבורי vsock בין המארח ל-pVM אינו בשימוש חוזר כאשר ה-pVM המארח פועל. לדוגמה, אתה לא יכול להחליף pVM פועל באחר.

זמינות

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

תחומי האחריות של המארח כוללים תזמון של המעבדים הווירטואליים של ה-pVM. KVM, בניגוד ל-Hypervisors רגילים מסוג Type-1 (כגון Xen), מקבלת את החלטת התכנון המפורשת להאציל תזמון עומסי עבודה לגרעין המארח. בהתחשב בגודל ובמורכבות של המתזמנים של ימינו, החלטת עיצוב זו מקטינה משמעותית את גודל בסיס המחשוב המהימן (TCB) ומאפשרת למארח לקבל החלטות תזמון מושכלות יותר כדי לייעל את הביצועים. עם זאת, מארח זדוני יכול לבחור לעולם לא לקבוע אורח.

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

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

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

הפעלה בטוחה

הנתונים קשורים למופעים של pVM, ואתחול מאובטח מבטיח שניתן לשלוט בגישה לנתונים של מופע. האתחול הראשון של מופע מספק אותו על ידי יצירה אקראית של מלח סודי עבור ה-pVM וחילוץ פרטים, כגון מפתחות ציבוריים אימות ו-hash, מהתמונות הטעונות. מידע זה משמש לאימות האתחולים הבאים של מופע pVM ולהבטיח שסודות המופע ישוחררו רק לתמונות שעוברות אימות. תהליך זה מתרחש עבור כל שלב טעינה בתוך ה-pVM: קושחת pVM, pVM ABL, Microdroid וכן הלאה.

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

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

מכשירים לא נעולים

כאשר נעול מכשיר עם fastboot oem unlock , נתוני המשתמש נמחקים. תהליך זה מגן על נתוני המשתמש מפני גישה לא מורשית. נתונים שהם פרטיים ל-pVM אינם חוקיים גם כאשר מתרחשת ביטול נעילה של מכשיר.

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

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