הMalware Analysis Triage הינו תהליך אומנותי, ארוך ומורכב, המצריך מיומנויות רבות, אורך רוח וחשיבה יצירתית. על-מנת לדמות לתוכנה הזדונית סביבת רשת פעילה בעת ביצוע תהליך ניתוח דינאמי גם ללא מעבר לרשת האינטרנט, נוצרו עם השנים כלים רבים שתפקידם לבצע הדמיית רשת וסימולציית אינטרנט.
למה זה חשוב? בסופו של דבר, גם אם יצרנו רשת מבודדת במכונה הוירטואלית בה אנו חוקרים את התוכנה הזדונית, חשיפה של התוכנה הזדונית לאינטרנט פירושה קישור בין התוכנה הזדונית לרשת שלנו. גם אם הקישור נראה בטוח, זהו עדיין סיכון.
תוכנות זדוניות רבות פועלות כDropper ומורידות קבצים נוספים למחשב, אחרות מתבססות על תקשורת אמינה מול שרת הC&C ורק במקרה כזה פועלות. היכולת שלנו לדמות תקשורת אינטרנט אמינה גם ללא חיבור אמיתי לאינטרנט היא חשובה מאד לביצוע תהליך ניתוח נוזקות מקיף וייסודי.
יודגש: המדריך מיועד אך ורק עבור אנשי סייבר אתיים ולמטרות אתיות בלבד. חל איסור מוחלט לבצע פעולה בלתי חוקית בעזרת מדריך זה וכל פעולה לא חוקית שתתבצע הינה על אחריותו הבלעדית של המבצע.
Fakenet-NG
Fakenet-NG הוא כלי קוד פתוח המשמש להדמיית רשת אשר תוכנן בעיקר עבור סביבות Windows ומהווה חלק מחבילת הכלים של Flare. את הכלי ניתן להוריד מהRepo הרשמי בGithub, כאן.
Fakenet-NG מורכב ממספר מודלים העובדים יחד. המודל החשוב ביותר הוא Diverter, אשר מאלץ יישומים להפנות את תנועתם לFakenet, כאשר הוא מתחזה לשירות/שרת אליו הם רצו לפנות ומחזיר תגובה בשמו. מודל קריטי נוסף הוא הListener. מודל זה אחראי על קבלת התעבורה מהתוכנה הזדונית ועל דימוי פרוטוקול הרשת הרלוונטי. לדוגמא, מאזין HTTP עשוי לספק סטטוס קוד 200 לכל בקשה (להשיב בחיוב בכל בקשה), מאזין DNS עשוי לפתור את כל בקשות הדומיין למארח המקומי וכו'. המטרה היא לספק תגובות אמינות לתוכנה הזדונית בהתבסס על בקשות הרשת שלה.
על-מנת להריץ את Fakenet, נפתח את הCMD בתיקייה בו הוא רץ תחת הרשאות Administrator ונריץ את קובץ הEXE:
כעת כל פנייה, בכל פרוטוקול רשת שתגיע אלינו, תיענה ע"י Fakenet. לדוגמא, כאשר התוכנה הזדונית תבצע בקשת GET לקובץ EXE, היא תקבל קובץ EXE בתגובה. קובץ זה מגיע מתיקיית defaultFiles, המכילה את קבצי ברירת המחדל שFakenet יחזיר. בואו ניתן הצצה לתיקייה:
כפי שניתן לראות, Fakenet תומך במספר גדול של פורמטים כברירת מחדל. בואו נראה מהי קובץ הHTML שהתוכנה מחזירה כברירת מחדל. נבצע פנייה בדפדפן לכתובת כלשהי ונוכל לראות שFakenet גם מבצע פעולת DNS ומתרגם את הכתובת שהזנו לכתובת בה הוא משתמש וגם מחזיר לנו קובץ HTML.
מספר הפורמטים שFakenet תומך בהם הוא אומנם גדול, אבל לא מספיק. זה אומר שאם אנו מזהים בשלב הניתוח הסטטי שהתוכנה עלולה לבקש פורמטים נוספים, כמו קובץ PS או שהתוכנה מחפשת קובץ EXE אשר מבצע פעולה ספציפית, עלינו לעדכן תיקיית הDefaultFiles בקובץ הרלוונטי.
באותו הקשר, כאשר התוכנה הזדונית משתמשת בפרוטוקולים בינאריים מותאמים אישית ומצפה לקבל רצפי בתים ספציפיים ולא קובץ בינארי סתמי, Fakenet תחזיר כמענה את אותם הנתונים שהיא קיבלה. אם אנו רוצים יותר מזה, עלינו להתאים את תגובת הTCP/UDP ולהתאים את קובץ הקונפיגורציה כפי שנלמד בהמשך.
לפני שנבין כיצד לעבוד עם קובץ הקונפיגורציה, בואו נבין כיצד Faketnet פועל. כברירת מחדל, Fakenet מוגדר להאזין לפרוטוקולים הבאים: FTP בפורט 21, DNS בפורט 53 (רק בUDP כמובן), HTTP בפורט 80, HTTPS בפורט 443, SMTP בפורט 25, POP בפורט 110. בפורט 1337 מאזין Faknet הן בUDP והן בTCP לשירות Raw Binary Listener, השירות שמטפל בכל התקשורת הלא מוגדרת. קיימים עוד מספר פורטים שFakenet עובד איתם ונוכל לראות אותם בקובץ הקונפיגורציה.
דבר נוסף שחשוב לדעת הוא שכברירת מחדל יש שירותים שfakenet מתעלם מהם ומעביר אותם ליעד האמיתי, זאת על-מנת לתת מענה מלא לתוכנות הזדוניות בפניות שלא ניתן לזייף. נוכל לראות את השירותים ולהוסיף אליהם שירותים נוספים בקובץ הקונפיגורציה, תחת מקטע הDiverter:
כמו הBlackList אשר מאפשר לנו להתעלם משירותים, קיים גם Waitlist שמאפשר לנו להגדיר שירותים ספציפיים שרק כלפיהם תתבצע ההאזנה, כאשר כלל השירותים במחשב יעברו כרגיל.
לאחר הקדמה זו, בואו נפתח את קובץ הקונפיגורציה (default.ini) שנמצא בתיקיית הconfig, שם נוכל לראות את ההגדרה של כל אותם פורטים שFakenet מאזין להם ולהתאים אותם בהתאם לצורך שלנו.
זוהי לדוגמא ההגדרה שלנו לפורט 1337, בה Fakenet מטפל בכל התקשורת הלא מוגדרת:
על-מנת לשנות את תגובת ברירת המחדל (החזרת הנתונים שFakenet קיבלה), נסיר את ההערה משורת הCustom. לאחר מכן, נעבור לבצע שינויים בקובץ sample_custom_response.ini אליו default.ini קורא.
לקובץ הcustom_response נכניס את התוכן הבא:
[ExampleTCP]
InstanceName: RawTCPListener
ListenerType: TCP
TcpRawFile: raw_response.txt
כעת ניצור קובץ בשם raw_response.txt ונכניס לו את התוכן שאנו רוצים להחזיר.
בצורה דומה, קיים בקובץ custom_reponse מקטע המיועד למקרים בהם אנו רוצים להחזיר תגובה דינאמית. במקרים כאלה נשתמש בPython ובקובץ CustomProviderExample.py. הפונקציות שמעניינות אותנו בקובץ הן HandleTcp וHandleUdp. בואו נסתכל על HandleTcp:
ע"י הרצת פונקציה זו, נוכל בכל פעם להחזיר תגובת TCP מותאמת אישית, בהתאם לדרישות התוכנה הזדונית. כמובן שלחלופין נוכל להגדיר מראש מספר ספציפי של אופציות תגובה ולהכניסם לקוד.
בצורה דומה, באמצעות קובץ הקונפיגורציה נוכל להתאים פרוטוקולים נוספים, כגון שינוי גם של תגובת HTTP (לדוגמא, במקרים בהם התוכנה הזדונית שולחת בקשת GET לקבלת Nonce ונרצה להחזיר לה Nonce מדומה וכו'). כמו-כן, נוכל להגדיר פניות HTTP או אחרות שייכנסו לProcessBlackList – שירותים אליהם Fakenet לא יגיב שכן הם שירותי מערכת לגיטימיים של Windows שהתייחסות אליהם רק תפריע לתהליך המחקר (בשונה ממקטע הBlacklists בהDiverter עליו דיברנו, מקטע שמאפשר הכנסה מלאה של תהליך לBlacklist. מקטע הBlacklist עליו אני מדבר בפסקה זו מתייחס להכנסת תעבורת פרוטוקול ספציפי בתהליך לBlacklist ולא את כל תעבורת התהליך):
דרך נוספת ליצור תגובה מותאמת אישית דינאמית, זאת מבלי שימוש בקובץ הקונפיגורציה, היא שימוש בNcat (או Netcat, גרסת המקור לחובבי וינטג') ויצירת מאזין בפורט הרלוונטי, בו אנו רוצים לשלוט באופן דינאמי. בדוגמא זו יצרתי מאזין לפורט 2020 וביצעתי קריאה לפורט זה:
פענוח תעבורת SSL עם Fakenet בעת הדמיית רשת
כאשר התוכנה הזדונית יוצרת תקשורת מאובטחת בפורט 443 עם שרת הC&C, נרצה ליצור מאזין MITM שיתקשר עם התוכנה הזדונית ויעביר למאזין שלנו את התקשורת המפוענחת. Fakenet לא תומך בכך כברירת מחדל וללא הגדרה ישירה יתייחס לתעבורת HTTPS כתקשורת TCP סטנדרטית ויגיב לה כתקשורת כזו, אך לא יפענח אותה. פענוח שרלוונטי הן למתן "תגובה" טובה יותר לתוכנה הזדונית והן להבנת פעילות התוכנה הזדונית.
על-מנת להגדיר את Fakenet לשמש כMITM, נפתח את קובץ הקונפיגורציה ונשנה מFalse לTrue את מקטע הHTTPListener443:
שיפורים משמעותיים בגרסה החדשה של fakenet
בגרסת Alpha חדשה של fakenet שיצאה לפני כחודש בלבד, מוצגים מספר שיפורים משמעותיים בכלי, כשבראשם היכולת לעבוד מול פלט אינטראקטיבי מבוסס HTML שיציג לנו את התעבורה שזוהתה.
כעת, בסיום ביצוע תהליך ההאזנה עם fakenet עם לחיצת ctrl + c, נקבל לא רק קובץ pcap המסכם את תהליך ההאזנה, אלא גם פלט HTML אינטראקטיבי המאפשר ביצוע חיפוש וצפייה מעמיקה בנתונים.
לדוגמא, כאשר לחצתי על עמודת התהליך spoolvs.exe (תהליך מערכת בwindows המטפל בהדפסות), קיבלתי תיעוד של בקשת הPOST שביצע השירות והיעד המקורי אליו הוא פנה. הNBI אותו אתם רואים זהו קיצור של Network-Based Interception, ההגדרה בFakenet לנתונים שזוהו:
יש לציין שלחיצה על כפתור הcopy תעתיק את הנתונים בפורמט markdown.
הערה לסיום: על-אף שהרצת Fakenet במחשב המשמש אתכם גם לגלישה באינטרנט ולא למעבדת ניתוח בלבד, אינה רצוייה ואינה מומלצת כלל. אם עשיתם זאת, שימו לב שייתכן והגדרת הDNS שלכם במחשבשונתה להגדרה סטטית של כתובת שירות הFakenet ועל כן סביר שלא תוכלו לגלוש באינטרנט גם לאחר שכיביתם את הFakenet. על-מנת לשנות זאת, עליכם להיכנס לממשק הרשת ולהתאים את הגדרות הDNS.
Inetsim
כלי נוסף אשר משמש להדמיית רשת וכדאי להכיר הוא Inetsim. זהו כלי עם פחות פונקציונליות משמעותית מFakenet-ng, אך פעמים שהוא יכול להיות נוח יותר לעבודה בסביבות לינוקס ועל כן אתייחס אליו בקצרה.
ההפעלה בInetsim היא פשוטה גם-כן ונוכל לבצע אותה ע"י הרצת שם הכלי: inetsim.
כפי שניתן לראות, מופיעה לנו רשימת השירותים שInetsim מתחזה אליהם וכברירת מחדל, שירות הDNS הוא לא חלק מאחד מהם. ע"מ לוודא את הפעלתו, נפתח את קובץ הקונפיגורציה בנתיב etc/inetsim/inetsim.conf/ ונסיר את סימון ההערה משורת הDNS (היכן שמופיע start_services_dns):