סקירה כללית על תוכנת אתחול

תוכנת אתחול היא קובץ אימג' בבעלות הספק, שמפעיל את הליבה במכשיר. מנהל האתחול שומר על מצב המכשיר והוא אחראי להפעלה הראשונית של סביבת המחשוב המאובטחת (TEE) ולקישור של Root of Trust שלו. מנהל האתחול גם מאמת את תקינות המחיצות boot ו-recovery לפני שהוא מעביר את הביצוע לליבת המעבד.

דוגמה לתהליך של תוכנת אתחול

דוגמה לתהליך של מנהל האתחול:

  1. טעינת זיכרון והפעלה שלו.

  2. מאמתים את המכשיר לפי תהליך האימות של הפעלה מאומתת.

  3. מאמתים את מחיצות האתחול, כולל boot,‏ dtbo,‏ init_boot ו-recovery, בהתאם לתהליך של הפעלה מאומתת. כחלק מהשלב הזה, בודקים את הגרסה של כותרת קובץ האימג' לאתחול ומנתחים את הכותרת בהתאם.

  4. אם נעשה שימוש בעדכוני A/B, צריך לקבוע את החריץ הנוכחי להפעלה.

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

  6. טעינה של קובצי אימג' לאתחול, כמו boot.img,‏ vendor_boot.img,‏ init_boot.img וקובצי אימג' קנייניים אחרים של ספקים. קובצי האימג' להפעלה מכילים את קובצי האימג' של הליבה ושל ה-ramdisk.

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

    2. טוענים את הדיסקים הווירטואליים מסוג RAMdisk ואת הקטע bootconfig לזיכרון כדי ליצור את initramfs.

תכונות נוספות שקשורות למחולל האתחול

בהמשך מופיעה רשימה של תכונות נוספות שקשורות למחולל האתחול שאפשר להטמיע:

  • שכבת-על של פירוט מבנה המכשיר (DTO). שכבת-על של עץ המכשיר מאפשרת למחולל האתחול לתמוך בתצורות חומרה שונות. קובץ ה-DTO עובר הידור ל-device tree blob‏ (DTB) שמשמש את מנהל האתחול.

  • רנדומיזציה של כתובות וירטואליות של קובץ אימג' של ליבה מנהל האתחול תומך ביצירת כתובת וירטואלית אקראית שבה נטען קובץ האימג' של הליבה. כדי לגרום לכתובת להיות אקראית, מגדירים את RANDOMIZE_BASE כ-true בתצורת הליבה. כדי לספק את האנטרופיה, מנהל האתחול צריך להעביר ערך u64 אקראי בצומת /chosen/kaslr-seed של עץ המכשיר.

  • הפעלה מאומתת אתחול מאומת מאפשר למחולל האתחול לוודא שכל הקוד שמופעל מגיע ממקור מהימן.

  • הגדרות אתחול Boot config זמין ב-Android מגרסה 12 ואילך, והוא מנגנון להעברת פרטי התצורה מה-build ומ-bootloader למערכת ההפעלה. לפני Android 12, נעשה שימוש בפרמטרים של שורת הפקודה של הליבה עם הקידומת androidboot.

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

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

שורת הפקודה של הליבה

שרשור שורת הפקודה של הליבה מהמיקומים הבאים:

  • שורת הפקודה של תוכנת האתחול: קבוצה של פרמטרים סטטיים ודינמיים שמוגדרים על ידי תוכנת האתחול

  • פירוט מבנה המכשיר: מהצומת chosen/bootargs

  • defconfig: מ-CONFIG_CMDLINE

  • boot.img: משורת הפקודה (למידע על ערכי הזחה וגודלים, אפשר לעיין במאמר system/core/mkbootimg/bootimg.h

החל מ-Android 12, לפרמטרים androidboot.* שצריך להעביר למרחב המשתמש של Android, אפשר להשתמש ב-bootconfig במקום בשורת הפקודה של הליבה.