פריסקייל

הפלטפורמה האידיאלית עבור ההתקנים המשובצים של הדור הבא

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

איור 1. אתחול מאומת עם צמד של מפתח ציבורי-פרטי

איור 2. אימות בעזרת אתחול מוצפן

אתחול מאומת
הבסיס של מערכת מאובטחת אמור להיות מורכב מפלטפורמת החומרה ומהקוד הקריטי המתבצע על פלטפורמה זו. אפשר להשתמש ביחידת זיכרון ROM שעל השבב על מנת לאמת את אמינותו ושלמותו של הקוד הקריטי השולט על הפעולה הכוללת של המערכת.
תהליך האתחול (boot) זוכה בשליטה על המערכת מייד לאחר האיפוס (reset) על ידי ביצוע של קוד אתחול ידוע שנמצא ביחידת זיכרון ROM שעל השבב. לאחר ביצוע אימות של אמינות תוכנת טעינת אתחול (תוכנת Bootloader) שנמצאת בהתקן זיכרון חיצוני (לדוגמה זיכרון הבזק (Flash) מסוג NOR או NAND), תהליך האתחול משתמש בטכניקות הצפנה מבוססות, כדי לאשר את אמינותו ושלמותו של קוד מערכת ההפעלה ושל הנתונים שבהתקן הזיכרון החיצוני.
האתחול המאומת ביחידת הזיכרון ROM לאתחול המערכת, מגן על הפלטפורמה מפני ביצוע של תוכנה לא מאומתת (תוכנה זדונית) במהלך רצף פעולות האתחול. באיור 1 ניתן לראות את התהליך של אתחול מאומת.
רצף הפעולות נסמך על חתימות ספרתיות שנוצרות תוך כדי שימוש בשיטה של אלגוריתם גיבוב אבטחה (SHA – Secure Hash Algorithm) ומערכת הצפנה עם מפתח ציבורי (Public Key Crypto) (לדוגמה RSA). צמד של מפתח ציבורי-פרטי מיוצר באמצעות שימוש בסביבת יצירה מאובטחת. במסגרת סביבת היצירה, תמונת התוכנה מגובבת ונחתמת באמצעות מפתח פרטי. כך נוצרת חתימה ספרתית שמאוחסנת, עם הבבואה (image) יחד, בהתקן זיכרון הבזק חיצוני, כפי שאפשר לראות באיור.
במהלך אתחול ההתקן, תהליך אימות החתימה מתבצע כולו כחלק מתהליך האתחול המאומת ביחידת זיכרון ROM שעל שבב. פונקצית HASH לייחוס מחושבת על ידי פענוח הצפנה אסימטרי שמשתמש במפתח ציבורי ומושווה עם פונקצית HASH שמיוצרת מתוך הבבואה. אם התוכן של הבבואה בתוכנה עבר שינוי בדרך כל שהיא, שתי התמציות (digest) לא יתאימו והאימות ייכשל. ראוי לשים לב בנוסף, שהאבטחה תהיה חזקה עוד יותר, אם פונקצית HASH של המפתח הציבורי תאוחסן בתכנות נתיכים שעל השבב (on chip fuse) או בזיכרון שניתן לתכנות חד פעמי.
כך אפשר להבטיח שבמקרה שפרצן (hacker) יצליח לטפל בחתימה ויתקין מפתח ציבורי מתאים בהתאמה, האימות עדיין ייכשל, מפני שהוא יערוך השוואה למפתח הציבורי שמאוחסן ביחידה של זיכרון ניתן לתכנון חד פעמי (OPT) עם פונקציות HASH שנוצרו מהמפתח הציבורי שמאוחסן בתמונה.
לפסילת האישור יש השלכות אחרות שבגללן יש צורך בהתקנה של מפתח ציבורי חדש, אך לא נדון בהם כאן בשל קוצר היריעה.
ברצף המתואר יש דמיון רב לאבטחה שממומשת בטלפונים המתקדמים ביותר המסופקים עם תוכנת טעינת אתחול חתומה. בחלק הבא נציג שכבה נוספת של הגנה עם אתחול מוצפן.

