חדשות היום
פריסקייל freescale

אתחול מאובטח

מאת: Haim Cohen, Freescale Israel

הקדמה

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

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

נקודת ההתחלה מבחינת מערכת שניתן לסמוך עליה היא תחושת הביטחון שיש למשתמש, לפיה היא תבצע אתחול בקוד מהימן בלבד ותפעל רק על פי קוד מהימן. על כן, אתחול מאובטח הוא אבן פינה בארכיטקטורה האמינה של פלטפורמת ®QorIQ, אשר כוללת גם זמן פעולה מאובטח, יכולת ניפוי שגיאות מאובטחת, גילוי ניסיונות חבלה ושימוש על פי מפתח סודי ייעודי להתקן. המעבד P1010 בפלטפורמת ®QorIQ ועמו גם המעבדים P2040, P2041, P3041, P4080, P4040, P5020 ו–P5010, מממש את ארכיטקטורת האמינות ומספק לאנשי פיתוח מערכות את נקודות העגינה בחומרה, אשר נחוצות לפיתוח מערכת שניתן לסמוך עליה. על אף שהמידע אודות אתחול מאובטח, שמופיע במאמר זה, מתייחס באופן מיוחד למעבד P1010, הוא ישים גם למוצרים אחרים שמפורטים בהמשך.

המטרות של אתחול מאובטח

אתחול מאובטח הוא תהליך שבו המעבד P1010 קובע אם ניתן להסתמך על בבואת המערכת (system image). המעבד P1010 אינו יודע את כוונת הקוד ואין דרך אובייקטיבית שבה אפשר לדעת אם הקוד ינסה לבצע פעולות זדוניות. לכן, בהקשר של אתחול מאובטח, המשמעות של “ניתן לסמוך עליו” הוא “מהימן”. אנשי פיתוח של מערכות מוסיפים חתימה ספרתית לקוד שלהם, אשר מאפשרת למעבד P1010 להבדיל בין קוד מהימן שניתן לסמוך עליו, לבין קוד שאינו מהימן ושלא ניתן לסמוך עליו.

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

 היכולת למנוע מהיע”מ (CPU) מהפעלת קוד שלא ניתן לסמוך עליו במקום קוד מהימן חתום על ידי יצרן ציוד מקור

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

 היכולת לאפשר לקוד שניתן לסמוך עליו להשתמש במפתח ראשי חד פעמי שניתן לתכנות, שהוא ייחודי להתקן (OTPMK), כאשר ארכיטקטורת האמינות מאשרת שהמעבד P1010 נמצא במצב בטוח

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

כתוצאה מכך, האתחול המאובטח וארכיטקטורת האמינות מושבתות (disabled) כברירת מחדל. אנשי פיתוח שלא מממשים תכונות של אמינות יכולים להתעלם מקיומם.

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

איור 1. חתימת קוד ואימות חתימה

חתימה של קוד

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

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

יש לנהל ולהגן בקפדנות על מפתחות פרטיים

כפי שמוצג באיור 1, יצרני OEM מוסיפים חישוב גיבוב (hash) לקוד של מערכת (פקודות שניתנות לביצוע ומידע של קונפיגורציה). יש אפשרות (ולעיתים, יש בכך אפילו יתרונות) להצפין חלקים של הקוד – פעולה שמונעת מתוקפים לגנוב את הקוד מזיכרון ההבזק (flash).

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

הקוד עם הגיבוב (hash) נחתם באמצעות מפתח חתימה פרטי בשיטת RSA. הקוד עם גיבוב שעבר הצפנה ידוע כחתימה ספרתית, והחתימה הספרתית מצורפת אל הקוד. הם נשמרים יחד בזיכרון ההבזק (או בזיכרון בלתי נדיף אחר במערכת). חישוב גיבוב נוסף מתווסף למפתח הציבורי שבו ישתמש P1010 על מנת לאמת את הקוד של המערכת. ערך גיבוב זה (גיבוב מפתח העל הראשי להצפנה) נצרב לתוך “בלוק נתיכים” (fuse block) בתוך P1010.

רצף אתחול מאובטח

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

השלב לפני האתחול

כאשר ההתקן מופעל במתח, לוגיקה של בקרת איפוס חוסמת את כל הפעילות של ההתקן (כולל פעילויות של סריקה ואיתור שגיאות), עד אשר אפשר לקרוא במדויק את ערכי “בלוק הנתיכים”. הערך החשוב ביותר בשלב זה מבין ערכי “הנתיכים” הוא ערך הסיבית מתכוון-לאבטח (ITS). כאשר יצרן ציוד מקור קובע ל-1 את סיבית ITS במעבד מאובטח עם “נתיכים”, הכוונה היא שהמערכת יכולה לפעול באופן מאובטח ושניתן לסמוך עליה, או שהיא לא תפעל כלל. קביעת סיבית ITS ל-1 קובעת את הגדרות ברירת המחדל של טווח שלם של אוגרי (register) קונפיגורציה בתוך ההתקן, ובעיקר נעילה של ממשקים, הרשאות גישה לזיכרון וקונפיגורציות של יחידת ניהול הזיכרון עד אשר מבוצעת תוכנה שניתן לסמוך עליה.

