מנבא הענפים הוא מרכיב קריטי בארכיטקטורות מעבד מודרניות שנועדו לשפר את הביצועים על ידי השערה של כיוון הוראות הענף (למשל, הצהרות אם-else) לפני שהן נפתרות. ספקולציה זו מאפשרת למעבד לשלוף מראש ולבצע הוראות לאורך הנתיב החזוי, ובכך להפחית את ההשהיה הנתפסת ולשפר את התפוקה הכוללת. עם זאת, מיטוב ביצועים זה מציג פגיעויות פוטנציאליות שניתן לנצל בהתקפות תזמון CPU, במיוחד בהקשר של דליפת מידע רגיש.
חיזוי סניפים פועל על ידי שמירה על היסטוריה של תוצאות סניפים ושימוש בהיסטוריה זו כדי לחזות סניפים עתידיים. כאשר נתקלים בהוראה ענף, המנבא משתמש בנתונים היסטוריים אלה כדי לנחש אם הענף יילקח או לא. אם החיזוי נכון, המעבד ממשיך בביצוע ללא הפרעה. אם שגוי, ה-CPU חייב לחזור אחורה ולבצע את הנתיב הנכון, מה שגורר עונש ביצועים. עונש זה, גם אם קטן, ניתן למדוד ולנצל על ידי תוקפים.
תוקפים יכולים לתמרן את מנבא הענפים כדי ליצור הפרש תזמון מדיד בין ענפים חזויים נכון לשגוי. הבדל זה יכול לשמש כדי להסיק את נתיב הביצוע של תוכנית, אשר יכול, בתורו, לחשוף מידע רגיש. אחת הדוגמאות הידועות ביותר למתקפה כזו היא פגיעות Spectre, הממנפת ביצוע ספקולטיבי וחיזוי ענפים כדי לגשת למיקומי זיכרון לא מורשים.
בהתקפת ספקטר טיפוסית, התוקף מאמן תחילה את מנבא הענפים לעקוב אחר דפוס מסוים. שלב אימון זה כולל ביצוע רצף של הוראות ענף המתנות את המנבא לבצע חיזוי מסוים. לאחר שהמנבא מאומן, התוקף מבצע קטע קוד קורבן הכולל ענף התלוי בנתונים סודיים. אם המנבא יבצע חיזוי שגוי בהתבסס על אימון התוקף, המעבד יבצע באופן ספקולטיבי הוראות הניגשות לזיכרון על סמך הנתונים הסודיים. למרות שהוראות ספקולטיביות אלה נמחקות בסופו של דבר, הן משאירות עקבות במטמון המעבד.
לאחר מכן התוקף יכול למדוד את זמני הגישה למיקומי זיכרון שונים כדי לקבוע לאילו נתונים ניגשו באופן ספקולטיבי. טכניקה זו, המכונה מתקפת תזמון מטמון, מאפשרת לתוקף להסיק את הנתונים הסודיים על סמך הבדלי התזמון שנצפו. השלבים המרכזיים בהתקפה כזו הם:
1. אימון מנבא הענפים: התוקף מפעיל רצף מבוקר של הוראות המשפיעות על מצב מנבא הענפים. לדוגמה, ביצוע שוב ושוב של הוראת סניף עם תוצאה עקבית (למשל, תמיד נלקח) גורם למנבא לצפות לתוצאה זו בביצועים עתידיים.
2. הפעלת הוצאה ספקולטיבית: התוקף מריץ את קוד הקורבן עם הוראת סניף התלויה בנתונים סודיים. בשל ההכשרה הקודמת של התוקף, מנבא הסניפים מבצע באופן ספקולטיבי את הנתיב הלא נכון, הכולל גישה לזיכרון על סמך הנתונים הסודיים.
3. מדידת זמני גישה למטמון: לאחר הביצוע הספקולטיבי, התוקף מודד את הזמן שלוקח לגשת למיקומי זיכרון ספציפיים. זמני גישה מהירים יותר מצביעים על כך שהנתונים נמצאים במטמון, מה שמרמז שנגישה אליהם באופן ספקולטיבי. על ידי ניתוח תזמונים אלה, התוקף יכול להסיק את הנתונים הסודיים.
כדי להמחיש זאת באמצעות דוגמה קונקרטית, שקול תרחיש שבו הנתונים הסודיים קובעים את האינדקס של גישה למערך בתוך ענף. התוקף מאמן תחילה את מנבא הענפים להניח כיוון מסויים. כאשר קוד הקורבן פועל, מנבא הענפים מבצע ספקולטיבית את הגישה למערך בהתבסס על הכיוון המאומן. אם הספקולציה כוללת גישה לאלמנט מערך מסוים, שורת המטמון המתאימה תיטען. לאחר מכן התוקף יכול לבצע סדרה של גישה לזיכרון מתוזמנת כדי לקבוע אילו שורות מטמון נטענות, ובכך להסיק את האינדקס הסודי.
הפחתת התקפות כאלה כרוכה במספר אסטרטגיות. פתרונות מבוססי חומרה כוללים שיפור הבידוד בין נתיבי ביצוע ספקולטיביים ולא ספקולטיביים והבטחה שביצוע ספקולטיבי לא ישפיע על משאבים משותפים כמו המטמון. פתרונות מבוססי תוכנה כוללים טכניקות כמו הכנסת הוראות "גדר" למניעת ביצוע ספקולטיבי מעבר לנקודות מסוימות בקוד, או שימוש בפרקטיקות של תכנות בזמן קבוע כדי להבטיח שזמן הביצוע אינו תלוי בנתונים סודיים.
המורכבות והתחכום של התקפות תזמון מבוססות מנבא ענפים מדגישים את הצורך במחקר ופיתוח מתמשכים באבטחת החומרה והתוכנה. ככל שארכיטקטורות ה-CPU ממשיכות להתפתח, כך גם האסטרטגיות להגנה מפני צורות אלו ואחרות של התקפות ערוצים צדדיות חייבות להתפתח.
שאלות ותשובות אחרונות אחרות בנושא התקפות תזמון מעבד:
- מה הם חלק מהאתגרים והפשרות הכרוכים ביישום חומרה ותוכנה למניעת התקפות תזמון תוך שמירה על ביצועי המערכת?
- כיצד תכנות בזמן קבוע יכול לעזור להפחית את הסיכון של תזמון התקפות באלגוריתמים קריפטוגרפיים?
- מהו ביצוע ספקולטיבי, וכיצד הוא תורם לפגיעות של מעבדים מודרניים לתזמון התקפות כמו Spectre?
- כיצד מנצלות התקפות תזמון שינויים בזמן הביצוע כדי להסיק מידע רגיש ממערכת?
- מהי התקפת תזמון?