במהלך העברת ערכת הכלים cryptsetup-suspend ל-NixOS, התגלה באג בתת-מערכת הצפנת הדיסק LUKS (Linux הגדרת מפתח מאוחדת), שבגללה, החל מהליבה Linux גרסה 6.9 (ה-commit הבעייתי), שפורסמה במאי 2024, הפסיקה לנקות מפתחות הצפנה מה-RAM כאשר המערכת נכנסה למצב המתנה.
הכלי cryptsetup-suspend משמש ב Debian לנעול אוטומטית מחיצות LUKS לפני כניסה למצב שינה. ההנחה היא שאם מחשב נייד נגנב בזמן שהוא במצב שינה, תוקף לא יוכל לגשת לנתונים, מכיוון שיציאה ממצב שינה תדרוש הזנת סיסמה כדי לשחזר גישה לנתונים המוצפנים. עקב באג בליבת המערכת. Linux לאחר נעילת מחיצת LUKS באמצעות הפקודה "cryptsetup luksSuspend", המפתחות לא נוקו מה-RAM ונשארו גלויים דרך /proc/keys, מה שאפשר לתוקף לחלץ אותם, למשל, באמצעות שיטת "אתחול קר", ולהשתמש בהם כדי לגשת לנתונים.
ניקוי המפתחות החסר התגלה בעת איתור באגים של מצב מרוץ שגרם לבעיות שינה. הבאג נוצר לאחר שינוי פקטורינג בליבת גרסה 6.9, שגרם לקשור את המפתחות לשרשור הקורא והיו צריכים להימחק עם סיום הפעולה, אך במקום זאת נשארו בזיכרון. לצורך הכללה בליבת, Linux הוצע תיקון בן שורה אחת כדי לתקן את השגיאה.
תיקון זה לא התקבל לתוך הליבה מכיוון שהוא מכיל פגם: הוא עובד רק עבור כוננים פיזיים, לא עבור התקני לולאה וירטואליים. במקום לתקן את בעיית הליבה, מפתחי כלי cryptsetup הציעו פתרון עוקף לניקוי מפתחות. שינוי זה כבר התקבל ויכלל בגירסת cryptsetup 2.8.7.
בנוסף, ל-NixOS יש יישום מותאם אישית של סקריפטים לנעילת דיסקים מוצפנים לפני מעבר למצב שינה, המשתמש בתיקון ליבה ישן, שלא אומץ בשנת 2015, אשר מנקה בכוח מפתחות מהזיכרון לפני המעבר למצב שינה.
מקור: OpenNet.ru
