PracticU

חטיפת DLL
עם Procmon - Process Monitor

בלי כתוביותעם כתוביות
PracticU › קורס SOC - מיישם הגנת סייבר › חטיפת DLL עם Procmon - Process Monitor
מילון מושגים:
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
רג'יסטרי - מסד נתונים מרכזי ב-Windows ששומר הגדרות של מערכת ההפעלה ושל תוכנות מותקנות.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
משתנה סביבה - ערך בעל שם שמוגדר במערכת ההפעלה ומשמש תוכנות להגדרות, כמו נתיבים או מפתחות תצורה.
חתימה דיגיטלית - מנגנון מבוסס הצפנה שמוכיח את מקור המידע ושלא שונה בדרך, בעזרת המפתח הפרטי של החותם.

חטיפת DLL עם Procmon - Process Monitor
הרצאה זו ממשיכה את נושא DLL hijacking, הפעם עם כלי אחר של Microsoft בשם Process Monitor (Procmon), שמציג בצורה גרפית ונוחה אילו פעולות קובץ הרצה מבצע, כולל אילו DLLים הוא טוען ובאיזה סדר.
מה הכלי מראה ולמה זה רלוונטי
Procmon עוקב אחרי תהליך ספציפי ומתעד כל פעולה שלו: פנייה ל-registry, פתיחת קבצים, וטעינת קבצי DLL. ניתן לסנן את התצוגה לפי שם התהליך ולפי סוג הפעולה, כך שרואים רק את טעינת ה-DLLים.
המידע הזה חשוב כי תוכנה שלא כותבת בקוד שלה את הנתיב המדויק לקובץ DLL מחפשת אותו קודם בתיקייה הנוכחית שלה, ורק אחר כך בתיקיות מערכת אחרות לפי משתני סביבה. זו הבעיה שהתוקף מנצל: אם מכינים קובץ עם שם זהה לקובץ המקורי ומניחים אותו בתיקייה שהתוכנה מחפשת בה קודם, היא תטען את הקובץ המזויף בלי לבדוק חתימה דיגיטלית, כי תוכנות רבות, כולל של Microsoft עצמה, לא בודקות חתימה על ה-DLLים שהן טוענות.
איך אפשר לחשוד שזה קרה (אינדיקציות לחדירה)
1. קובץ הרצה נמצא בתיקייה שאינה המיקום הרגיל שלו במערכת (למשל לא ב-System32).
2. קובץ DLL נמצא בתיקייה שאינה המקורית שלו.
3. קובץ DLL אינו חתום דיגיטלית (Unsigned), בניגוד לקבצים מקוריים של Microsoft.
שימו לב
ההרצאה מדגישה שלרוב תוכנות אינן בודקות חתימה דיגיטלית על ה-DLLים שהן טוענות, וזה מה שמאפשר לשיטה הזו לעבוד ולהיות קשה לגילוי.
אחרי ההרצאה אפשר להסביר למה DLL hijacking מתאפשר, אילו סימנים מעידים עליו, ולמה בדיקת חתימה דיגיטלית הייתה עוזרת למנוע אותו.
השיעור הבא בקורס: הזרקה Process Injection חלק 1

פרקי ההרצאה: חטיפת DLL עם Procmon - Process Monitor

  1. 00:00

    מעקב אחרי תהליכים עם Procmon

  2. 00:39

    רעיון החלפת ה-DLL

  3. 01:15

    סינון לפי שם תהליך

  4. 01:52

    הפעלת המחשבון והתיעוד

  5. 02:59

    סינון פעולות טעינת DLL

  6. 04:14

    נתיב יחסי וסדר החיפוש

  7. 05:31

    הורדת DLL לדוגמה

  8. 07:01

    הפעלה וטעינת ה-DLL המזויף

תמלול ההרצאה: חטיפת DLL עם Procmon - Process Monitor

