תיקונים שהוכנסו כדי להזיז כתובות מחסנית ליבת לינוקס באקראי עבור קריאות מערכת

קיס קוק, לשעבר מנהל המערכת הראשי של kernel.org ומנהיג צוות האבטחה של אובונטו, שעובד כעת בגוגל על ​​אבטחת אנדרואיד ו-ChromeOS, פרסם סט של תיקונים להזזת קיזוז אקראית בערימת הליבה בעת עיבוד קריאות מערכת. תיקונים משפרים את אבטחת הליבה על ידי שינוי מיקום הערימה, מה שהופך את ההתקפות על הערימה להרבה יותר קשות ופחות מוצלחות. היישום הראשוני תומך במעבדי ARM64 ו-x86/x86_64.

הרעיון המקורי לתיקון שייך לפרויקט PaX RANDKSTACK. בשנת 2019, אלנה רשתובה, מהנדסת מאינטל, ניסתה ליצור מימוש של רעיון זה המתאים להכללה בליבת לינוקס הראשית. בהמשך, יוזמה נלקחה על ידי Kees Cook, שהציג יישום המתאים לגרסה הראשית של הקרנל. התיקונים מתוכננים להיכלל כחלק מהגרסה 5.13. המצב יהיה מושבת כברירת מחדל. כדי להפעיל אותו, מוצעים פרמטר שורת הפקודה של הליבה "randomize_kstack_offset=on/off" והגדרת CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. התקורה של הפעלת המצב מוערכת בכ-1% אובדן ביצועים.

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

מקור: OpenNet.ru

הוספת תגובה