Mimikatz

Mimikatz הוא כלי תקיפה מקובל בעולם ה-Windows בעל יכולות רבות, כאשר השימוש הנפוץ בו הוא חילוץ סיסמאות מהזיכרון. השימוש בכלי מתבצע לאחר השגת אחיזה על עמדה (Post Exploitation) והשגת הרשאות גבוהות (Privilege Escalation), והוא מאפשר חילוץ מהזיכרון של סיסמאות משתמשים, hash-ים, Kerberos Tickets ועוד. הכלי פותח על ידי בנג'ימין דלפי בשנת 2008, נכתב בשפת C וזמין ברשת להורדה כ-Executable או כקוד מקור.

שימושים מרכזיים

כאשר תוקף משיג אחיזה בתחנה כלשהי (כולל הרשאות ניהול) ומחפש דרכים להתקדם ברשת (Lateral Movement), הוא עשוי להשתמש בכלי זה כדי לגשת אל ה-SAM ואל תהליך ה-LSASS כדי לחלץ מהם נתוני אימות.

הרשאה עיקרית שהכלי דורש כדי לבצע את עבודתו היא מסוג Debug Privilege (SeDebugPrivilege). הכלי דורש הרשאה זו, שניתנת למנהלי מקומיים (Local Admins) כברירת מחדל, כדי לגשת לזיכרון של תהליכים רגישים כגון lsass.exe, לקרוא אותו ולערוך אותו. יכולת זו מאפשרת לתוקף לקבל סיסמאות של משתמשים שונים שנכנסו למערכת ולנצל את ההרשאות שלהם כדי לעבור למערכות נוספות.

הכלי מאפשר מתקפה הנקראת Pass-the-Hash, כלומר להשתמש ב-Hash של הסיסמה (כיוון שברוב המוחלט של המקרים הסיסמה תישמר כ-Hash) ולא בסיסמה עצמה בשביל לבצע את ההזדהות.

הכלי מאפשר הוצאת נתונים הן במצב Online (כלומר כאשר הוא רץ על המערכת) והן במצב Offline. במצב ה-Offline הכלי למעשה רץ על המערכת של התוקף כאשר הוא משתמש ב-Dump של תהליך ה-lssas, ולאחר מכן לחלץ מתוכו את הנתונים.

נוסף לכך, הכלי מאפשר לחקות את פעולותיו של מנגנון ה-DCSync ובכך להתערב בפעולות של ה-Domain Controller בצורה נסתרת לאחר השגת הרשאות Domain Admin.

רקע

מערכות Windows מבוססות Domain דורשות אפשרות הזדהות גם כאשר אין גישה ל-Domain Controller. למשל, תחנה ארגונית אצל משתמש בבית ללא חיבור VPN דורשת יכולת הזדהות כאשר ה-DC אינו זמין. כדי לאפשר זאת שומרת מערכת ההפעלה (בהתאם לגרסה) סיסמאות ובעיקר hash-ים של סיסמאות המאפשרים למערכת לבצע הזדהות ללא שימוש במשאבי רשת.

דוגמה

נניח שהתוקף השיג hash של משתמש בעמדה מסוימת, ורוצה להריץ cmd תוך התחזות למשתמש שה-hash שייך לו. בשביל לבצע זאת, זה מה ש-Mimikatz יעשה:

  1. הכלי ייפתח תהליך cmd.exe עם המשתמש הרלוונטי אך עם סיסמת Dummy (סיסמה ריקה). ברגע שזה יקרה ייווצר לתהליך Access Token, והוא יקבל Logon session LUID (locally unique identifier), מספר סידורי המייצג את ה-Session של משתמש עם תהליך. ברגע שנפתח במערכת ההפעלה תהליך חדש, מאחורי הקלעים תהליך ה-lsass לוקח את פרטי המשתמש שהוכנסו, מעביר את הסיסמה בפונקציית גיבוב, יוצר Access Token ו-Logon Session LUID ומאחסן אותם בטבלה המכילה Logon Session LUID ואת הפרטים של המשתמש שלפיהם נקבע ה-Access Token שיקבל.
  2. Mimikatz ישהה את התהליך (Suspend) שפתח (במקרה הזה cmd.exe).
  3. Mimikatz יבקש Handle (מצביע למקום בזיכרון) ממערכת ההפעלה ל-Access Token של התהליך, ממנו הוא מוציא את ה-LSLUID.
  4. Mimikatz ישתמש ב-Debug Privilege בשביל לערוך את תהליך ה-Lsass, שם הוא ייגש לטבלה, וב-Logon Session LUID של התהליך שייצר הוא ישנה את ה-hash שקיים שם (של ה-Dummy, כלומר כלום), ויחליף אותו עם ה-Hash של המשתמש הרצוי. בכך ישיג Access Token של אותו משתמש על תהליך ה-cmd.exe שיצר.

לאחר מכן יבטל את השהיית התהליך והתהליך ימשיך בריצתו תחת הרשאותיו החדשות.

אפשריות הגנה

  • רוב מוחלט של מערכות האנטי-וירוס יזהו את הקובץ הרגיל של Mimikatz. עם זאת חלק גדול מהם יתקשו לזהות את הקובץ לאחר ביצוע שינויים מינורים בקוד וקימפול מחדש.
  • שנוי רמת ההרשאות ל-Debug Privilege למשתמשים ייעודיים בלבד כך שגם אם הושגה הרשאה גבוהה כמו Local Admin או Domain Admin עדיין לא ניתן יהיה להשתמש בכלי.
  • הקטנת מספר הסיסמאות הנשמרות במערכת מ-10 (ברירת המחדל) ל-0 או 1.
  • מניעת ביצוע dump ל-lssas על ידי הגדרות GPO מתאימות
  • שימוש במערכות EDR כדי לזהות פעילויות חשודות

קישורים חיצוניים