כאשר סיבית ITS נקבעת ל-1, המערכת מבצעת לצורך האתחול קפיצה אל זיכרון ROM פנימי המיועד לאתחול (IBR). התוכן של זיכרון ROM זה כולל את הקוד הפנימי של האתחול המאובטח (ISBC), אשר בודק את הערך של cfg_rom_loc על מנת לקבוע את המיקום של הקוד שאותו רוצה איש הפיתוח להפעיל, בהנחה שהאתחול המאובטח עבר.

שלב אתחול ISBC

הקוד הפנימי לאתחול מאובטח (ISBC) הוא קוד שפותח על ידי Freescale. קוד זה מבצע בדיקות תקינות אבטחה של ההתקן, ואימות של החתימה הספרתית על הקוד של איש הפיתוח, בזיכרון RAM חיצוני לא נדיף (NV). הקוד של איש הפיתוח יכול להיות בבואה מונוליתית שכוללת מנהל אתחול (boot loader), מערכת הפעלה ויישומים או שאתחול מאובטח יכול להיות כרוך בשרשרת של אימותים שבהם קוד ISBC מאמת את מנהל האתחול, מנהל האתחול מאמת את מערכת ההפעלה ומערכת ההפעלה מאמתת את היישומים. ערכת פיתוח התוכנה של Freescale להתקני ארכיטקטורה אמינה כוללת דוגמה של שרשרת אימותים, החל בקוד ISBC אשר מאמת גרסה של אתחול uboot שעברה שינוי, אשר אליה מתייחסים כאל uboot שניתן לסמוך עליה. בחלק מהתיעוד, מתייחסים לתוכנת uboot שניתן לסמוך עליה כאל קוד אתחול חיצוני מאובטח (ESBC).

התפקיד העיקרי של קוד ISBC הוא ביצוע אימות של המהימנות של קוד ESBC שמבצע פעולות קונפיגורציה נרחבות יותר בהתקן, ואימות של זהות קוד דומה לזה המבוצע על ידי קוד ISBC. קוד ISBC ניגש לזיכרון הראשי על מנת לקבל את קוד ESBC בכתובת שהוגדרה מראש. קוד ISBC מסתמך על קובץ כותרת שנקרא כותרת קובץ לרצף פקודות (CSF), כדי לקבוע שהוא מצא בבואה שיש לה פוטנציאל להיות תקיפה וכדי למצוא מהו גודלה של הבבואה שאותה יש לאמת, ולאתר מאפיינים נוספים שלה. כלי חתימת הקוד של Freescale מוסיף את כותרת CSF לבבואה של איש הפיתוח. אם קוד ISBC מאמת בהצלחה את הבבואה (את ESBC בדוגמה זו), הוא מעביר את P1010 למצב מאובטח ומבצע קפיצה אל נקודת ההתחלה בקוד ESBC. אם אימות החתימה הספרתית נכשל, המעבד P1010 עובר למצב כשל (FAIL) ונמנע מאתחול.

שלב קוד ESBC

בניגוד לקוד ISBC, שנשמר בזיכרון ROM פנימי (ואשר לכן אין אפשרות לשנות אותו), קוד ESBC (המשמש לאתחול uboot שניתן לסמוך עליו) הוא קוד לייחוס, המסופק על ידי Freescale ויצרני ציוד המקור יכולים לשנות אותו. לכן התיאור המופיע במאמר זה מבוסס על מימוש הייחוס של Freescale – פעולות אחרות אפשריות אף הן.

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

אם נכשל אימות של לקוח uboot שניתן לסמוך עליו אשר מבוצע על ידי אתחול uboot שניתן לסמוך עליו, המעבד P1010 יעבור למצב כשל (FAIL) והיע”מ ייכנס למצב של “אין פעולה” (spin) עד שייתבצע איפוס של ההתקן.

מסקנות

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

במשפחת מעבדי ®QorIQ של Freescale תוכננו בכוונה מראש מערכות משנה שניתן לסמוך עליהן, אשר מאפשרות למשתמשים לעמוד במטרות מחשוב מאובטח מבלי לסכן את העמידה בדרישות הביצועים של המשימה. ארכיטקטורת האמינות של פלטפורמת ®QorIQ, הקיימת במעבדים P1010, P2040, P2041, P3041, P4040, P4080, P5010 ו-P5020, מספקת ליצרני ציוד מקור נקודות עיגון בחומרה, אשר נדרשות להם על מנת לפתח מערכות שניתן לסמוך עליהן. תמיכת נוספת בחומרה המשמשת במהלך זמן האתחול מבטיחה שניתן לסמוך על קוד האתחול ועל הקוד לזמן פעולה לפני תחילת הביצוע שלהם, והיא מונעת גישה שאינה מאושרת לניפוי שגיאות במצב מאובטח. תכונות הארכיטקטורה שניתן לסמוך עליה והאתחול המאובטח המשולבות במעבדי ®QorIQ מספקות ליצרני ציוד מקור את הכלים הדרושים להשגת מחשוב מאובטח בתוך דרישות הגודל, המשקל וההספק של המערכת.

תגובות סגורות