
תוכן עניינים
ערוצים נסתרים מיקרוארכיטקטוריים הם דאגה קריטית באבטחת מחשבים מודרניים. בבסיסם, ערוצים אלה מנצלים התנהגויות חומרה עדינות כדי להדליף מידע בין גבולות אבטחה מבודדים, לעקוף את ההגנות המסורתיות של מערכות הפעלה ויישומים. עם המעבר למחשוב ענן וסביבות מרובות-דיירים המוסיפ את החשיבות, גילוי ומיתון אוטומטי של איומים מסוג זה לא היה מעולם חשוב יותר.
AutoCC הוא מסגרת חדשנית המאפשרת גילוי אוטומטי של ערוצי תזמון נסתרים אלה, ומאפשרת לכל הרגולטורים להתקדם בהבנה ובהגנתם. במדריך זה, נסקר את הטכנולוגיה והמחקר שמאחורי AutoCC, ונעבור על טיפים מעשיים לגילוי, ונבהיר את חשיבות ערוצים נסתרים מיקרוארכיטקטוריים בנוף האיומים של ימינו.
באבטחת מחשבים, ערוץ נסתר הוא נתיב תקשורת בלתי מכוון שניתן לנצל כדי להעביר מידע בצורה המפירה את מדיניות האבטחה של המערכת. בניגוד לערוצי צד (שבדרך כלל מדליפים נתונים באמצעות קרינות לא מכוונות או תצפיות), ערוצים נסתרים משמשים להעביר בסתר מידע בין סוכנים משתפים פעולה, לעיתים קרובות תוך עקיפת בקרות גישה.
מאפיינים עיקריים:
מיקרוארכיטקטורה מתייחסת לפרטי המימוש של חומרת מעבד שתוכנן להיראות בלתי נראה לתוכנה באמצעות הפשטה.
ערוצים נסתרים מיקרוארכיטקטוריים מנצלים את אותם מעברי מצבים של חומרה, שהם:
ציטוט ממחקר:
ערוצים מיקרוארכיטקטוריים מנצלים מצבים של חומרה שאינם נראים לקבוצת הפקודות (ISA) כדי לאפשר זרימת מידע בלתי מאושרת.
הפער בין תכונות החומרה (כמו מטמונים, מאגרי תחזיות של ענפים) לבין התצוגה המופשטת המסופקת על ידי ISA פותח אפשרויות לערוצים נסתרים.
תוכניות המשתפות את אותה חומרה יכולות להשפיע על זמן היתר או ההתנהגות זו של זו, גם בהיעדר נתיבים ישירים לתקשורת.
ערוצי תזמון הם הערוצים הנסתרים המיקרוארכיטקטוריים הנפוצים ביותר. הם פועלים על ידי:
משאבים טיפוסיים מנוצלים:
ערוצים לעיתים קרובות נוצרים כאשר שני תהליכים מתחרים על משאב חומרה מוגבל (לדוגמה, ערכת מטמון, תור בקר זיכרון).
ערוצים נסתרים מיקרוארכיטקטוריים מנצלים שינויים בזמן ההוצאה הנובעים מתחרות גישה למשאבי חומרה מוגבלים.
תחרות זו גורמת להבדלים בזמן הניתנים למדידה שבאמצעותם ניתן לקודד מידע חבוי.
זיכרון המטמון של ה-CPU, המשותף בין ליבות/פתילים רבים, הוא אוצר לערוץ נסתר.
תרחיש:
Prime+Probe: משתמש בגישת תזמון כדי לבדוק האם שורת המטמון הוחלפה.
Flush+Reload: מבוססת על זיכרון משותף, מדויקת יותר מ-Prime+Probe.
# קוד ייצוגי: לולאת Prime+Probe בפייתון (קונספטואלי)
import time
CACHE_SET = 0xdeadbeef # כתובת מדומה
def access_memory(addr):
# לדמות גישה לשורת מטמון
pass
def prime():
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
def probe():
start = time.perf_counter_ns()
for i in range(NUM_LINES):
access_memory(CACHE_SET + i * CACHE_LINE_SIZE)
end = time.perf_counter_ns()
return end - start
# השולח מכין, מחכה ואז המקבל בודק ומסדר גישה
למרות שאין מדובר בערוצים נסתרים טהורים (לרוב מסווגים כהתקפות ערוצי צד), התקפות אלה עוררו עניין מחודש בדליפות מידע מיקרוארכיטקטוריות על ידי הצגה איך תחזיות וביצוע לא-בתור יכולות לשבור גבולות אבטחה ולהדליף סודות באמצעות שינויים במצב המיקרוארכיטקטורה.
התקפות מסוג Spectre: מנצלות ביצוע ספקולטיבי להזרקת נתונים מבוקרי תוקף למבנים מיקרוארכיטקטוריים, המשפיעים על ביצוע קוד הקורבן בדרכים הניתנות לתצפית.
AutoCC מהווה עבור גילוי אוטומטי של ערוצים נסתרים בזמן. מדובר בגישה שיטתית וכלי שפותח כדי למצוא באופן אוטומטי ערוצי תזמון נסתרים במשאבים מיקרוארכיטקטוריים של המעבד.
מתוך Marcelo et al., MICRO 2023:
ב-AutoCC:
תובנה מחקרית מרכזית:
AutoCC מצא ערוצים וחולשות שלא תועדו בעבר במעבדים פופולריים, מצביע על הצורך הדחוף בניתוח והגנה אוטומטיים.
AutoCC משתמש במגוון טכניקות:
עם AutoCC, הן התוקפים והן המגנים זוכים:
מניעה או הקטנת ערוצים נסתרים היא אתגר בשל יסודם ברמת החומרה. עם זאת, ניתן לנקוט בכמה אסטרטגיות כלליות:
מערכות הפעלה יכולות לעזור על ידי:
rdtsc או דומות.ספקי חומרה יכולים:
לינוקס מציעה מוני ביצועים באמצעות הכלי perf, שניתן להשתמש בו לגילוי פעילות מיקרוארכיטקטורית חשודה או לחריגות ביצועים העשויות להצביע על שימוש בערוץ נסתר.
perf list
# רשום חטאות מטמון ומחזורים לתהליך עם PID 1234
sudo perf stat -e cache-misses,cycles -p 1234
# דוגמה של פלט ניתוח
# 1,234,567 חטאות מטמון
# 23,456,789 מחזורים
יישומים המשתמשים ב-rdtsc או /dev/tsc יכולים להיות רמזים לקוד תקיפה מבוסס תזמון.
# רשימת תהליכים המשתמשים ב-/dev/tsc או דומה
lsof | grep '/dev/tsc'
# מצא בינארים המתייחסים לאופקוד rdtsc (0f 31)
grep -rl -E $'\x0f\x31' /usr/bin /usr/local/bin
# חלופה: שימוש ב-strace לניטור שיחות מערכת הקשורות לזמן בתהליך חשוד
strace -e trace=clock_gettime,gettimeofday -p <pid>
import subprocess
def monitor_perf(pid, duration=10):
cmd = [
'perf', 'stat', '-e', 'cache-misses,cycles',
'-p', str(pid), 'sleep', str(duration)
]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
return out.decode(), err.decode()
# שימוש בדוגמה
out, err = monitor_perf(1234)
print("פלט ביצועים:", out)
print("שגיאות ביצועים:", err)
לצורך אוטומציה עמוקה יותר, ניתן לנתח פלט perf לשינויים חשודים בשיעורי חטאות המטמון, שיכולים להצביע על פעילות ערוצים נסתרים מבוססי מטמון.
import re
def parse_perf_output(perf_err):
cache_misses = re.search(r'([\d,]+)\s+cache-misses', perf_err)
cycles = re.search(r'([\d,]+)\s+cycles', perf_err)
return {
'cache_misses': int(cache_misses.group(1).replace(',', '')) if cache_misses else 0,
'cycles': int(cycles.group(1).replace(',', '')) if cycles else 0,
}
metrics = parse_perf_output(err)
print(f"חטאות מטמון: {metrics['cache_misses']}, מחזורים: {metrics['cycles']}")
ערוצים נסתרים צריכים לכלול במודלי איומים עבור:
שאלות לשאול:
צוותים אדומים יכולים לפרוס כלים בסגנון AutoCC לזיהוי שיטות איסוף נתונים אפשריות וסימולציות של התקפות אמיתיות.
צוותים כחולים ואנליסטים פורנזים יכולים להשתמש במוני ביצועים, יומני מעקב מערכת הפעלה ופרופילים התנהגותיים כדי לחפש אנומליות המצביעות על פעילות ערוץ נסתר.
ערוצים נסתרים מיקרוארכיטקטוריים הם אחד מהאיומים המסוכנים ביותר באבטחת חומרה כיום. מרמה מתחת לרמת הרשת או הפגיעות ברמת יישומים קלאסיים, הם מנצלים את אבני הבנייה של מחשוב מודרני כדי לאפשר זרימת מידע בלתי מאושרת בין משתמשים ותהליכים מבודדים.
AutoCC ודומיו מובילים את התחום קדימה, מספקים כלים ושיטות הנדרשים לגילוי ולסגירת ערוצים אלה—לפני שלתוקפים יש סיכוי להשתמש בהם. כשמעבדים ומגנים מתפתחים, הדבר היחיד שנשאר קבוע הוא שכדאי להמשיך לחפש (וללמוד מ) כל ערוץ חבוי שמופיע.
על ידי שילוב מעקב, ניתוח ודגמי איומים פרואקטיביים בתהליךי האבטחה, ארגונים יכולים להשאר לפני וקטור האיום העדין אך העוצמתי הזה.
AutoCC: גילוי אוטומטי של ערוצים נסתרים בזמן
מחברים: Marcelo Santos, et al. MICRO 2023
מאמר מלא (PDF)
מניעת ערוצים נסתרים מיקרוארכיטקטוריים במעבד RISC-V 64 ביט בקוד פתוח
מחברים: Wistoff et al.
ארכיב המקדים
טקסט מלא (PDF)
תיעוד perf של לינוקס
https://perf.wiki.kernel.org/index.php/Main_Page
מדריך אופטימיזציה לארכיטקטורות Intel® 64 ו-IA-32
https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html
התקפות Spectre ו-Meltdown
https://meltdownattack.com/
מעוניין במדריכים מעמיקים יותר? הירשם לניוזלטר תובנות אבטחת הסייבר שלנו!
אם מצאתם את התוכן הזה בעל ערך, תארו לעצמכם מה תוכלו להשיג עם תוכנית ההכשרה המקיפה והאליטיסטית שלנו בת 47 שבועות. הצטרפו ליותר מ-1,200 סטודנטים ששינו את הקריירה שלהם בעזרת טכניקות יחידה 8200.