מושג חדש שנקרא מצב הפעלה של SDV, שיכול להיות נעול או לא נעול, מגדיר את אופן הפעולה של סוכן גילוי השירותים של SDV במכונה וירטואלית של SDV כשמנסים להתחבר לסוכני גילוי שירותים אחרים (שפועלים במכונות וירטואליות אחרות של SDV) כדי ליצור רשת מאובטחת. הוא דומה למושג הקיים מצב המכשיר מ-Android Verified Boot.
מצב האתחול של SDV מנוצל כשמבצעים הקצאת משאבים למאגר האישורים של המכונה הווירטואלית של הרכב או כשמעדכנים אותו.
התנהגות מאובטחת של רשת Mesh ב-SDV
רשת Service Discovery יכולה להיות באחד מהמצבים הבאים, בהתאם לערכי האתחול שהיא מקבלת: Normal, Warning או Fatal.
רכב מגיע לידי הבעלים רק כשהרשת שלו במצב 'רגיל'. אי אפשר שהרשת תעבור ממצב 'רגיל' למצב 'אזהרה' בלי התערבות של אבחון. מצב 'אזהרה' בסביבת ייצור (למשל, לא פיתוח או ניפוי באגים) מתרחש רק במהלך הקצאת הרשאות.
שגיאה מסוג Fatal היא כשל בסיסי, בדומה לכשל באימות החתימה של תמונת system_ext בתוכנת האתחול של Android. אם ה-SDV Mesh עבר מ'רגיל' ל'קריטי' רק בגלל עדכון OTA (Over The Air), העדכון הזה ייחשב כעדכון בעייתי ותחזרו לגרסה המקורית 'רגילה'.
בקטעים הבאים מוסבר על המצבים האלה בפירוט.
רגיל
- הפעלת המערכת היא
SECUREמנקודת המבט של Service Discovery. - התכונה 'גילוי שירותים' מתחברת רק לעמיתים שלדעתה הפעילו את המחשב בצורה מאובטחת, ולכן היא מאמינה שהרשת המאובטחת של SDV שהיא חלק ממנה מאובטחת.
אזהרה אחת ()
- יכול להיות שהפריצה למערכת הצליחה כי חלק מהאימותים מושבתים.
- התכונה Service Discovery מתחברת רק לעמיתים שגם להם יש אותן בדיקות השבתה. לכן היא חלק מרשת SDV מאובטחת עם אותן תכונות אבטחה כמו שלה.
- יכול להיות שהפעלה של מחשב עמית הושלמה בהצלחה או שלא הושלמה בהצלחה – אי אפשר לאמת את זה בגלל כשלים מקומיים או השבתות.
- מחוץ לסביבת פיתוח או למצב פיתוח, יש לכך את ההשלכות הבאות:
- נתוני המשתמשים לא צריכים להיות זמינים. כלומר, היא לא יכולה להיות מועברת או מושפעת מהתקשורת דרך SDV Secure.
- רק שירותים שנדרשים לתהליכי הקצאת הרשאות צריכים להיות זמינים כשהרשת נמצאת במצב הזה.
קריטי
- שגיאה קריטית בשלבי הפעלת המערכת.
- יש לפחות כשל או שגיאה בסיסיים שמונעים מסוכן גילוי השירותים ליצור רשת. שירותים מקומיים לא יכולים לתקשר עם שירותים מרוחקים.
- הפעלת המערכת לא מאובטחת מנקודת המבט של Service Discovery.
מצב הפעלה של SDV
למצב האתחול של SDV יש שני ערכים אפשריים: UNLOCKED ו-LOCKED. בנוגע להקמת רשת Service Discovery, במצב LOCKED שגיאות אימות הן קריטיות, ואילו במצב UNLOCKED הן לא.
חשוב לשים לב שמצב ההפעלה של SDV שונה ממצב המכשיר של Android (שנקרא גם מצב AVB). מצב ההפעלה של SDV קובע את ההתנהגות של SDV Secure Mesh ואם שגיאות בחיבור לרשת הן קריטיות. מצב AVB קובע אם אימותים שמבוצעים על ידי תוכנת האתחול של Android הם קריטיים.
| CONDITION | מצב הפעלה של SDV | |
|---|---|---|
| לא נעולים | נעולה | |
| חנות האמון של VVM המקומי ריקה | אזהרה | קריטי |
| חסרה שרשרת DICE מקומית | קריטי | קריטי |
| כשל באימות שרשרת DICE מקומית | אזהרה | קריטי |
| התאמה בין מצב SDV מקומי לבין מצב AVB | לצפייה בטבלה | |
| השוואה בין ערכים של מצב מכשיר מרוחק | לצפייה בטבלה | |
התאמה מרחוק של uds_pubs נכשלה |
אזהרה | קריטי |
| אימות שרשרת DICE מרחוק נכשל (באמצעות מדיניות DICE) | אזהרה אחת () | קריטי |
| הלחיצת יד של האימות מרחוק נכשלה | קריטי | קריטי |
התאמה בין מצב SDV מקומי לבין מצב AVB
בטבלה הבאה אפשר לראות איך מצב AVB ומצב האתחול SDV משפיעים על ההתנהגות של SDV Secure Mesh. הצבעים מוגדרים בקטע שילוב ספציפי ל-Android במסמכי ה-AVB.
| מצב AVB לעומת מצב הפעלה של SDV | מצב הפעלה של SDV | ||
|---|---|---|---|
| לא נעולים | נעולה | ||
| נעילת AVB | ירוק | אזהרה אחת () | רגיל |
| צהוב | קריטי | קריטי | |
| AVB UNLOCKED | Orange | אזהרה | קריטי |
הערך של מצב המכשיר
בשרשרת DICE, לכל אישור CDI יש ערך מצב. הוא משמש לתיאור מצב האבטחה של השכבה הזו על סמך קלט ההגדרה שלה. כדי לבטא את עמדת האבטחה של כל התוכנות במכשיר, מוגדר ערך מצב המכשיר, שנגזר מערך המצב של כל שלבי ה-CDI בשרשראות ה-DICE שרלוונטיות למכונת SDV וירטואלית נתונה (כלומר, Android HLOS ו-Secure World) ומוגדר כך:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
אלגוריתם
- אני רוצה ש-
deviceModeיהיהDeviceMode::Normal -
diceChainListהיא רשימת שרשראות ה-DICE שרלוונטיות למכונת VM של SDV - לכל
diceChainב-diceChainList:-
cdiListהיא רשימת אישורי ה-CDI ב-diceChain: - לכל
cdiCertב-cdiList:-
cdiDeviceModeהואDeviceModeשמתאים ל-cdiCert.mode. - מגדירים את
deviceModeלהיותmin(deviceMode, cdiDeviceMode).
-
-
- החזרה
deviceMode.
השוואה בין ערכים של מצב מכשיר מרוחק
סוכן לזיהוי שירותים יתחבר רק לסוכנים אחרים שיש להם אותו ערך של מצב המכשיר.
הערך של מצב המכשיר מבטיח שלא יכולים להיות חברים ברשת עם מאפייני אבטחה שונים. לכן, לרשת שמתקבלת יש עמדת אבטחה אחידה בין כל החברים שלה.
| הערך של מצב המכשיר | שלט רחוק | ||||
|---|---|---|---|---|---|
| לא מוגדר | ניפוי באגים | שחזור | רגיל | ||
| מקומי | לא מוגדר | קריטי | קריטי | קריטי | קריטי |
| ניפוי באגים | קריטי | אזהרה | קריטי | קריטי | |
| שחזור | קריטי | קריטי | אזהרה | קריטי | |
| רגיל | קריטי | קריטי | קריטי | רגיל | |
תהליך הקצאת הרשאות במפעל
זהו תהליך ההקצאה בקו הייצור של כלי הרכב, שבו מניחים שאין תשתית של מפתח ציבורי.
התהליך הזה תלוי בערך של 32 בייט שמאוחסן בזיכרון OTP (זיכרון שניתן לתכנות חד-פעמי) שנקרא VVMFactoryTrust. אם הערך הזה מוגדר, הוא מועבר לליבה כפרמטר בשם androidboot.sdv.vvmfactorytrust.
לכל המכונות הווירטואליות ב-ECU צריכים להיות אותם מצב אתחול של SDV ו-VVMFactoryTrust.
מצב התחלתי
כל יחידות ה-ECU נעולות בהתחלה במצב אתחול SDV, עם VVMFactoryTrust ו-VVMTrustStore ריקים, מלבד uds_certs שאולי קיימים ב-VVMTrustStore.
איור 1 מציג דוגמה שבה יש שלוש מכונות וירטואליות של SDV (VM-A, VM-B ו-VM-C) שמפוזרות בשני יחידות ECU נפרדות (ECU-0 ו-ECU-1).
שלב 1: מריצים את הכלי sdv_provisioning_tool
מפעילים את כל המכונות הווירטואליות מכל יחידות ה-ECU.
בכל מכונה וירטואלית:
הפעלה של
sdv_provisioning_tool- הכלי מתקשר עם סוכן גילוי השירות המקומי וממתין לאות ממנו שהרשת המאובטחת של SDV הושלמה, ושהסוכן כתב את רשימת המפתחות הציבוריים של UDS אל
/vvmtruststore/uds_pubs. - במקרה כזה, הכלי מקבל את הגיבוב של
/vvmtruststore/uds_pubsשזה עתה נכתב ומציג אותו.
- הכלי מתקשר עם סוכן גילוי השירות המקומי וממתין לאות ממנו שהרשת המאובטחת של SDV הושלמה, ושהסוכן כתב את רשימת המפתחות הציבוריים של UDS אל
שלב 2: כותבים VVMFactoryTrust
במכונה וירטואלית אחת של כל ECU:
- כותבים את הגיבוב של
/vvmtruststore/uds_pubsשהופק על ידיsdv_provisioning_toolבשלב הקודם אל VVMFactoryTrust. אופן הכתיבה תלוי ב-OEM או בספק, ולכן הוא לא נכלל בהגדרות האלה.
שלב 3: הפעלה מחדש במצב אתחול SDV נעול
מפעילים מחדש את כל המכונות הווירטואליות בכל יחידות ה-ECU במצב SDV Boot Mode Locked (מצב אתחול SDV נעול).
הסוכן Service Discovery נותן אמון במכונות וירטואליות ב-ECU עם המפתחות הציבוריים של UDS שמפורטים ב-uds_pubs, כי הגיבוב של הקובץ הזה תואם ל-VVMFactoryTrust.
מכיוון שיחידות ה-ECU הוקצו יחד, הן קשורות זו לזו באופן קבוע ולכן אפשר להתייחס אליהן כיחידת חומרה אחת מנקודת המבט של אימות שרשרת DICE.
תהליך החלפת חלקים
זהו תהליך ההקצאה בסדנה או במוסך מורשים לתיקון רכב, שבהם צריך להחליף יחידת ECU פגומה ביחידה חדשה שלא הוקצתה לשימוש.
התהליך הזה תלוי באישור UDS שהונפק ישירות על ידי רשות הבסיס שצוינה ב-vvmconfig או בעקיפין, דרך שרשרת של רשויות ביניים.
מצב התחלתי
כל המכונות הווירטואליות כבר הוקצו כברירת מחדל ופועלות במצב אתחול SDV נעול.
באיור 5 מוצגת דוגמה שבה יחידת הבקרה האלקטרונית ECU-0 לא תקינה ולכן צריך
להחליף אותה.
שלב 1: התקנת יחידת הבקרה האלקטרונית (ECU) החדשה
מתקינים את ה-ECU החדש, שיהיה במצב ריק ולא מוקצה.
באיור 6, כשמפעילים את ECU-2 (יחידת הבקרה האלקטרונית החלופית), יש שתי רשתות SDV מאובטחות נפרדות: אחת במצב אזהרה ואחת במצב רגיל. שתי הרשתות לא שלמות.
שלב 2: הפעלה מחדש במצב אתחול SDV לא נעול
אתחול מחדש של כל מכונות ה-VM של כל יחידות ה-ECU במצב אתחול SDV לא נעול.
באיור 7, מכונות ה-VM VM-B ו-VM-C מצטרפות לרשת המאובטחת SDV Secure Mesh, שהיא עכשיו מלאה.
שלב 3: מריצים את הכלי sdv_provisioning_tool
בכל מכונה וירטואלית, מריצים את sdv_provisioning_tool.
הכלי מתקשר עם סוכן גילוי השירות המקומי וממתין לאות ממנו שהרשת המאובטחת של SDV הושלמה, ושהסוכן כתב את רשימת המפתחות הציבוריים של UDS אל /vvmtruststore/uds_pubs.
במקרה כזה, הכלי מקבל את הגיבוב של /vvmtruststore/uds_pubs שזה עתה נכתב ומציג אותו, אבל הגיבוב הזה לא נמצא בשימוש בתהליך הזה.
שלב 4: התקנת אישורי UDS
- תמצית
/vvmtruststore/uds_pubsממכונה וירטואלית שרירותית של SDV. לא משנה באיזו מהן תבחרו, כי היא תהיה זהה לכל המכונות הווירטואליות באותו SDV Secure Mesh. - שליפה של אישורי הקצאת הרשאות לכל המפתחות הציבוריים של UDS שמופיעים ב-
/vvmtruststore/uds_pubs.- בדרך כלל, המשמעות היא שליחת הנתונים לשרת מרוחק שבו האישורים כבר מאוחסנים, או שהשרת ייצור אותם על ידי בדיקת המפתחות הציבוריים שהתקבלו מול מסד נתונים של מפתחות ציבוריים ידועים של UDS. מסד הנתונים הזה היה אמור להיבנות ממפתחות ציבוריים של UDS שחולצו במהלך ייצור ה-ECU.
- כותבים את
/vvmtruststore/uds_certsשל כל מכונת SDV וירטואלית.
שלב 5: הפעלה מחדש במצב הפעלה של SDV נעול
מפעילים מחדש את כל המכונות הווירטואליות עם מצב אתחול SDV נעול.
אם מסיבה כלשהי רשת ה-SDV המאובטחת לא הושלמה, צריך לחזור אל שלב 2.