
Get-ChildItem + ForEach-Object + Get-WindowsEvent -Path עוברים על כל קבצי היומן בתיקייה. -MaxEvents 1 ו-Format-List * על אירוע ראשון מגלים את שדה Provider Name, שמראה שהיומן נוצר על ידי Sysmon.Signed: false), בשונה מ-DLL לגיטימי של יצרן ידוע. סינון לפי Event ID 7 וגם היעדר "Signed true" בתוך ההודעה מצמצם את הרשימה לאירועים חשודים.Signed -eq $false במקום לחפש מילים בתוך טקסט חופשי - מדויק יותר כי אין סיכון שמילה דומה תבלבל את הסינון.הטקסט המלא של הדקות הראשונות בהרצאה «זיהוי חטיפת DLL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם. אנחנו בפרק של סיכום מודול על Windows Events, על אירועים של Windows. למעשה יש לנו סדרה של תרגילים שאנחנו עושים על המכונה הווירטואלית שלהם, כאילו היה איזשהו אירוע.
יש לנו פה לוגים של האירוע וצריך לתחקר אותו, והשאלה הראשונה היא לבדוק את הלוגים בתיקייה הזאת ולגלות איזה תוכנה, איזה process אחראי על חטיפה של DLL. מה זה חטיפה של DLL?
במקום שתוכנה לגיטימית תטעין את ה-DLL שהיא אמורה להטעין, אני שם לה DLL שלי ובתוכו הקוד הזדוני. זאת אומרת שאני מנצל את העובדה שתוכנה לגיטימית מטעינה, טוענת קטעי קוד מ-DLL-ים חיצוניים, והיא מעדיפה את ה-DLL שנמצא לידה בתיקייה מאשר DLL שנמצא במקום מרוחק.
אז, אה, אני גורם לה להטעין את ה-DLL שלי. דיברנו על ההתקפה הזאת. בואו נראה איך פותרים את זה. קודם כל נלך לתיקייה, נראה האם יש לנו שם קובץ אחד או הרבה לוגים.
אני נכנס לתיקייה ורואה שיש לי פה event log אחד. אין לי הרבה לוגים, עשו לי חיים קצת יותר קלים. עקרונית אני אראה לכם מה הייתי עושה אם היו פה הרבה קבצי log.
ככה נסבך לעצמנו את החיים. קודם כל אני פותח Powershell 7, שעדכנתי אותו מתוך האתר של Microsoft. אתם רואים, יש לי פה MSI שהורדתי מאתר של Microsoft עם Powershell 7 ואני רוצה לעבוד איתו כי יש לו יכולת לסנן באופן דינמי שדות שהם לא קבועים ב-event-ים.
זאת אומרת, השדות שמתחלפים בין event ל-event, אפשר לציין אותם בצורה ישירה ב-Powershell 7, אבל לא בגרסה המובנית בגרסה חמש. אני יוצא לתיקייה הראשית ומנקה את המסך שלי ואני בתוך Powershell 7.
בואו נניח שכאן בתיקייה יש לנו הרבה קבצי event log, לא רק אחד. נסבך לעצמנו את החיים כאילו יש לנו פה הרבה export-ים וצריך למצוא מי עשה חטיפה ל-DLL. קודם כל אני מתחיל בפקודה ששולפת לי את כל הקבצים בתיקייה הזאת.
Get-ChildItem, שזה כמו dir לתיקייה מסוימת. במקרה הזה יש אחד, אבל אני עושה כאילו יש הרבה ועכשיו אני אומר לו עבור כל קובץ שיש בתיקייה הזאת תריץ לולאת foreach, תעבור אחד אחד ועבור כל אחד תריץ פקודה Get-WindowsEvents.
הפקודה הזאת אני אומר לה path מינוס, מאיפה לקחת את האירועים של Windows, והסימן הזה זה אומר מהשורה הנוכחית. למעשה זה ישלוף לי את כל האירועים שקיימים בכלל הקבצים.
אם היו לי פה עשרים קבצים, הוא היה שולף לי את כל האירועים מכל הקבצים. עובר קובץ קובץ ושולף את כולם. בואו נריץ את הפקודה הזאת. אנחנו רואים שיש לנו פה המון המון אירועים.
עכשיו אנחנו רוצים לסנן רק את האירועים של הזרקה, ואם אתם זוכרים ב-Sysmon אמרנו שאירוע של הזרקה זה אירוע מספר שבע. אם לא זוכרים את זה בעל פה אפשר ללכת לגוגל. דרך אגב, איך ידעתי שזה Sysmon בכלל?
בואו נעצור את זה ונגיד לו פה MaxEvents אחד. תשלוף לי אירוע אחד מכל יומן, מכל קובץ שיש בתיקייה. אחרי שהוא שולף את הכול תעשה לי Format-List כוכבית.
ת-תציג לי את זה כרשימה. אז הוא למעשה שולף אירוע אחד ומציג לי אותו לא כטבלה אלא כרשימה של שדות, ויש לי יותר מקום על המסך לגובה מאשר לרוחב, ואנחנו יכולים לראות פה שה-Provider Name זה Sysmon.
ככה אני יודע שהקובץ הזה נוצר על ידי Sysmon, ושאלו אותי על חטיפה. אז אני הולך ל-Sysmon. אה, אין לי פה גוגל כי זה מכונה מבודדת. אני הולך לגוגל ובודק איזה אירוע זה של חטיפה.
דיברנו על זה לפני כן. זה אירוע מספר שבע. אירוע מספר שבע זה אירוע של הזרקה של DLL. גם החטיפה זה למעשה הזרקת DLL. הבעיה היא שאם אני אשלוף עכשיו את כל האירועים שהם עם ID שבע, הוא ייתן לי גם את האירועים הלגיטימיים, גם את ה-DLL-ים הנורמליים, הלגיטימיים שהתוכנות מעלות, כי ID שבע זה call upload של כל DLL.
דרך אגב, שימו לב איך אני עושה את זה. אני עובר object object ברשימת הקבצים. זאת אומרת עובר קובץ קובץ, ועבור כל קובץ אני שולף את כל האירועים שיש לו ומסנן אותם עם Where-Object.
ה-Where-Object הזה עובר על אירוע אירוע בתוך כל אחד מהיומנים ובודק שהאירוע הנוכחי המזהה שלו הוא שבע. אז הדבר הזה מתייחס עכשיו ל-Where-Object, לשורה שורה, וזה מתייחס לקובץ קובץ.
ובואו נראה, ואנחנו רואים פה המון אירועים עם מספר שבע. אתם יודעים מה? בואו נקל על עצמנו ונתרכז בפקודה יותר פשוטה.
נעשה אותה יותר פשוט עם קובץ אחד בלבד ב-path. הבנתם שאפשר במקום path לעשות foreach שרץ על כל הקבצים בתיקייה. עכשיו אני רוצה שיהיה יותר ברור, אז אני עושה פקודה פשוטה ששולפת רק יומן אחד, אירוע אחד, ובתוך האירוע הזה אני רוצה שיהיה ID שבע.
רק שאתם יודעים מה אני אעשה את זה לא פה. שישלוף הכול, יעביר ל-Where ו-Format-List כוכבית סתם. עכשיו אני רואה את כל השדות. מה שמעניין אותי זה איך לזהות חטיפה.
לדוגמה פה במקרה הזה אתם רואים קובץ DLL שתוכנה כלשהי טוענת. איך אני יודע אם זה DLL שחטפו אותו או לא? האם זה DLL לגיטימי או לא? והתשובה היא בחתימה על הקובץ אתם רואים הוא