הטקסט המלא של הדקות הראשונות בהרצאה «חטיפת DLL עם Procmon - Process Monitor» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם, בסרטון זה נדבר על חטיפת די.אל.אל, נשתמש בכלי שנקרא פרוקמון, פרוצס מוניטור, הכלי הזה הוא שייך למייקרוסופט, פרוצס מוניטור, הכלי הזה שאנחנו הולכים עכשיו להוריד אותו מאתר של מייקרוסופט, הוא יודע לנטר, לעקוב אחרי קובץ אקזה ולהראות לי איזה די.אל.אלים הוא מפעיל,

  2. 00:24

    אחרי שאני יודע איזה די.אל.אלים התוכנה מפעילה, אני יכול להחליף לו את ה-DLL עם הקוד המקורי ב-DLL זדוני שלי, זאת אומרת האנטיווירוס רואה שתוכנה לגיטימית רצה והיא מטעינה DLL כלשהו ובמקום ה-DLL המקורי אני מכניס את ה-DLL שלי, זה נקרא לחטוף DLL מהתוכנה וקשה מאוד לעלות על זה, אני הורדתי פה את ה-Process Monitor, נעשה רגע את

  3. 00:49

    קליק Extract All, נחלץ אותו, זאת תוכנה קטנה ואנחנו יכולים להריץ אותו, הרוקבון הזה היתרון שלו שהוא גרפי הוא נוח לשימוש הוא גם אומר לי איזה תוכנה שימו לב יש לנו פה עמודה של תוכנה איזה פעולה היא עשתה פנתה לרג'יסטרי פתחה קובץ סגרה קובץ ממש יש לנו פה תיעוד של כל מה שהתוכנה מנסה לעשות וגם אם היא הצליחה או

  4. 01:11

    לא הצליחה נניח היא פנתה לרג'יסטרי מסוים ולא היה שם בכלל את המפתח הזה מה אנחנו רוצים לעשות פה אנחנו רוצים לתעד ולעקוב לא לא רק אחרי Windows כולו, אלא רק אחרי פרוצס מסוים, תהליך מסוים של מחשבון.

  5. 01:27

    בואו נלחץ על פילטר פה למעלה, נבחר process name is calc.exe, add. ושימו לב, יש פה כבר מסננת דיפולטית שאומרת לא להראות כל מיני דברים של פרוקמון עצמו.

  6. 01:41

    גם ככה יש כאן בלאגן ענק עם מיליון דברים שרצים במקביל. אז הוא מנסה לסנן עבורי את כל מה שבטוח לא רלוונטי, אני אומר לו, תראה לי רק ב-V ירוק מה ש-calc.exe.

  7. 01:52

    בואו נסגור את ה-calc ונפתח אותו עוד פעם. calc.exe, אתם יכולים לראות פה שאיך שאני עושה את זה, איך שאני מפעיל את ה-calc, המחשבון עלה ויחד איתו התיעוד של כל מה שהוא ניסה לעשות.

  8. 02:04

    אפשר לראות כאן את השעה וכמה על פיות השנייה כל דבר לוקח. אז הדבר הראשון זה process start, התחיל התהליך. זה אומר קובץ אקזה הועתק לזיכרון והתחילו להריץ אותו, זה נהיה תהליך.

  9. 02:17

    אבל מה שמעניין אותי פה זה ה-DLLים שנטענו. אתם רואים, הוא טען DLL כזה וכזה, אחרי זה ניסה ללכת ל-Registry, לפתוח כל מיני מפתחות רג'יסטרי, לבדוק כל מיני דברים, אחרי זה בדק תיקייה סיסטם 32, ראה שיש את התיקייה הזאת, וטען מתוכה לא עוד אימג' איזשהו DLL.

  10. 02:37

    אימג' זה פקודות לביצוע, מפה ומפה, אחרי זה עוד פעם בדק משהו ב-Registry, ואחרי זה הטעין עוד DLLים. זה ה-DLLים שהוא הטעין, ואני יכול לבחור את אחד ה-DLLים ולזייף לו, שבמקום שהוא יפתח את ה-DLL שלו, שיריץ את ה-DLL שלי עם הקוד הזדוני.

  11. 02:55

    הנה, עוד פעם הוא מתעסק פה קצת בקבצים, עוד פעם ב-registry, עוד פעם מטעין איזשהו DLL. עכשיו אני יכול לסנן לפי לורד אימג'. זאת אומרת, את העמודה של אופריישנס, להגיד רק להראות לורד אימג'. בואו נעשה את זה, נלחץ עוד פעם על הפילטר, על המסננת פה למעלה, ונגיד לו שבעמודת Operations יראה לי רק Load Image.

  12. 03:18

    לא מעניין אותי כרגע רג'יסטרי וכל מיני דברים כאלו. והנה יש לי פה מסננת כפולה, תסתכלו. יש לי גם מסננת לפי Calc.exe וגם פעולות רק של טעינה של אימג'ים, שזה קובץ אקזה או DLL.

  13. 03:32

    והנה אני רואה פה את כל ה-DLLים שהוא מטעין תוך כדי פעולה. אנחנו הולכים לכתוב DLL שנקרא winnet.dll. בוא נמצא אותו שם, הנה הוא wininet.dll, זה מה שאנחנו הולכים לזייף לו, איך אנחנו נעשה את זה? מאוד פשוט, בשביל לא לדפוק לי את כל הווינדוס, אני אקח את קובץ calc.exe, אני אעשה לו קופי, נעשה פה איזושהי תיקייה חדשה, נקרא לה טסט,

  14. 03:58

    נעתיק לתוך תיקי הטסט שלנו את ה-calc.exe, ועכשיו נוריד את ה-dll הזדוני וניתן לו את השם הזה. הקטע שבתוך calc, בתוך המחשבון לא כתוב הנתיב המלא לקובץ dll, יכול להיות שאני ארצה להתקין ווינדוס בקונן D, יכול להיות מצב שיש לי שני ווינדוסים, ווינדוס אחד ב-C ווינדוס אחד ב-D, זה נקרא דואל בוט.

  15. 04:20

    אז המתכנתים של הווינדוס, של הקלקולטור, לא כתבו לו נתיב מלא, אבסולוטי, מדויק לקובץ, אלא נתנו לו רק שם, ואז הוא מנסה לחפש את זה בתיקי הנוכחית, ואם הוא לא מוצא הוא הולך לתיקיות אחרות, לפי path.

  16. 04:35

    אז אני הולך לשים לו פה את ה-DLL ואז במקום ללכת ל-DLL המקורי ולהתאים אותו, הוא יתאים את ה-DLL מכאן כי זה אותו המיקום, זו אותה תיקייה. כאילו אני משחק על סדר טעינה של ה-DLLים.

  17. 04:48

    אם המתכנתים של מייקרוסופט היו כותבים לו בקוד את הנתיב האבסולוטי, אז זה לא היה עובד. בגלל שהם כתבו לו רק את השם בקוד, אז יש סדר טעינה, סדר חיפוש איפה הוא מחפש את ה-DLL.

  18. 05:00

    המקום הראשון שהוא מחפש בו זה בתיקייה הנוכחית של אקזה ואני אשים פה לא את הDLL המקורי אלא את הDLL המזויף אבל עם השם של המקורי ואז הוא יטעין לי את הDLL הזדוני שלי.

  19. 05:13

    את הDLL הזדוני אנחנו נוריד מדוגמה מוכנה קובץ שנקרא Reflective DLL x64 כמובן שאפשר ללמוד תכנות ולתכנת DLL משלנו שעושה דברים זדוניים ואז קורא ל-DLL המקורי כך שהיוזר אפילו לא ירגיש כלום.

  20. 05:29

    זה נקרא פרוקסי, אני לוקח את ה-DLL הזה מגיטהאב, מוריד אותו זאת סתם דוגמה פשוטה שלא עושה שום נזק, רק מדגים הוא אומר לי שזה מסוכן, אני עושה לו בסדר, תשמור לי, Keep anyway הוא אומר, אין, אני לא מרשה לך, האנטיווירוס פה לא נותן לי להוריד אותו כנראה מכירים את החתימה, את הערבול של הקובץ

  21. 05:48

    הזה ומתייחסים אליו כווירוס למרות שהוא לא זדוני ואין בו שום דבר רע אני מוריד את ה-real time protection, את ההגנה בזמן אמת של האנטיווירוס המובנה בווינדוס, ומוריד עוד פעם את הקובץ, עוד פעם עושה לו Keep, Keep Anywhere, הנה יש לי אותו עכשיו בתיקייה Reflective DLL, אני עושה לו קופי,

  22. 06:08

    מעתיק אותו ל-Downloads, לתיקיית טסט, שיש לי שם רק Calc, אני עושה Right Click, Paste, העתקתי את ה-DLL הזה, יש שם קוד לדוגמה, כמובן שבמציאות זה היה קוד זדוני, עכשיו אני הולך ל-Procmon, יכול להעתיק מפה את השם,

  23. 06:25

    או שאני הולך ל-Event Viewer, גם פה יש לי את אותם תיעודים של DLLים שהתוכנה הפעילה, לדעתי זה פחות נוח כאן, אבל זה כלי לא גרפי, אז אפשר להפעיל אותו מרחוק על הרבה מחשבים במכה אחת, רק צריך להיות מדויקים עם מה שאנחנו רוצים לעקוב אחריו, והנה התיעוד שחיפשתי ל-wininet.dll שתוכנת Calc טוענת אותו, אני עושה קופי לזה לשם מגיע לתיקי הטסט

  24. 06:53

    ומחליף את ה-DLL בשם שה-exe של Calc מחפש זאת אומרת הקאלק הזה מחפש dll עם השם הזה ומטעין אותו והם לא בודקים חתימה דיגיטלית על הקובץ כי התוכנה מניחה שאף אחד לא זייף לdllים ולא טורחים לבדוק את החתימות.

  25. 07:11

    הקאלק מתוכננת לחפש את הdll בשם הזה. אנחנו עושים דאבל קליק ושימו לב Hello from dll main שימו לב מה היה פה הפעלנו את הקובץ אקזה הוא מחפש את הdll בשם הזה והסדר חיפוש שלו קודם כל בתיקי

לקורס המלא: קורס SOC אונליין – מיישם הגנת סייבר

ההרצאה הקודמת: חטיפת DLL עם Sysmon

ההרצאה הבאה: הזרקה Process Injection - חלק 1

הרצאות קשורות מקורסים אחרים

  • process
  • יצירת DLL - חלק 1
  • חטיפת RDP Session - שרת 2016 - חלק 1
  • עבודה עם מספר פרויקטים - Multiple Projects - DLL

קורסים נוספים במסלול

  • קורס סייבר למתחילים - Hacking - בדיקות חוסן תשתיתי ופריצה ל-Windows 10/11 - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לתשתית ארגונית - בדיקות חוסן מתקדמות ל-Active Directory - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס פריצה ומבדקי חדירה לאתרי אינטרנט - בדיקות חוסן לאתרים - Web Pentesting - קורס זה נדרש למבחן ההסמכה היוקרתי OSCP
  • קורס סייבר והאקינג ל-Android - פריצה לטלפונים ואפליקציות אנדרואיד - בודק חוסן - Mobile App Pentesting