PracticU

זיהוי חטיפת DLL

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

זיהוי חטיפת DLL
תרגיל חקירה: איתור חטיפת DLL (DLL Hijacking) מתוך קבצי יומן, בעזרת חתימה דיגיטלית ו-PowerShell 7.
מה זה חטיפת DLL ואיך מאתרים אותה
1. העיקרון: תוכנה לגיטימית מעדיפה DLL שנמצא לידה בתיקייה על פני DLL במקום אחר. תוקף מנצל זאת ושם DLL זדוני משלו באותו מקום, כך שהתוכנה הלגיטימית "טוענת" אותו בלי לדעת.
2. מציאת היומן הרלוונטי: Get-ChildItem + ForEach-Object + Get-WindowsEvent -Path עוברים על כל קבצי היומן בתיקייה. -MaxEvents 1 ו-Format-List * על אירוע ראשון מגלים את שדה Provider Name, שמראה שהיומן נוצר על ידי Sysmon.
3. מספר האירוע הרלוונטי: טעינת DLL מתועדת ב-Sysmon כאירוע מספר 7, אבל זה כולל גם טעינות לגיטימיות - צריך סינון נוסף.
4. הסימן המבחין - חתימה דיגיטלית: DLL זדוני שמשמש לחטיפה בדרך כלל לא חתום דיגיטלית (Signed: false), בשונה מ-DLL לגיטימי של יצרן ידוע. סינון לפי Event ID 7 וגם היעדר "Signed true" בתוך ההודעה מצמצם את הרשימה לאירועים חשודים.
5. PowerShell 7 מקצר את העבודה: בגרסה 6 ומעלה אפשר לכתוב תנאי ישירות על שדה Signed -eq $false במקום לחפש מילים בתוך טקסט חופשי - מדויק יותר כי אין סיכון שמילה דומה תבלבל את הסינון.
6. זיהוי התוכנה שנחטפה: מתוך שדה ה-Message של האירוע החשוד אפשר לראות איזה קובץ exe טען את ה-DLL הלא חתום - זו התוכנה שסבלה מהחטיפה.
שימו לב
חיפוש לפי מילה בתוך טקסט (כמו "Signed true") פחות מדויק מסינון לפי שם שדה ממשי, כי מילה דומה באמצע ההודעה עלולה לבלבל את התוצאה.
הסטודנט יודע עכשיו לשלב Event ID וחתימה דיגיטלית כדי לאתר חטיפת DLL מתוך יומני Sysmon.
השיעור הבא בקורס: זיהוי הזרקת Powershell חלק 1

פרקי ההרצאה: זיהוי חטיפת DLL

  1. 00:00

    תחקור אירוע וזיהוי חטיפת DLL

  2. 01:16

    מעבר ל-PowerShell 7

  3. 02:11

    שליפת הקבצים עם Get-ChildItem

  4. 03:05

    זיהוי שהיומן נוצר על ידי Sysmon

  5. 04:01

    סינון אירועי טעינת DLL מספר שבע

  6. 04:56

    צמצום לקובץ אחד

  7. 05:34

    זיהוי חטיפה לפי החתימה על הקובץ

תמלול ההרצאה: זיהוי חטיפת DLL

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

  1. 00:02

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

  2. 00:16

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

  3. 00:32

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

  4. 00:56

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

  5. 01:07

    אני נכנס לתיקייה ורואה שיש לי פה event log אחד. אין לי הרבה לוגים, עשו לי חיים קצת יותר קלים. עקרונית אני אראה לכם מה הייתי עושה אם היו פה הרבה קבצי log.

  6. 01:17

    ככה נסבך לעצמנו את החיים. קודם כל אני פותח Powershell 7, שעדכנתי אותו מתוך האתר של Microsoft. אתם רואים, יש לי פה MSI שהורדתי מאתר של Microsoft עם Powershell 7 ואני רוצה לעבוד איתו כי יש לו יכולת לסנן באופן דינמי שדות שהם לא קבועים ב-event-ים.

  7. 01:39

    זאת אומרת, השדות שמתחלפים בין event ל-event, אפשר לציין אותם בצורה ישירה ב-Powershell 7, אבל לא בגרסה המובנית בגרסה חמש. אני יוצא לתיקייה הראשית ומנקה את המסך שלי ואני בתוך Powershell 7.

  8. 01:54

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

  9. 02:11

    Get-ChildItem, שזה כמו dir לתיקייה מסוימת. במקרה הזה יש אחד, אבל אני עושה כאילו יש הרבה ועכשיו אני אומר לו עבור כל קובץ שיש בתיקייה הזאת תריץ לולאת foreach, תעבור אחד אחד ועבור כל אחד תריץ פקודה Get-WindowsEvents.

  10. 02:28

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

  11. 02:43

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

  12. 02:55

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

  13. 03:11

    בואו נעצור את זה ונגיד לו פה MaxEvents אחד. תשלוף לי אירוע אחד מכל יומן, מכל קובץ שיש בתיקייה. אחרי שהוא שולף את הכול תעשה לי Format-List כוכבית.

  14. 03:23

    ת-תציג לי את זה כרשימה. אז הוא למעשה שולף אירוע אחד ומציג לי אותו לא כטבלה אלא כרשימה של שדות, ויש לי יותר מקום על המסך לגובה מאשר לרוחב, ואנחנו יכולים לראות פה שה-Provider Name זה Sysmon.

  15. 03:38

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

  16. 03:52

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

  17. 04:17

    דרך אגב, שימו לב איך אני עושה את זה. אני עובר object object ברשימת הקבצים. זאת אומרת עובר קובץ קובץ, ועבור כל קובץ אני שולף את כל האירועים שיש לו ומסנן אותם עם Where-Object.

  18. 04:31

    ה-Where-Object הזה עובר על אירוע אירוע בתוך כל אחד מהיומנים ובודק שהאירוע הנוכחי המזהה שלו הוא שבע. אז הדבר הזה מתייחס עכשיו ל-Where-Object, לשורה שורה, וזה מתייחס לקובץ קובץ.

  19. 04:47

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

  20. 04:56

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

  21. 05:17

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

  22. 05:29

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

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

ההרצאה הקודמת: פקודת Get-WinEvent - חיפוש בתוך הקבצים בדיסק

ההרצאה הבאה: זיהוי הזרקת Powershell - חלק 1

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

  • יצירת DLL - חלק 1
  • חטיפת RDP Session - שרת 2016 - חלק 1
  • זיהוי מגע באנדרואיד
  • זיהוי משתמשים - identity awareness - חלק 1

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

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