אתחול מוצפן
הבעיה הכרוכה ברצף הקודם שתואר לעיל היא שעל אף שהוא מוסיף מספיק אבטחה באמצעות תהליך האימות של חתימה ספרתית במהלך האתחול, שבה קשה מאוד לחבל וקשה מאוד לשנות אותה, בבואת התוכנה עדיין תמיד נראית בבירור ונגישה.
באיור 2 אפשר לראות את התפישה של אימות בבואה בעזרת תהליך אתחול מוצפן. במסגרת סביבת היצירה, בבואת התוכנה מוצפנת בעזרת תהליך הצפנה סימטרית (למשל, תקן ההצפנה AES כפי שנראה באיור) עם “מפתח סודי” שנוצר באופן אקראי. בבואה מוצפנת מאוחסנת בהתקן זיכרון הבזק חיצוני עם קובץ כתם (Blob) מפתח. “מפתח סודי” מוצפן בעזרת מפתח אקראי אחר שהוא ייחודי לכל התקן ומאוחסן כמו קובץ כתם המפתח בזיכרון החיצוני. חשוב להוסיף אקראיות נוספת למפתח אשר משמש להצפנת המפתח הסודי, על מנת להפוך את תהליך פענוח ההצפנה שלו למורכבת וקשה במיוחד.
המפתח הנוצר באופן כזה, (באיור מופיע כמפתח OTP), אשר בו משתמשים בסופו של דבר כדי להצפין את המפתח הסודי, אמור להיות זמין רק להתקן באופן פנימי ואסור שתהיה אליו גישה, שכן אם לא כן המטרה כולה לא תושג. במהלך אתחול של התקן שנעזר ביחידת זיכרון ROM פנימית (שאינה נגישה בכל מקרה), פענוח ההצפנה של קובץ כתם המפתח מתבצע באמצעות פענוח הצפנה סימטרית (למשל תקן ההצפנה AES שמופיע באיור) על מנת לשחזר את המפתח הסודי ששימש בסופו של דבר לפענוח ההצפנה של בבואת התוכנה המוצפנת.
שים לב: טכניקת אתחול מוצפן עדיין תכלול את יצירת החתימה והאימות שלה (תהליך שאינו מופיע באיור).

אבטחה במהלך טעינה של קובץ טעינת אתחול חיצוני
החלק השני מספק כמה דרכים שלפיהם נוהגים פרצנים לשטות או להערים על טלפונים כדי שקובץ טעינת האתחול שביחידת זיכרון ROM יניח שקובץ טעינת האתחול שביחידת זיכרון ההבזק – ריק. אחת הטכניקות שהוזכרו היא יצירה של קצר חשמלי לזיכרון ההבזק אל ההארקה דרך נקודת בדיקה. פעולה זו מנתקת באופן זמני את אספקת המתח אל שבב זיכרון ההבזק ומאפשר לקובץ טעינת האתחול שבזיכרון ROM להפעיל בטלפון קובץ טעינת אתחול חיצוני ובכך לעקוף את כל בדיקות האבטחה, ולאפשר גישה פתוחה אל כל דבר כמעט, כולל ESN, IMEI, זיכרון EEPROM וכן אל כל המפתחות התקפים.
אפשר בקלות להימנע ממצב זה על ידי כך שנאפשר טעינה של קובץ טעינת אתחול חיצוני וחתום בלבד, ובכך נבטיח שלא תהיה כל אפשרות של טפול בדרכי עורמה או של טעינה של בבואת תוכנה חיצונית ממקור לא בטוח ולא אמין, וכן שכל קובץ חיצוני לטעינת אתחול יהיה חייב לעבור אימות חתימה.

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

 

נכתב ע”י: Yan Vainter, Freescale

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