לאחרונה, התגלתה פרצת אבטחה חמורה [1] במעבדים הפופולריים של אינטל, AMD ו-ARM. באופן מובן, רוב המאמרים מסבירים את התופעה תוך שימוש במונחים מקצועיים. בואו ננסה להבין את פרצת האבטחה בעזרת משל שאין בו מחשבים בכלל.
במקרים רבים, פרצות אבטחה יכולות להיות נושא מורכב, שהבנתו דורשת מונחים מקצועיים. לעומת מקרים אלו, את הפרצה הנוכחית ניתן להבין גם בכלים פשוטים יחסית. כדי להדגים זאת, נעזר באנלוגיה לפריצה מסוג שונה.
נניח שתרצו לחשוף את תוכנו של קוד סודי השייך למנהלת שלכם. הקוד רשום על גבי פתק הנמצא בכספת שמורה. כדי לעשות זאת, אתם ממציאים סיפור כיסוי, ומעמידים פנים שאתם זקוקים לתיק מסוים במשרד. אתם פונים לעוזר שלה בבקשה: "עלינו לטפל בתיק בדחיפות. מספרו הסידורי של התיק רשום על פתק בכספת של המנהלת. אנו מבקשים שתצלם את התיק הזה ותיתן לנו אותו".
העוזר משיב כי הוא לא בטוח שיש לכם הרשאה ולכן עליו לקבל אישור מן המנהלת. הוא מאוד חרוץ, ומכיוון שהבקשה נראית לו דחופה, הוא עושה הכנות למקרה שהיא תאושר. הוא ניגש לכספת, מוציא את הפתק עם המספר הסודי, מצלם את התיק שמספרו הסידורי תואם, ומניח אותו בחשאי על השולחן שלו. למשל, אם המספר הסודי הוא 6, הוא יצלם את התיק השישי בארכיב. מטרתו היא שאם הבקשה תאושר, תוכלו לקבל מידית את תצלום התיק.
בינתיים, המנהלת חוזרת ומסרבת לתת גישה לכספת או לשימוש בתכנה עקב כך, גם הבקשה לקבל את צילום התיק מסורבת. האם תוכלו בכל זאת לגלות את הקוד הסודי?
מסתבר שכן. לשם כך, עליכם לבקש צילום של כל התיקים. העוזר יצלם ויביא את צילומי התיקים. בזמן שאתם ממתינים, עליכם למדוד כמה זמן לוקח לו להביא צילום של כל תיק. כפי שראינו, הצילום של אחד התיקים כבר נמצא אצלו על השולחן, לכן הזמן שייקח להביא אותו יהיה קצר יחסית לצילומים אחרים. אם הקוד הסודי היה למשל 6, אזי הצילום של התיק השישי יגיע אליכם במהירות. מסתבר שרק על ידי מדידת זמן זה בהשוואה לאחרים, תוכלו לדעת מה מספרו הסידורי של התיק ומכך את הקוד הסודי.
סיפור זה הוא אנלוגי לבעיית האבטחה [2] meltdown שהתגלתה והוזכרה רבות בתקשורת. כמו שהעוזר מנסה להיות יעיל, גם המעבדים המודרניים מנסים להיות זריזים ויעילים ולבצע פקודות גם בצורה ספקולטיבית, למרות שחלקן עתידות להתבטל עקב אי-חוקיותן. בפריצה הנוכחית, הקוד הפורץ מבקש מהמעבד להעתיק אינפורמציה (מספר מ-0 עד 255) מאזור שמור מאוד בזיכרון ולהשתמש בו. המעבד מוודא שפעולה זו היא לא חוקית ומבטל אותה. אולם בינתיים הוא מספיק לבצע עוד מספר פעולות ספקולטיביות: הוא קורא את הערך הזה (אנלוגי ל: "להביא את הערך מהכספת") ומשתמש בו בתור אינדקס כדי להעתיק ערך מטבלה בזיכרון (אנלוגי ל- "לצלם את התיק המתאים"). למשל, אם הערך הסודי הוא 6, המעבד ינסה להעתיק את האיבר השישי בטבלה. אולם כאשר המעבד מגלה שהגישה לא חוקית, הוא מבטל את כל הפעולות הספקולטיביות שביצע, כך שלא יהיה ניתן להשתמש בהם
אולם, כיצד בכל זאת ניתן לדעת את הערך הסודי? המחשב מכיל זיכרון פנימי מהיר מאוד החבוי מהמשתמשים הקרוי "זיכרון מטמון". זיכרון זה מכיל את הערכים של המקומות בזיכרון הראשי שהמעבד ניגש אליהם באחרונה. למרות שהפעולה הלא חוקית בוטלה, הערך שמתאים לאיבר בטבלה (למשל האיבר השישי בדוגמה) כבר הספיק להיטען לזיכרון זה (אנלוגי ל"שולחן של העוזר" בסיפור שלנו). אם הקוד הפורץ יקרא את כל ערכי הטבלה וימדוד את זמני הגישה, הוא יגלה שהערך שנכנס לזיכרון המטמון (האיבר השישי בטבלה בדוגמה שלנו) נקרא במהירות, בעוד שקריאת שאר הערכים נעשית בצורה אטית (מצריכה גישה לזיכרון חיצוני). מכאן הקוד יכול לגלות ערכים בזיכרון שמור (למשל ססמאות משתמשים)
בדומה לעוזר החרוץ, גם מתכנני המעבדים מנסים לסייע ולזרז את פעולתם (למשל: דרך הרצה ספקולטיבית ושימוש בזיכרון מטמון). לעתים, זירוז זה בא על חשבון יצירת פרצות אבטחה. חברות התכנה ויצרני המחשבים עמלים על מציאת פתרונות כדי לחסום בעיות אבטחה כאלו.
מקורות: