חדשות היום

בחינה מעמיקה של פתרונות וירטואליזציה במערכות קריטיות

מבוא

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

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

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

מקור וכוונה

טכנולוגיות Hypervisor ליבת ההפרדה ומיקרו-קרל קיימות למעלה משלושים שנה, כאשר ההגדרות נמצאות בשימוש נרחב באמצעות פרסומים מקוונים ורשמיים. Hypervisor ליבת ההפרדה היא הרחבה של ליבת ההפרדה (Separation Kernel) שהוגדרה במקור על ידי ד”ר ג’ון רושבי בשנת 1981, במאמר שכותרתו “תכנון ואימות של מערכות מאובטחות”, ומתאר למעשה “שמשימת ליבת ההפרדה היא ליצור סביבה שאין דרך להבדיל בינה לבין זו המספקת מערכת פיזית: היא חייבת להיראות כאילו כל מערכת תוכנה רצה היא מכונה נפרדת ומבודדת, וכי מידע יכול לזרום רק ממכונה אחת לאחרת לאורך קווי תקשורת חיצוניים ידועים”. Hypervisor ליבת ההפרדה משלבת את הנחת היסוד והעקרונות של ליבת ההפרדה של ד”ר ג’ון רושבי, אך מטילה אילוצים מפורשים על יישום כדי למנף יכולות וירטואליזציה של CPU מקומי כדי לארח יישומים באופן אוטונומי ולהמשיך לאכוף את ההפרדה.

הרעיון של מיקרו-קרנל מגיע מדורות רבים של מחקר ופיתוח מכל רחבי העולם, תוך שאיפה לבנות מודלים יעילים של בקרת CPU עם הכמות המינימלית של קוד חסוי (privileged) הנחוץ ליישום מערכת הפעלה (איור 1).

מיקרו-קרנלים שואפים לספק סביבת ריצה בטוחה ומאובטחת יותר על גבי קרנל מונוליטי פופולרי מבוסס מערכות הפעלה (איור 2). בניגוד לגישת הקרנל מונוליטי שבו כל מנהלי ההתקנים, I / O, שירותי ניהול רצים באותה מחיצה כדי להפחית את אפקט זמן המעבר (latency); המיקרו-קרנל דורש הפרדה של כל רכיבי שירות מערכת ההפעלה לתוך שטחי כתובות נפרדים במחיר של החלפת הקשר (context switch) נוסף, אבל תוך השגת הגנה טובה יותר של שלמות בין רכיבי שירות פנימיים. מנקודת מבט של האפליקציה, מערכת ההפעלה מבוססת מיקרו-קרנל, וקרנל מונוליטי המבוסס על מערכת ההפעלה, נראים דומים מאוד.

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

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

מאפייני Hypervisor ליבת ההפרדה

קיימים מאפיינים רבים שבעזרתם ניתן להשוות בין Hypervisor ליבת ההפרדה לבין מיקרו-קרנל, כמו ביצועים, התנהגות דטרמיניסטית, codebase מהימן וכו’. עם זאת, השוואות אלה הן שימושיות רק אם לקרנלים יש אותן תכונות שליטה במעבד ויישומי ריצה דומים . תארו לעצמכם השוואת בסיס הקוד מהימן של Hypervisor ליבת ההפרדה מסוגל לתזמן משימות, לבודד זיכרון המשימה, לבודד I/O בין משימות ממשקים פיזיים, לעומת מיקרו-קרנל המסוגל רק לתזמן משימות. ברור שהמיקרו-קרנל עם יכולות שליטה בסיסיים במעבד ייראה קטן וטוב יותר כשבוחנים את קוד המקור שלו אבל זו לא תהיה השוואה הוגנת.

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

היקף פונקציונליות הליבה

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

מצב המערכת מוכח

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

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

זמן ריצה אוטונומי

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

קח לדוגמה תכנון מערכתי של מערכת כלי רכב, שבו יש להפריד בין שני יישומים. יישום שפועל מול האינטרנט לעומת יישום שפועל מול ממשק CAN.  ב Hypervisor ליבת ההפרדה, אלה שני יישומים שיכולים לרוץ עם אפס קישורים לוגיים אחד לשני, ובכך מסירים כל פוטנציאל מבוסס תוכנה שיכול לעקוף את ההפרדה. גם על מערכת ההפעלה מבוססת least privilege, התהליכים נתונים לחסדיהם של מדיניות ההרשאות של מערכת ההפעלה, מה שגורם למצב בו קשה להוכיח כי היישומים הם באמת נפרדים. כפי שניתן לראות בקליפ של הג’יפ הידוע לשמצה (Greenberg, 2015), התוקפים השתמשו בשירותי מערכת הפעלה מרכזיים המבוססים על מיקרו-קרנל כדי להנדס לאחור את מדיניות קביעת התצורה של המערכת, ולמצוא פתח המאפשר לאינטרנט שפונה אל היישום לשלוט בממשק ה CAN. ב Hypervisor ליבת ההפרדה, המערכת יכולה להיות מוגדרת כך הממשק ה CAN מעולם לא ממופה לתחום האינטרנט, מה שהופך את השליטה פיזית ב CAN בלתי אפשרי מנקודת המבט של תחום האינטרנט.

אכיפת בידוד

ללא בידוד משאבים, אוטונומית runtimes לא ניתנת להשיגה. Hypervisor ליבת ההפרדה מסתמכת במפורש על ההתקדמות האחרונה של זיכרון המעבד ושל רכיבי בקר / פלט כדי לתמוך בווירטואליזציה של CPU בסיוע חומרה. התקדמות זו תחת וירטואליזציה של CPU מאפשרת ל Hypervisor ליבת ההפרדה להקצות חלקים של משאבי חומרה לסביבת האורח כדי לנהל באופן מקומי ללא סיוע של Hypervisor ליבת ההפרדה. הקצאות חומרה אלה כוללות את היכולת של האורחים לשלוט באופן עצמאי בממשק ה- CPU שלהם, בזיכרון המערכת ובבקרי ציוד היקפי. ב Hypervisor ליבת ההפרדה, הקצאת משאבים לסביבות אורח נאכפים למעשה על ידי פוליסות בלתי ניתנות לשינוי המוגדרות ע”י בקרי ה- CPU. מודל זה שונה בצורה דרמטית מהארכיטקטורה שבו יישומים יסתמכו על הקרנל כדי לנהל זיכרון, הקשרים, וקישוריות הברוקר ל I / O. רבים ממודלי מערכות הפעלה אלו מסתמכים אך ורק על מדיניות מבוססת תוכנה שעלולה להיות מטופלת על ידי תוכנה שמקבלת הרשאות אדמיניסטרטור של CPU או OS.

ארכיטקטורה Runtime הטרוגנית

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

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

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

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

זמן ריצה של Bare Metal

אחד הפרופילים המעניינים ביותר של זמן ריצה שמציע ה-Hypervisor ליבת ההפרדה נקרא זמן ריצה “Metal-bare”, ונועד למגוון רחב של יישומים הנפוצים בתצורות מיקרו-בקרים, שאינן דורשות תמיכה בשירותי מערכת הפעלה. לדוגמה יישום חיישן שפשוט דורש סריקה על זיכרון ממופה I/O (איור 5). בגישת bare metal, יישומים אלה יכולים לפעול במעבד גולמי לחלוטין בהקשר של זיכרון שטוח עם אפס הפרעה מכל יישום אחר או שירותי הקרנל.

סיכום

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

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

אבי כהן, Pertech Embedded Solutions

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