MIC (ראשי תיבות של: Mandatory Integrity Control) הוא רכיב ליבה משמעותי במערכות הפעלה ממשפחת Windows (החל מ Vista), שמתפקד כ MAC (בקרת גישה מנדטורית).‏ MIC מאפשר בידוד תהליכים מבוסס IL (ראשי תיבות של Integrity Levels), כאשר סיווג IL של אובייקט כלשהו במערכת מייצג את רמת המהימנות של האובייקט. מטרתו של מנגנון זה להשתמש במדיניות גישה מוגדרת מראש והאובייקטים המעורבים באופן סלקטיבי כדי להגביל הרשאות גישה בהקשרים (context) שנחשבים לפחות מהימנים, לעומת הקשרים אחרים, הפועלים תחת אותו חשבון משתמש, אך נחשבים יותר מהימנים.

תהליך אימות של NTLM כולל שלושה סוגי הודעות: NTLM_NEGOTIATE, NTLM_CHALLENGE ו-NTLM_AUTHENTICATE. על מנת לוודא כי התוקפים לא פגעו בתעבורה, נוסף שדה בשם MIC להודעת ה-NTLM_AUTHENTICATE. ה-MIC הוא HMAC_MD5 המתווסף לשרשור של שלוש הודעות ה-NTLM, באמצעות מפתח ה-session, אשר ידוע רק לחשבון היוזם את האימות ולשרת המטרה. כתוצאה מכך, התוקף שמנסה לשנות את אחת ההודעות (לדוגמה, לשנות את תהליך החתימה), אינו מסוגל לייצר MIC מתאים, והמתקפה נכשלת.

נוכחות ה-MIC מוכרזת בשדה msvAvFlag בהודעת NTLM_AUTHENTICATE (סמן 0x2 מראה כי ההודעה מכילה MIC), וכי הוא צריך להגן על השרתים מתוקפים המנסים להסיר את ה-MIC ולבצע מתקפת NTLM Relay. למרות זאת, התגלה כי שרתי מיקרוסופט אינם מנצלים את מנגנון ההגנה ומאפשרים מעבר של הודעות NTLM_AUTHENTICATE ללא חתימה (חסרות MIC).[1]

מימושים עריכה

Windows Vista הגדיר ארבע רמות שלמות: נמוך (SID: S-1-16-4096), בינוני (SID: S-1-16-8192), גבוה (SID: S-1-16-12288), מערכת (SID: S-1-16-16384). כברירת מחדל, תהליכים שעלו על ידי משתמש רגיל קיבלו רמת סיווג IL בינוני ולאחר מכן שודרגו, עם מנגנון UAC בהתאם לצורך לרמת IL גבוה.[2] על ידי היכולות של רמות שלמות, MIC מאפשר לסוגים של יישומים להיות מבודדים, להפעיל תרחישים כמו מנגנון 'ארגז חול' ליישומים בעלי פוטנציאל להזיק (כגון יישומי Internet-facing). תהליכים עם IL נמוך בעלי גישה מוגבלת ביחס לתהליכים עם IL גבוה יותר היכן שיש שליטה של בקרת הגישה (Access control enforcement).

לאובייקטים עם רשימות בקרת גישה, כגון אובייקטים בעלי שם, לרבות קבצים, Registry keys ואפילו תהליכים ותהליכונים, יש ערך ב SACL (או System Access Control List) המגדירים את הרשאות הגישה אליהם, או במילים אחרות את מינימום רמת התקינות הנדרשת של תהליך כדי להיות מורשה להשתמש באובייקט. Windows מוודא כי תהליך יכול לכתוב או למחוק אובייקט רק כאשר IL ברמה שווה או גבוהה יותר מאשר מה שצוין על ידי האובייקט (ברשימת בקרת הגישה). בנוסף, מטעמי פרטיות אובייקטים של תהליך עם IL גבוה הם מחוץ לתחום אפילו לקריאה מכל תהליכים בעלי IL נמוך יותר.[3]

כתוצאה מכך, תהליך אינו יכול לקיים אינטראקציה עם תהליך אחר שיש לו IL גבוה יותר. תהליך כזה לא יכול למשל לבצע פעולות כגון להזריק DLL לתוך תהליך עם IL גבוה יותר באמצעות ()CreateRemoteThread[4] או לשלוח נתונים לתהליך אחר באמצעות הפונקציה ()WriteProcessMemory.[5]

הערות שוליים עריכה

  1. ^ מרינה סימקוב וירון זינר, [https://www.digitalwhisper.co.il/files/Zines/0x6D/DW109-1-reNTLMRelay.pdf איך הצלחנו לעקוף את כל מנגנוני ההגנה כנגד מתקפת NTLM Relay], ‏אוגוסט 2019
  2. ^ Steve Riley. "Mandatory Integrity Control in Windows Vista". אורכב מ-המקור ב-2007-09-29. נבדק ב-2007-10-08.
  3. ^ Mark Russinovich. "PsExec, User Account Control and Security Boundaries". אורכב מ-המקור ב-2010-04-15. נבדק ב-2007-10-08.
  4. ^ "CreateRemoteThread Function (Windows)". MSDN. נבדק ב-2007-10-08.
  5. ^ "WriteProcessMemory Function". MSDN. נבדק ב-2007-10-08.