מילון מושגים:
RAM - זיכרון הגישה האקראית של המחשב, מהיר ונדיף, שבו נשמרים נתונים ותוכניות בזמן ריצתם.
פישינג - ניסיון הונאה שבו תוקף מתחזה לגורם מהימן כדי לגרום לקורבן למסור פרטים רגישים כמו סיסמאות.
מטמון - אחסון זמני ומהיר של נתונים שנדרשים שוב, כדי להאיץ גישה ולהפחית עומס מהמקור המקורי.
Kali Linux - הפצת Linux המיועדת לבדיקות אבטחה וחדירות, הכוללת אוסף כלים לבחינת מערכות.
Python - שפת תכנות עילית וקריאה, נפוצה בפיתוח, אוטומציה, ניתוח נתונים ולמידת מכונה.
SHA - משפחת פונקציות האש קריפטוגרפיות, המשמשות לאימות שלמות מידע ולחתימות דיגיטליות.
NTLM - פרוטוקול אימות ותיק של מיקרוסופט המבוסס על ערכי האש של סיסמאות, שקדם ל-Kerberos.
Sysmon - כלי של מיקרוסופט שמתעד פעילות מפורטת במערכת Windows ביומן האירועים, לצורכי ניטור ואבחון אבטחה.
גניבת סיסמה מזיכרון המחשב
עם Mimikatz
וונדוס 11
בשיעור זה אנו עוסקים ב-Mimikatz ב-Windows 11, ובשאלה איך שולפים סיסמה מתוך הזיכרון, מתוך ה-RAM של המחשב. בהרצאה הקודמת ראינו איך לשלוף סיסמה מתוך הדיסק, אבל זה לא מספיק טוב, כי לפעמים היוזרים והסיסמאות שלהם שמורים בשרת המרכזי, ואני שולט רק על תחנת עבודה אחת שהצלחתי לפרוץ אליה.
נושאי הסיכום המוצגים בשיעור:
1. הסצנה שלנו: נניח שלחתי להם מייל פישינג והשתלטתי על תחנה, אבל אני רוצה להגיע למידע שנמצא בשרתים שלי, שליוזר הנוכחי אין גישה לשם. השאלה היא איך אני משתלט, איך אני שולף סיסמה של יוזר אחר? אם הוא היה שמור אצלי במחשב באופן מקומי, לא הייתה בעיה, ראינו בסרט קודם איך אפשר לשלוף סיסמה של יוזר כלשהו שהוא מקומי בתחנה, בלי כלום. אבל במציאות, בארגונים, ברשתות, הסיסמאות לא נמצאות בתחנה מסוימת, הן נמצאות בשרת, וכל תחנה הולכת אל השרת המרכזי שנקרא Domain Controller, שרת DC, ובודקת מולו את הסיסמה. אז איך נצליח לגנוב, לשלוף את הסיסמה של יוזר אחר? והתשובה היא, מתוך הזיכרון של המחשב.
2. האסטרטגיה, המתנה ללוגין: אנחנו נחכה שמשתמש שאנחנו רוצים לגנוב לו את הסיסמה ייכנס לתוך המחשב הזה שאנחנו שולטים עליו. אנחנו נעשה את זה עם Task Manager. אנחנו נחכה כאן, כאשר השירות של ה-LSASS, Local Security Authority, הוא זה ששומר סיסמאות של כל היוזרים שעשו לוגין למחשב.
3. מה עושה ה-LSASS ולמה הסיסמאות שמורות אצלו: הוא שומר את הסיסמאות האלו כדי לעשות חיים נוחים למשתמש, שאם המשתמש ירצה לקחת קובץ כלשהו מאיזשהו שרת, הוא לא יצטרך להקיש כל פעם שם וסיסמה. כל שירותי הרשת דורשים עימות, והשירות הזה של ה-LSASS מעביר לשרת המרוחק, לזה שאני מתחבר אליו, את הסיסמה שלי בלי להטריד אותי. בזכות השירות הזה אני פעם אחת נכנס ל-Windows בתחילת היום, לתחנת העבודה שלי, ואחרי זה מטייל בכל הרשת חופשי, ולא צריך כל שנייה להקיש שם וסיסמה בכל התחברות לכל שרת. ה-LSASS הזה, ה-Local Security Authority, זוכר את הסיסמה שלי מהלוגין בכניסה, וכל פעם ששרת מרוחק רוצה לבדוק מי הולך להתחבר אליו, הוא מספק את השם והסיסמה שלי. בקיצור, ל-LSASS יש קאש של סיסמה של כל יוזר שעשה לו לוגין לתחנה הספציפית הזאת. ואם האדמיניסטרטור של הרשת, או איזשהו יוזר אחר, ייכנס לתחנה הזאת, אני אוכל לגנוב מכאן את הסיסמה. כי אני שולט על המחשב הזה, המחשב הזה כאילו נפרץ, אני האדמיניסטרטור על המחשב הזה, ואני מחכה שמנהל רשת, שיש לו הרשאות על כל השרתים ועל כל המערכות, ייכנס לתחנה הזאת, לתחנה שלי, ואני אשתלט לו על הסיסמה, כי אני אשלוף אותה מתוך הקאש.
4. הורדת Mimikatz והכנת הסביבה: בואו נראה איך זה קורה בפועל. הורדנו תוכנת Mimikatz בסרטון קודם, פותחים CMD עם הרשאות של אדמיניסטרטור, עם Run as Administrator, כיוון שאנחנו צריכים זכות להיכנס לזיכרון ה-RAM של ה-LSASS, של exe אחר, של תוכנה אחרת. אז ה-Mimikatz הולך להיכנס לזיכרון שלו ולשלוף משם סיסמאות. אנחנו ב-Windows 11, אני קודם כל עובר לתיקייה של Mimikatz, מריץ אותו, ואז מריץ debug, שנותן לי זכות להיכנס לתוכנות אחרות.
5. הניסיון הישיר נכשל: ועכשיו אני רוצה להריץ, במקום לשלוף מתוך הדיסק, לשלוף מתוך ה-RAM, מתוך הזיכרון. יש מודול שנקרא sekurlsa, לוגון פסוורדס, כל הסיסמאות שבלוגין, ואני מקבל פה אירור, שגיאה. למה? כי ב-Windows 11 הם שינו את אופן הפעולה של Windows, וכברירת מחדל, לא מצליח לשלוף סיסמאות מתוך הזיכרון. מתוך הדיסק הוא מצליח, מתוך הזיכרון הוא לא מצליח. אז מה עושים?
6. הפתרון, יצירת קובץ צילום זיכרון: אנחנו באים ל-Task Manager ועושים קליק ימני על ה-LSASS, ובוחרים create memory dump file. זה אומר לצלם את מצב הזיכרון של התהליך הזה. אני עושה אוקיי, הוא שם לי את זה בקובץ של LSASS.dmp. אני יכול להגיד לו open file location, יש פה כפתור, הנה הקובץ, ובתוך הקובץ הזה שמור כל הזיכרון של ה-LSASS, ורק צריך לפענח אותו. בואו שנייה נעתיק את הקובץ של LSASS.dmp, נעשה קופי, ונעתיק אל תיקייה של Mimikatz. נעשה פה קופי פייסט. זה ה-dump, זה הצילום של כל הזיכרון של ה-LSASS, שיש בתוכו את כל הסודות של Windows, כולל היוזרים שעשו לוגין, ואנחנו בתוך Mimikatz רוצים להגיד לו לנתח את הקובץ הזה. זה אומר תנתח לי את הקובץ. בואו נראה אם הוא יצליח, ואתם רואים שהוא אומר לי שהוא מתחיל לעבוד, במקום מזיכרון, עם הקובץ. ועכשיו אני עושה לו עוד פעם את הפקודה של הלוגון פסוורדס, ואתם רואים שוב שיש לו שגיאה. בקיצור, Mimikatz לא יודע לפענח את ה-dump של Windows 11 המעודכן. אז אין לנו מה לעשות, עוברים לכלי אחר.
7. מעבר אל Kali עם pypykatz: לוקחים את ה-LSASS הזה, את ה-dump הזה, מעתיקים אותו לתוך קאלי. בואו תראו שיטה פשוטה להעתיק. אני פותח תיקייה ריחה אצלי במחשב הפיזי, מעתיק לשם את ה-elsasdump, עושה עוד פעם קופי, והולך למכונה וירטואלית השנייה של קאלי, ומדביק את זה פה. זה גם מה שנהוג, כשאני כאקר רוצה לפענח דברים בצד. יש לי את ה-dump, איך אני פותח אותו? בעזרת כלי שנקרא pypykatz, כיוון ש-Mimikatz פשוט לא עובד בלינוקס, Mimikatz מיועד רק ל-Windows. אז יש את ה-Mimikatz שכתבו אותו ב-Python מחדש, מאפס, ואז Mimikatz בפייטון נקרא pypykatz, ופייטון רץ על כל הפלטפורמות, גם על Windows וגם על לינוקס. בקיצור, ה-pypykatz הזה זה אותו Mimikatz, רק בפייטון, ובגלל זה הוא עובד על כל הפלטפורמות.
8. עדכון הגרסה: בואו נתקין אותו. האמת שהוא בא כבר מותקן בתוך קאלי, אז לא צריך להתקין, כיוון שהוא מותקן. אבל מותקנת גרסה ישנה שלא תואמת ל-Windows 11 המעודכן. גרסה 0.6.6 היא באה בתוך קאלי, אני צריך גרסה 0.6.8. אז בואו נעשה עדכון. נעשה קודם כל עדכון של כל המקומות שמהם אפשר לעדכן, עדכון של כל הגרסאות שקיימות, ולמעשה מעדכן פה רשימה ראשית של אילו תוכנות, באיזו גרסה הן קיימות באופן כללי באינטרנט. זה העדכון הראשי, הוא לא עדכן שום תוכנה בדיסק, הוא רק עדכן רשימה של מה קיים באינטרנט, סנכרן את הרשימה המקומית מול הרשימה ברפוזיטורי המרכזי. ועכשיו אני עושה לו upgrade, עם מתג שמאשר אוטומטית, שישדרג לי הכל ולא ישאל אותי שאלות. עכשיו אני אמור לראות את pypykatz הזה בגרסה חדשה יותר. הפקודות שלו זה אותן פקודות כמו Mimikats, ובשעה טובה ומוצלחת הוא סיים את האפגריידים, ואפשר לראות שהוא בגרסה 0.6.10, וזה יותר מהגרסה הקודמת, מצוין. עכשיו הוא יצליח להבין את ה-dump של Windows 11, שנמצא פה בדסקטופ.
9. פענוח ה-dump: בואו ניכנס לתיקייה של הדסקטופ, אפשר לראות את הנתיב המלא, ואני רואה שיש לי פה את ה-dump של ה-LSASS. ואני יכול להגיד ל-pypykatz לפענח לי את הקובץ הזה, עם הפקודה lsa mini dump, ש-mini dump זה לקחת את זה מקובץ, ואיפה נמצא הקובץ. עושים Enter, ווואלה, הוא מפענח לי את כל מה שיש בזיכרון, וזה יותר ממה שהיה בדיסק בפקודה הקודמת. מה אנחנו רואים כאן? בואו נעלה למעלה, כאן הרצנו את הפקודה, אנחנו רואים Logon Session, יוזר שנכנס בלוגין יש לו סשן במחשב, שהמחשב קוראים לו Windows 11, יוזר בשם אדמין, וכאן אני רואה את ההאשים של הסיסמה שלו, SHA-1 ו-NT. זה למעשה שתי צורות שעונות להאש של אותה סיסמה, זאת אומרת של סיסמת היוזר הזה עשו פעמיים האש. דרך אגב, ה-LM hash זה ההאש הישן, שכבר ביטלו אותו, כי היה קל לפענח אותו, אז ביטלו אותו, משתמשים ב-NT hash. זה ככה ה-Windows שומר דברים בזיכרון שלו, זה הלוגון סשן של יוזר בשם אדמין, שם המשתמש אדמין. אנחנו גם רואים פה את הטיקטים שלו בקרברוס, וקרברוס זה מערכת העימות בארגון מול שרתים אחרים. אנחנו רואים פה גם האש בצורה אחרת, שכרגע זה מבוטל כברירת מחדל. אנחנו רואים פה גם עוד סודות שונים, כמו הכספת של Windows. Windows שומר את כל הסיסמאות לאתרים ולשרתים אחרים בכספת מיוחדת. אתם יכולים לראות פה ב-Windows הרגיל, ב-Credentials Manager, שהוא שומר בפנים סיסמאות לאתרי אינטרנט ולשרתים אחרים, לדוגמה, שולחן עבודה מרוחק למקומות אחרים. הכל שמור בכספת, וגם זה אני יכול לשלוף.
10. מה רואים בתוך ה-dump: אם תעברו טוב טוב על כל ה-Logon Sessions, אתם תראו שאין פה יוזר שלא נכנס. זוכרים, עשינו איזה יוזר 11? את מי עשינו שם? יוזר אחד ב-Computer Management, ב-Users. יצרנו יוזר אחד, אבל לעולם לא עשינו איתו לוגין. בגלל שלא עשינו איתו לוגין, הוא לא יהיה בזיכרון. אבל פה, בתוך ה-LSA dump, יהיו יוזרים שלא קיימים בדיסק המקומי, יהיו כאן יוזרים של הרשת שנכנסו למחשב שלי, ותפסתי להם את הסיסמה בקאש. אתם תראו גם שיש יוזרים שהם של Windows עצמו, כמו Local Service, איתו הוא מריץ שירותים מקומיים, תוכנות מקומיות, ושימו לב ליוזר הזה, אין סיסמה, הוא לא צריך סיסמה בכלל, כיוון שמערכת ההפעלה נותנת להפעיל אותו עם כל סיסמה, זה היוזר הפנימי שלו שלא צריך סיסמה. אתם תראו שיש פה עוד יוזר שנקרא DWM, יוזר שמשתמשים בו בשביל כל הגרפיקה, Windows Manager. מסיבות של אבטחה, Windows עצמו חילק את עצמו ליוזרים שונים, המתכנתים של מיקרוסופט חילקו ליוזרים שונים, ואז אם מישהו פורץ, הוא מוגבל ליכולות של אותו יוזר. יש פה עוד משהו מעניין, שם משתמש שנגמר בסימן דולר, והדולר זה שם של מחשב, זה למעשה יוזר שהמחשב עצמו משתמש בו לצרכים שלו, שלא קשורים למשתמש רגיל. זאת אומרת שהמחשב עצמו יכול להתחבר לשירותי רשת בתוך הארגון, וזה גם משהו מעניין, לומדים על זה בקורס מנהלי רשת. כרגע אנחנו לא רואים פה שום דבר, כי אין לנו ניהול מרכזי, ואז החשבון של המחשב בעצם לא כל כך בשימוש. אתם יכולים לעבור פה על כל היוזרים שקיימים, ולא תמצאו את היוזר שלא עשה לוגין, יוזר שנמצא בדיסק.
11. הסיכום והתרגיל הבא: אז אני אסכם לכם, מה ראינו? ראינו שאפשר לעשות dump ולשלוף סיסמאות מהזיכרון, וזה טוב לפריצות ברשת, שאני כאקר מחכה במחשב פרוץ של מנהל הרשת, שהוא יעשה לוגין לבדוק איזה משהו, ואני אתפוס לו את הסיסמה ואשלוף אותה מתוך הזיכרון. ראינו גם את הפקודה הקודמת, LSA patch, ששולפת סיסמאות מתוך הדיסק. ועכשיו יש לנו תרגיל לעשות, לעשות credentials dump. dump זה כאילו צילום של כל הסיסמאות, credentials זה שמות וסיסמאות, והם רוצים שנשלוף NTLM hash, NT hash, של אדמיניסטרטור. אנחנו צריכים להתחבר למכונה וירטואלית שלהם ולשלוף את זה, והם רוצים שנעשה את זה עם מכשיר ה-Sysmon, שגם הוא רואה את האירוע של ה-dumpים. זה לא הסברתי לכם, שגם המכשיר הזה רואה את האירוע של ה-dumpים. תכף נראה את זה במכונה שלהם. נעשה את זה בסרטון הבא.
סיכמנו את גניבת הסיסמאות מתוך הזיכרון ב-Windows 11, מההבנה של תפקיד ה-LSASS והקאש שלו, דרך יצירת צילום זיכרון והמעבר ל-pypykatz בלינוקס בגרסה מעודכנת, ועד לפענוח ה-dump שחושף יוזרים שעשו לוגין, hashים, טיקטי קרברוס וכספת ה-Windows. זה הכל, תודה רבה.
SR13663HE