
הטקסט המלא של הדקות הראשונות בהרצאה «חטיפת DLL עם Procmon - Process Monitor» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בסרטון זה נדבר על חטיפת די.אל.אל, נשתמש בכלי שנקרא פרוקמון, פרוצס מוניטור, הכלי הזה הוא שייך למייקרוסופט, פרוצס מוניטור, הכלי הזה שאנחנו הולכים עכשיו להוריד אותו מאתר של מייקרוסופט, הוא יודע לנטר, לעקוב אחרי קובץ אקזה ולהראות לי איזה די.אל.אלים הוא מפעיל,
אחרי שאני יודע איזה די.אל.אלים התוכנה מפעילה, אני יכול להחליף לו את ה-DLL עם הקוד המקורי ב-DLL זדוני שלי, זאת אומרת האנטיווירוס רואה שתוכנה לגיטימית רצה והיא מטעינה DLL כלשהו ובמקום ה-DLL המקורי אני מכניס את ה-DLL שלי, זה נקרא לחטוף DLL מהתוכנה וקשה מאוד לעלות על זה, אני הורדתי פה את ה-Process Monitor, נעשה רגע את
קליק Extract All, נחלץ אותו, זאת תוכנה קטנה ואנחנו יכולים להריץ אותו, הרוקבון הזה היתרון שלו שהוא גרפי הוא נוח לשימוש הוא גם אומר לי איזה תוכנה שימו לב יש לנו פה עמודה של תוכנה איזה פעולה היא עשתה פנתה לרג'יסטרי פתחה קובץ סגרה קובץ ממש יש לנו פה תיעוד של כל מה שהתוכנה מנסה לעשות וגם אם היא הצליחה או
לא הצליחה נניח היא פנתה לרג'יסטרי מסוים ולא היה שם בכלל את המפתח הזה מה אנחנו רוצים לעשות פה אנחנו רוצים לתעד ולעקוב לא לא רק אחרי Windows כולו, אלא רק אחרי פרוצס מסוים, תהליך מסוים של מחשבון.
בואו נלחץ על פילטר פה למעלה, נבחר process name is calc.exe, add. ושימו לב, יש פה כבר מסננת דיפולטית שאומרת לא להראות כל מיני דברים של פרוקמון עצמו.
גם ככה יש כאן בלאגן ענק עם מיליון דברים שרצים במקביל. אז הוא מנסה לסנן עבורי את כל מה שבטוח לא רלוונטי, אני אומר לו, תראה לי רק ב-V ירוק מה ש-calc.exe.
בואו נסגור את ה-calc ונפתח אותו עוד פעם. calc.exe, אתם יכולים לראות פה שאיך שאני עושה את זה, איך שאני מפעיל את ה-calc, המחשבון עלה ויחד איתו התיעוד של כל מה שהוא ניסה לעשות.
אפשר לראות כאן את השעה וכמה על פיות השנייה כל דבר לוקח. אז הדבר הראשון זה process start, התחיל התהליך. זה אומר קובץ אקזה הועתק לזיכרון והתחילו להריץ אותו, זה נהיה תהליך.
אבל מה שמעניין אותי פה זה ה-DLLים שנטענו. אתם רואים, הוא טען DLL כזה וכזה, אחרי זה ניסה ללכת ל-Registry, לפתוח כל מיני מפתחות רג'יסטרי, לבדוק כל מיני דברים, אחרי זה בדק תיקייה סיסטם 32, ראה שיש את התיקייה הזאת, וטען מתוכה לא עוד אימג' איזשהו DLL.
אימג' זה פקודות לביצוע, מפה ומפה, אחרי זה עוד פעם בדק משהו ב-Registry, ואחרי זה הטעין עוד DLLים. זה ה-DLLים שהוא הטעין, ואני יכול לבחור את אחד ה-DLLים ולזייף לו, שבמקום שהוא יפתח את ה-DLL שלו, שיריץ את ה-DLL שלי עם הקוד הזדוני.
הנה, עוד פעם הוא מתעסק פה קצת בקבצים, עוד פעם ב-registry, עוד פעם מטעין איזשהו DLL. עכשיו אני יכול לסנן לפי לורד אימג'. זאת אומרת, את העמודה של אופריישנס, להגיד רק להראות לורד אימג'. בואו נעשה את זה, נלחץ עוד פעם על הפילטר, על המסננת פה למעלה, ונגיד לו שבעמודת Operations יראה לי רק Load Image.
לא מעניין אותי כרגע רג'יסטרי וכל מיני דברים כאלו. והנה יש לי פה מסננת כפולה, תסתכלו. יש לי גם מסננת לפי Calc.exe וגם פעולות רק של טעינה של אימג'ים, שזה קובץ אקזה או DLL.
והנה אני רואה פה את כל ה-DLLים שהוא מטעין תוך כדי פעולה. אנחנו הולכים לכתוב DLL שנקרא winnet.dll. בוא נמצא אותו שם, הנה הוא wininet.dll, זה מה שאנחנו הולכים לזייף לו, איך אנחנו נעשה את זה? מאוד פשוט, בשביל לא לדפוק לי את כל הווינדוס, אני אקח את קובץ calc.exe, אני אעשה לו קופי, נעשה פה איזושהי תיקייה חדשה, נקרא לה טסט,
נעתיק לתוך תיקי הטסט שלנו את ה-calc.exe, ועכשיו נוריד את ה-dll הזדוני וניתן לו את השם הזה. הקטע שבתוך calc, בתוך המחשבון לא כתוב הנתיב המלא לקובץ dll, יכול להיות שאני ארצה להתקין ווינדוס בקונן D, יכול להיות מצב שיש לי שני ווינדוסים, ווינדוס אחד ב-C ווינדוס אחד ב-D, זה נקרא דואל בוט.
אז המתכנתים של הווינדוס, של הקלקולטור, לא כתבו לו נתיב מלא, אבסולוטי, מדויק לקובץ, אלא נתנו לו רק שם, ואז הוא מנסה לחפש את זה בתיקי הנוכחית, ואם הוא לא מוצא הוא הולך לתיקיות אחרות, לפי path.
אז אני הולך לשים לו פה את ה-DLL ואז במקום ללכת ל-DLL המקורי ולהתאים אותו, הוא יתאים את ה-DLL מכאן כי זה אותו המיקום, זו אותה תיקייה. כאילו אני משחק על סדר טעינה של ה-DLLים.
אם המתכנתים של מייקרוסופט היו כותבים לו בקוד את הנתיב האבסולוטי, אז זה לא היה עובד. בגלל שהם כתבו לו רק את השם בקוד, אז יש סדר טעינה, סדר חיפוש איפה הוא מחפש את ה-DLL.
המקום הראשון שהוא מחפש בו זה בתיקייה הנוכחית של אקזה ואני אשים פה לא את הDLL המקורי אלא את הDLL המזויף אבל עם השם של המקורי ואז הוא יטעין לי את הDLL הזדוני שלי.
את הDLL הזדוני אנחנו נוריד מדוגמה מוכנה קובץ שנקרא Reflective DLL x64 כמובן שאפשר ללמוד תכנות ולתכנת DLL משלנו שעושה דברים זדוניים ואז קורא ל-DLL המקורי כך שהיוזר אפילו לא ירגיש כלום.
זה נקרא פרוקסי, אני לוקח את ה-DLL הזה מגיטהאב, מוריד אותו זאת סתם דוגמה פשוטה שלא עושה שום נזק, רק מדגים הוא אומר לי שזה מסוכן, אני עושה לו בסדר, תשמור לי, Keep anyway הוא אומר, אין, אני לא מרשה לך, האנטיווירוס פה לא נותן לי להוריד אותו כנראה מכירים את החתימה, את הערבול של הקובץ
הזה ומתייחסים אליו כווירוס למרות שהוא לא זדוני ואין בו שום דבר רע אני מוריד את ה-real time protection, את ההגנה בזמן אמת של האנטיווירוס המובנה בווינדוס, ומוריד עוד פעם את הקובץ, עוד פעם עושה לו Keep, Keep Anywhere, הנה יש לי אותו עכשיו בתיקייה Reflective DLL, אני עושה לו קופי,
מעתיק אותו ל-Downloads, לתיקיית טסט, שיש לי שם רק Calc, אני עושה Right Click, Paste, העתקתי את ה-DLL הזה, יש שם קוד לדוגמה, כמובן שבמציאות זה היה קוד זדוני, עכשיו אני הולך ל-Procmon, יכול להעתיק מפה את השם,
או שאני הולך ל-Event Viewer, גם פה יש לי את אותם תיעודים של DLLים שהתוכנה הפעילה, לדעתי זה פחות נוח כאן, אבל זה כלי לא גרפי, אז אפשר להפעיל אותו מרחוק על הרבה מחשבים במכה אחת, רק צריך להיות מדויקים עם מה שאנחנו רוצים לעקוב אחריו, והנה התיעוד שחיפשתי ל-wininet.dll שתוכנת Calc טוענת אותו, אני עושה קופי לזה לשם מגיע לתיקי הטסט
ומחליף את ה-DLL בשם שה-exe של Calc מחפש זאת אומרת הקאלק הזה מחפש dll עם השם הזה ומטעין אותו והם לא בודקים חתימה דיגיטלית על הקובץ כי התוכנה מניחה שאף אחד לא זייף לdllים ולא טורחים לבדוק את החתימות.
הקאלק מתוכננת לחפש את הdll בשם הזה. אנחנו עושים דאבל קליק ושימו לב Hello from dll main שימו לב מה היה פה הפעלנו את הקובץ אקזה הוא מחפש את הdll בשם הזה והסדר חיפוש שלו קודם כל בתיקי