למה תקלת CrowdStrike לא יכולה להתרחש בmacOS, ולמה מייקרוסופט לא יכולה לנקוט בצעדי התגוננות דומים
-
למעשה יש בהגנה על קבצי המערכת שני חלקים, שנוספו בהדרגה:
- SIP (System Integrity Protection), מגן בזמן ריצה משינויים של הקבצי מערכת (וגם מעוד דברים כמו הזרקת קוד לתהליך)
- מעל זה יש את SSV (Signed System Volume) שמאחסן חתימה קריפטוגרפית של כל קבצי המערכת וחוסם אתחול אם אין התאמה, בשילוב השבב אבטחה T2 שאוכף את זה (באינטל, במעבדי אפל סיליקון זה כבר משולב)
מראי מקומות:
https://gist.github.com/macshome/15f995a4e849acd75caf14f2e50e7e98
https://eclecticlight.co/2020/06/25/big-surs-signed-system-volume-added-security-protection/
https://eclecticlight.co/2024/03/15/apple-silicon-6-security/ -
נראה לי שיש עוד סיבה שקשה יותר ל-MS לאסור קוד צד שלישי בקרנל. כי הם חייבים לתמוך בחומרה מחברות שונות. הם לא שולטים על החומרה. וכדי לקבל ביצועים טובים, הדרייברים של ההתקנים חייב לרוץ במרחב הקרנל.
משא"כ אפל ששולטים לגמרי על החומרה ומאפשרים חיבור התקנים של צד שלישי רק דרך ממשקים מוגדרים כמו USB וכדו', הם יכולים לשלוט לגמרי על כל הקוד במרחב הקרנל.
מכיון שבכל מקרה MS לא יכולים להוציא לגמרי קוד של צד שלישי מהקרנל, יכול להיות שיש להם פחות מוטיבציה להוציא מוצרי אבטחה מהקרנל. -
גם אצל אפל זה לא לחלוטין, במקרים מיוחדים שאין להם פתרון הם כן יאפשרו kernal extention (עם תהליך התקנה מסורבל שעובר דרך הביוס)
אבל יש פריימוורק לדרייברים בuser space (DriverKit), ויש פריימוורק למוצרי אבטחה (Endpoint Security), ויש פריימוורק לסינוני תעבורה ואפליקציות VPN (Network Extention)
https://developer.apple.com/documentation/kernel/implementing_drivers_system_extensions_and_kexts
https://developer.apple.com/documentation/apple-silicon/installing-a-custom-kernel-extension -
https://github.com/microsoft/ebpf-for-windows
זו דרך להריץ קוד בטוח בקרנל
הקוד שכותבים עם טכנולוגיה זו, אפשר להוכיח מתמטית שהוא לא יכול לגרום חריגה או לשבש זכרון וכו' -
@חגי זה מסוכן מדי. לך תדע איפה יש שיבוש בזכרון. לדרייבר יש גישה לכל מרחב הזכרון של הקרנל. אין מספיק בידוד בין הדרייבר לשאר הקרנל. אם המערכת ממשיכה לרוץ אולי קבצים ישובשו. או היזק קבע אחר.
(זה מושכל ראשון שלי. אולי למומחים בפיתוח קרנל יש תשובה יותר טובה מזה) -
אגב, יש לנושא הזה היסטוריה ארוכה. היה פולמוס גדול כבר בשנות ה-1980 אם צריך ללכת על ארכיטקטורה של microkernel (קרנל מינימליסטי מאוד, כאשר כל שאר שירותי המערכת - כולל דרייברים - רצים בתהליכים מבודדים) בגלל הבטיחות והיציבות שזה נותן
אני רואה עכשיו שהקרנל של מאק וגם של ווינדוס מוגדרים כקרנל היברידי. משהו בין מיקרו למונולית'