אתחול מאומת מחייב אימות קריפטוגרפי של כל קוד ההפעלה והנתונים שהם חלק מגרסת האנדרואיד המאותחלת לפני השימוש. זה כולל את הליבה (נטענת ממחיצת boot
), את עץ המכשיר (נטען ממחיצת dtbo
), מחיצת system
, מחיצת vendor
וכן הלאה.
מחיצות קטנות, כגון boot
ו- dtbo
, הנקראות פעם אחת בלבד מאומתות בדרך כלל על ידי טעינת התוכן כולו לזיכרון ולאחר מכן חישוב ה-hash שלו. לאחר מכן, ערך הגיבוב המחושב הזה מושווה לערך הגיבוב הצפוי . אם הערך לא תואם, אנדרואיד לא ייטען. לפרטים נוספים, ראה זרימת אתחול .
מחיצות גדולות יותר שלא יתאימו לזיכרון (כגון מערכות קבצים) עשויות להשתמש בעץ hash שבו אימות הוא תהליך מתמשך המתרחש בזמן שהנתונים נטענים לזיכרון. במקרה זה, ה-hash השורש של עץ הגיבוב מחושב במהלך זמן הריצה ונבדק מול ערך ה-hash השורש הצפוי . אנדרואיד כולל את מנהל ההתקן dm-verity לאימות מחיצות גדולות יותר. אם בשלב מסוים ה-hash הבסיס המחושב אינו תואם את ערך ה-root hash הצפוי , הנתונים אינם בשימוש ואנדרואיד נכנס למצב שגיאה. לפרטים נוספים, ראה dm-verity corruption .
הגיבובים הצפויים מאוחסנים בדרך כלל בסוף או בתחילתה של כל מחיצה מאומתת, במחיצה ייעודית, או בשניהם. באופן מכריע, הגיבובים הללו חתומים (בין אם במישרין או בעקיפין) על ידי שורש האמון. כדוגמה, יישום AVB תומך בשתי הגישות, ראה אתחול מאומת של Android לפרטים.
הגנה לאחור
אפילו עם תהליך עדכון מאובטח לחלוטין, זה אפשרי לניצול קרנל אנדרואיד שאינו מתמשך להתקין ידנית גרסה ישנה ופגיעה יותר של אנדרואיד, לאתחל מחדש בגרסה הפגיעה, ולאחר מכן להשתמש בגרסת אנדרואיד זו כדי להתקין ניצול מתמשך. משם התוקף הוא הבעלים לצמיתות של המכשיר ויכול לעשות הכל, כולל השבתת עדכונים.
ההגנה מפני סוג זה של התקפות נקראת הגנת Rollback . הגנת החזרה לאחור מיושמת בדרך כלל על ידי שימוש באחסון מובהק לשיבוש כדי להקליט את הגרסה העדכנית ביותר של אנדרואיד וסירוב לאתחל את אנדרואיד אם היא נמוכה מהגרסה המוקלטת. מעקב אחר גרסאות מתבצע בדרך כלל על בסיס מחיצה.
לפרטים נוספים על האופן שבו AVB מטפל בהגנות החזרה לאחור, עיין ב-AVB README .
טיפול בשגיאות אימות
האימות יכול להיכשל בזמן האתחול (כגון, אם ה-hash המחושב במחיצת boot
אינו תואם את ה-hash הצפוי) או בזמן הריצה (כגון, אם dm-verity נתקל בשגיאת אימות במחיצת system
). אם האימות נכשל בזמן האתחול, המכשיר לא יכול לאתחל ומשתמש הקצה צריך לעבור שלבים כדי לשחזר את המכשיר.
אם האימות נכשל בזמן הריצה, הזרימה קצת יותר מסובכת. אם המכשיר משתמש ב-dm-verity, יש להגדיר אותו במצב restart
. במצב restart
, אם נתקלת בשגיאת אימות, המכשיר מופעל מחדש מיד עם דגל ספציפי שהוגדר כדי לציין את הסיבה. מטעין האתחול אמור להבחין בדגל זה ולהחליף את dm-verity לשימוש במצב I/O Error ( eio
) ולהישאר במצב זה עד להתקין עדכון חדש.
בעת אתחול במצב eio
, המכשיר מציג מסך שגיאה המודיע למשתמש כי זוהתה שחיתות וייתכן שהמכשיר לא יפעל כראוי. המסך מופיע עד שהמשתמש מבטל אותו. במצב eio
מנהל ההתקן של dm-verity לא יפעיל מחדש את המכשיר אם נתקלת בשגיאת אימות, במקום זאת מוחזרת שגיאת EIO והאפליקציה צריכה להתמודד עם השגיאה.
הכוונה היא שמעדכן המערכת יפעל (כך שניתן להתקין מערכת הפעלה חדשה ללא שגיאות שחיתות) או שהמשתמש יוכל להוציא כמה שיותר מהנתונים שלו מהמכשיר. לאחר התקנת מערכת ההפעלה החדשה, טוען האתחול מבחין במערכת ההפעלה החדשה שהותקנה ועובר חזרה למצב restart
.