מאת Hunters Team Axon
צוות הציידים AXON חשף ועוקב באופן פעיל אחר מסע איומים מתמשך המכונה "VEILDrive". התגלה בתחילה במהלך חקירה של פעילות זדונית בתשתית של לקוח, VEILDrive ממנפת את חבילת ה-SaaS של מיקרוסופט - במיוחד Teams, SharePoint, Quick Assist ו-OneDrive - כדי בצע את הטקטיקות שלו באופן ייחודי, שחקן האיום משתמש בשיטת פקודה ושליטה (C&C) מבוססת OneDrive המוטמעת בתוכנה זדונית מותאמות אישית, שנפרסת בסביבות שנפרצו, מצביע על מקור רוסי סביר לקמפיין הזה, וצוות AXON התריע מאז על שניהם מיקרוסופט וארגונים מושפעים כדי לצמצם ניצול נוסף.
המחקר שלנו החל בספטמבר 2024 בעקבות תגובה למתקפה על ישות תשתית קריטית בארצות הברית. טכניקות ההתקפה של VEILDrive חורגות באופן מובהק מהתנהגות איום טיפוסית. הם מסתמכים במידה רבה על תשתית ה-SaaS של מיקרוסופט כדי להפיץ קמפיינים של ספייר פישינג ולאחסן תוכנות זדוניות. האסטרטגיה התלויה ב-SaaS מסבכת את הזיהוי בזמן אמת ועוקפת הגנות קונבנציונליות.
התוכנה הזדונית הקשורה ל-VEILDrive היא קובץ jar המבוסס על Java שבעיקר חסר ערפול, מה שהופך אותו לקריאה ובנוי היטב בצורה יוצאת דופן. למרות הפשטות שלה, התוכנה הזדונית התחמקה מזיהוי על ידי כלי זיהוי ותגובה של נקודות קצה (EDR) ברמה העליונה וכל מנועי האבטחה ב-VirusTotal. זה מדגיש סיכון קריטי: אפילו קוד לא מעורפל ופשוט יכול לחמוק ממנגנוני זיהוי מודרניים, מה שמצביע על צורך רחב יותר לבחון מחדש אסטרטגיות זיהוי בסביבות בסיכון גבוה.
דוח זה מספק תובנות על המתודולוגיות של VEILDrive ועל המגבלות של גישות הזיהוי הנוכחיות כדי לצייד טוב יותר את קהילת אבטחת הסייבר מפני איומים מתפתחים.
בספטמבר 2024, Team AXON הגיב לתקרית המכוונת לחברת תשתית קריטית בארצות הברית. חקירה זו חשפה מסע איומים ייחודי, "VEILDrive", שהציג טקטיקות, טכניקות ונהלים חריגים (TTPs) שחרגו באופן משמעותי מאלה הנראים בדרך כלל בתקריות דומות.
בהתבסס על הממצאים שלנו, אנו מעריכים כי קמפיין VEILDrive החל בתחילת אוגוסט 2024 ונשאר פעיל נכון לדוח זה. תוך מינוף שירותי Microsoft SaaS - כולל Teams, SharePoint, Quick Assist ו-OneDrive - התוקף ניצל את התשתיות המהימנות של ארגונים שנפגעו בעבר כדי להפיץ התקפות דיוג בחנית ולאחסן תוכנות זדוניות. אסטרטגיה ממוקדת ענן זו אפשרה לשחקן האיום להימנע מזיהוי על ידי מערכות ניטור קונבנציונליות.
יש לציין כי VEILDrive הציגה שיטת פקודה ושליטה (C&C) חדשה מבוססת OneDrive המוטמעת בתוכנות זדוניות מבוססות Java שנפרסו במכשירים שנפגעו. התוכנה הזדונית עצמה, קובץ jar, מציגה שתי תכונות בולטות:
מאפיינים אלה מדגישים שגם ללא טכניקות התחמקות מתוחכמות, תוכנות זדוניות מעוצבות בקפידה, שאינן מעורפלות, יכולות לחמוק מהגנות מודרניות. חקירה זו מדגישה פער באסטרטגיות הגילוי הנוכחיות ומדגישה את הצורך בדריכות נגד גישות תקיפה פחות קונבנציונליות.
צוות AXON שיתף את ממצאיו עם מיקרוסופט וארגונים שהשפיעו, והציע מודיעין בר-פעולה כדי להפחית את האיום המתמשך הזה.
בתחילת ספטמבר 2024, אחד מלקוחותיו של Hunters, המכונה להלן "Org C", הזמין את צוות AXON לתמיכה בטיפול באירוע פעיל. התיק התרכז במכשיר ספציפי בתוך Org C שנפגע באמצעות הנדסה חברתית.
משימה מתוזמנת שנוצרה באופן חשוד במכשיר של עובד Org C הפעילה התראה, מה שהוביל לחקירה נוספת. על ידי תיאום יומנים ותקשורת עם המשתמש המושפע, הצוות הבהיר את שיטת הגישה הראשונית.
להלן תרשים התקפה המספק סקירה ברמה גבוהה של זרימת ההתקפה:
רצף האירועים התפתח כך:
השחקן הזדוני מינף את Microsoft Teams כדי לשלוח הודעה לארבעה עובדים נבחרים ב-Org C, שפרט להיותם לא טכניים על סמך תפקידיהם, לא היה להם קשר ברור אחר. התוקף התחזה לחבר צוות IT וביקש גישה למכשיר של כל עובד באמצעות כלי השירות המרוחק Quick Assist .
במקום להשתמש בחשבון חדש שנוצר לצורך התחזות, התוקף השתמש בחשבון משתמש שנפגע מקורבן קודם פוטנציאלי, המכונה כאן "ארגון A".
יומני ביקורת M365 שימשו לזיהוי התחזות בחנית של Microsoft Teams.
זוהו אירועי " MessageSent " ו-" ChatCreated " מרובים, כולם מקורם במשתמש שנפגע בעבר של Org A , בבעלותו של שחקן האיום.
בעוד 4 עובדים היו ממוקדים, זוהה רק אירוע " MemberAdded " אחד המכוון למשתמש שנפגע בארגון A.
התובנה שלעיל הייתה מסקרנת ובעלת ערך כאחד, והדגישה את השכיחות הגוברת של דיוג באמצעות Microsoft Teams וכלי תקשורת דומים. הבחנה בין ניסיונות דיוג מוצלחים לכושלים באמצעות יומני ביקורת M365, לצד מתאם עם יומני EDR, יכולה להיות משמעותית ביותר עבור חקירות.
הודעות Microsoft Teams שהתקבלו על ידי המשתמשים הממוקדים של Org C התאפשרו הודות לפונקציונליות " גישה חיצונית " של Microsoft Teams, המאפשרת תקשורת אחד על אחד עם כל ארגון חיצוני כברירת מחדל.
התוקף פיתה בהצלחה את הקורבן של Org C להפעיל את הכלי Quick Assist של מיקרוסופט וסיפק להם את קוד הגישה באמצעות Microsoft Teams. זה הוביל לגישה אינטראקטיבית של שחקן האיום למחשב של הקורבן.
לאחר מכן, שחקן האיום שיתף קישור הורדה ל-SharePoint של ארגון נפרד (הקורבן היה שייך לדייר אחר מזה ששימש להתחזות דרך הצ'אט של Microsoft Teams, שאליו נתייחס כ'Org B'). קישור זה הכיל קובץ .zip מוגן בסיסמה בשם Client_v8.16L.zip, שכלל קבצים שונים, ביניהם כלי RMM נוסף.
הקובץ הורד, ככל הנראה באמצעים אינטראקטיביים, על ידי התוקף - שכבר מצויד בגישה מרחוק - הפועל תחת ההקשר של explorer.exe, המאפשר לו ללחוץ על הקישור ולהוריד כלים לפי הצורך.
ראוי להזכיר שבמהלך החקירה, תיאם את יומני הביקורת של M365, שסיפקו מידע מדויק על כתובות ה-URL הנכנסות בהודעות Microsoft Teams, עם טלמטריית ה-EDR של המארח של הקורבן כדי להבין את ה-TTPs של התוקף.
נעשו ניסיונות מרובים לבצע פעולות זדוניות ידניות באמצעות גישה מרחוק. פעילויות אלו כללו בעיקר מאמצי התמדה, כגון יצירת משימות מתוזמנות לביצוע שוב ושוב אחד מהקבצים שהורדו מהתוקף - כלי RMM בשם LiteManager ("ROMServer.exe").
schtasks /Create /TN "Perfomance monitoring" /SC MINUTE /TR C:\ProgramData\500000003\ROMServer.exe
בעקבות הפעילויות שלמעלה, השחקן מוריד ידנית קובץ .zip נוסף בשם Cliento.zip.
כמו בעבר, הקישור שותף בצ'אט בין המשתמש הקורבן לשחקן האיומים. קובץ ה-zip הזה כלל את תוכנת ה-.JAR הראשית וכן את כל ערכת הפיתוח של Java להפעלת תוכנת ה-.JAR.
שחקן האיום ביצע את התוכנה הזדונית .JAR באמצעות הפריטים הבאים: C:\\ProgramData\\Cliento\\jdk-22_windows-x64_bin\\jdk-22.0.2\\bin\\javaw.exe -jar C:\\ProgramData\\Cliento\\Cliento.jar
פעילויות רשת מרובות וביצוע פקודות זוהו בהקשר של קובץ ה-.JAR הזדוני, כולל:
מספר בקשות DNS יוצאות/פעילות רשת אל ← safeshift390-my.sharepoint.com
מספר בקשות DNS יוצאות/פעילות רשת אל ← graph.microsoft.com
מספר בקשות DNS יוצאות/פעילות רשת אל → login.microsoftonline.com
ביצוע פקודות ספירה מקומיות:
Systeminfo
net time
Get-WmiObject -Class
Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
{$_.interfacetype -eq \"USB\"}"
צילום המסך הבא מציג את החלקים העיקריים של עץ התהליך הקשורים לפעילויות זדוניות:
התוקף הוסיף גם JAR בינארי זדוני כ-runkey ברישום לביצוע מתמשך של תוכנת זדונית Java.
שורת פקודה:
Set-ItemProperty -Path \"HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" -Name \"current\" -Value \"C:\\ProgramData\\Cliento\\jdk-22_windows-x64_bin\\jdk-22.0.2\\bin\\javaw.exe -jar C:\\ProgramData\\Cliento\\Cliento.jar\" -ErrorAction Stop"
הבלימה ומיגור האירוע הזה היה מהיר ויעיל מאוד, ולפי הראיות הפורנזיות שהיו בידינו, אין כל אינדיקציה לכך שהתוקף הצליח לגרום נזק משמעותי למארח ולארגון הקורבן.
תובנה מרכזית אחת מזרימת התקיפה המפורטת לעיל היא שהתוקף השתמש בשירותים שונים של מיקרוסופט ידועים ונפוצים כחלק מהתקפתו, הן לצורך הסתרת עיניים ואפשר גם לנוחותם.
בואו נסכם במהירות את שירותי מיקרוסופט בשימוש על ידי שחקן האיום באמצעות הטבלה הבאה:
שֵׁרוּת | שׂוֹכֵר | מַטָרָה |
---|---|---|
צוותי מיקרוסופט | מארגון A לארגון C | Spear Phishing Messages כדי לפתות את הקורבן להוריד ולהפעיל את כלי הניהול מרחוק |
סיוע מהיר | Org C | שחקן האיום שולח קוד Quick Assist באמצעות הודעת Microsoft Teams כדי להשיג את השלט הרחוק הראשוני |
SharePoint | מ-Org B ל-Org C | קבצים זדוניים "מתארחים" בדייר SharePoint של Org B. קישורי הורדה משותפים עם Org C באמצעות הודעות SharePoint ונפתחים על ידי התוקף באמצעות Quick Assist |
API של גרף | מארגון C ל-N/A | היו לנו אינדיקציות לגישה זדונית ל-Microsoft Graph (graph[.]microsoft[.]com) ביוזמת ה-cliento.jar הזדוני. |
בשלב זה, זיהינו את ארבעת השירותים/אפליקציות של Microsoft שהוזכרו לעיל. למרות שהבנו את המטרה של שלושת הראשונים, הפעילות שהופנתה כלפי ה-API של Graph נותרה לא ברורה. היו לנו כמה הנחות לגבי המטרה הפוטנציאלית שלו, אבל בתגובה לאירוע, הנחות בלבד אינן מספיקות, נכון?
כדי לאסוף מידע נוסף ולהבין טוב יותר את התוכנה הזדונית .JAR 'Cliento.jar' ב-OneDrive/SharePoint - הן כדי להעריך פעולות פוטנציאליות שננקטו על ידי התוקף והן כדי לקבל תובנה לגבי כוונותיו - המשכנו בניתוח מפורט של התוכנה הזדונית.
השתמשנו ב-Java Decompiler בשם "JDGUI" כדי לפרק את התוכנה הזדונית Client.jar (קראנו בשם "ODC2").
רק מההסתכלות הראשונית ברמה הגבוהה על התוכנה הזדונית, נוכל לקשר אותה מיד עם ביצוע PowerShell שראינו בחקירת האירוע. זאת בשל הכללת חבילת " jPowerShell " Java - מעטפת PowerShell עבור Java.
בנוסף, יכולנו לראות חבילות נוספות כמו "פקודות", "חיבור", "מפעיל", "או להתחבר" וכו'. זה סיפק לנו הבנה ברמה גבוהה של מבנה התוכנה הזדונית.
התחלנו עם ה-Main.class תחת חבילת "משגר" ומצאנו קבוצה של אישורים מקודדים קשיחים המשמשים את התוכנה הזדונית. זה היה קצת מפתיע עבורנו, אבל מאוד מעניין.
על ידי ניתוח נוסף של התוכנה הזדונית (כפי שמתואר בניתוח המפורט למטה), מצאנו שהתוכנה הזדונית השתמשה באישורים אלה כדי לבצע אימות "מטעם" ל-Entra ID. כדי לבצע אימות זה, נעשה שימוש באסימון הרענון המקודד עם מזהה הלקוח ועם סוד הלקוח כדי לבקש אסימון גישה.
האימות אפשר לתוכנה הזדונית לגשת ל-OneDrive של משתמשי Entra ID ספציפיים, בדיירים שלכאורה בבעלותו של השחקן, תוך שימוש לרעה בגישה זו למטרות C2.
בפונקציה הראשית של Main.class נוכל לראות את נקודת הכניסה עצמה, הכוללת שרשורים מרובים. זה כולל את ביצוע הפונקציות "odThread1" ו-"mainThread1".
"odThread1" כולל את ההפעלה של הפונקציה "odRun" של הבקר שמקבלת את הסט הראשון של אישורים מקודדים (Refresh Token וכו') לצורך אימות.
הוא משתמש בכתובת ה-IP "40.90.196.221" להגדרת חיבור "odRun"
כתובת ה-IP "40.90.196.228" עבור "הפעלה" מאתחלת את שקע ה-HTTPS ל-C2 של התוקף. IP זה הוא גם ה-IP של Azure, וסביר מאוד שהוא מכונה וירטואלית. ערוץ C2 זה, כמפורט להלן, הוא "קלאסי" יותר ומוביל לביצוע פקודות PowerShell
כדי לקבל מידע נוסף על כתובות IP אלו, בדקנו משאבים ידועים כמו ipinfo.io ותגי השירות של כתובות IP של Azure שפורסמו על ידי Microsoft, כפי שמוצג בצילום המסך למטה:
ראוי גם להזכיר שכתובת ה-IP המקודדת הנוספת שנמצאה בתוכנה זדונית זו (38.180.136.85) נראית בבעלותו של ספק שירות אחר ומשויכת לשירותי אירוח. בהתבסס על התובנות שלנו, כתובת ה-IP הזו לא הייתה בשימוש פעיל על ידי התוכנה הזדונית. אנו מניחים שזה היה שם מסיבות מדור קודם (תשתית C2 קודמת).
על ידי חפירה קצת יותר עמוקה לתוך "mainThread1()" אשר מבצע את הפונקציה "ctrl.run()", אנו יכולים לראות שפונקציית run() מנסה ליצור חיבור ובודקת באופן שגרתי אם החיבור חי. לאחר מכן הוא מנסה "לנתח את הפקודה", לחתוך ממנו חלקים לא רלוונטיים.
פונקציית "הפעלה" זו משתמשת ב-"connect()" כדי להגדיר/לאפס חיבור. זה יוצר שקע לכתובת ה-IP המרוחקת שראינו למעלה - 40.90.196.228.
פונקציית "הפעלה" זו משתמשת ב-"CommandManager", הכוללת טיפולים שונים עבור סוגי הפקודות/היכולות השונות שמספקת תוכנה זדונית, כולל העברת קבצים מלקוח לשרת ומשרת ללקוח, דחיסת קבצים, צילומי מסך, סגירת חיבורי רשת, וכן, כמובן, ביצוע פקודה.
הוא בודק אם הפקודה שהתקבלה ריקה או אם התקבלה פקודה ממשית משרת C2.
אם נמצא פקודה, הוא מנתח אותה ומבצע אותה. הביצוע הוא בעצם בהקשר של PowerShell.
ביצוע הפקודה הנכנסת כפקודה של PowerShell מתבצע באמצעות המעטפת jPowerShell שהזכרנו קודם לכן.
לפני שמתעמקים בליבת הפונקציונליות של OneDrive C2, חשוב לציין שחלקים קריטיים בקוד של התוכנה הזדונית מסתמכים במידה רבה על שלושה 'סוגים' ספציפיים של קבצי OneDrive: UUID, cf_UUID ו-rf_UUID. כפי שנצפה בחקירה שלנו, הפקודה Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
הופעל, חושף את UUID של חומרת ההתקן. מזהה ייחודי זה משמש להבחין בין כל קורבן בקמפיין VEILDrive.
כל סוג קובץ ממלא תפקיד מובהק בפעולות התוכנה הזדונית. צילום המסך הבא מספק דוגמאות לקבצים אלה ולתפקידיהם העיקריים בביצוע תוכנות זדוניות.
בואו נצלול לתוך זרימת הפונקציונליות של OneDrive C2 וכיצד נעשה שימוש בקבצי UUID אלה בפועל:
בנוסף ליכולות הקלאסיות של ביצוע מרחוק מעל PowerShell, הפונקציה "odRun" אחראית על שרשור נוסף המבוסס על "OneDrive" כערוץ תקשורת. זהו החלק הייחודי של תוכנה זדונית זו.
ה-"odRun" כפי שאנו רואים אותו, נקרא כנראה על שם "OneDrive" (OneDriveRun), וכולל יצירת חיבור OneDrive באמצעות הפונקציה "Odconnect" כשלב ראשון:
כפי שאתה יכול לראות, תחילה מחרוזת "machineUUID" מוגדרת כמחרוזת ריקה. ואחריו ביצוע הפונקציה "getMachineUUID()", שהיא, כפי ששמה מרמז, מקבל את ה-UUID Machine של המכשיר הקורבן:
לאחר מכן נוכל לראות שהחיבור של OneDrive מתבצע באמצעות הפונקציה "OdConnect" - החיבור מתבצע אל "login[.]microsoftonline[.]com" ליצירה/עדכון של קבוצה של אסימוני גישה חדשים ואסימוני רענון .
"checkFile": פונקציה זו בודקת אם יש קובץ בשם == machineUUID בתיקיית הבית של המשתמש הנוכחי OneDrive
קובץ OneDrive שנקרא על ידי המכונה UUID של המכשיר (ללא קידומות).
התוכן של קובץ cf_MachineUUID יבוצע.
לאחר מכן שוב על ידי כתיבת קובץ ל-OneDrive, באמצעות " writeFileToOneDrive ", תחילה "rf_" + machineUUID, עם התוכן של תגובת הביצוע.
ושימוש נוסף ב- " writeFileToOneDrive ", כדי לכתוב ולרוקן קובץ "cf_", בעצם מונע ביצוע נוסף של אותה פקודה (מאחר שהתוכנה הזדונית פועלת בלולאה).
לסיכום קצר, נראה שלתוכנה זדונית זו יש שני ערוצי C2 שונים איתם היא יכולה לעבוד:
HTTPS Socket C2 : גישה קלאסית יותר, קבלת פקודות מ- Azure VM מרוחק וביצוען בהקשר של PowerShell.
C2 מבוסס OneDrive : זה יותר ייחודי, והדרך שבה זה עובד קצת יותר מורכבת ויצירתית. הוא כולל שלושה קבצים שונים, שכולם כוללים את UUID של מכשיר הקורבן, חלקם עם קידומות (rf_ ו-cf_). כדי להקל על שחקן האיום לשלוח פקודות ולקבל אותן באמצעות Microsoft Graph.
הערה : חשוב להזכיר שלתוכנה זדונית זו יש יכולות נוספות מלבד ביצוע הפקודה הרגילה, כולל העברת קבצים. עם זאת, המידע המפורט לעיל מתמקד בהיבט ביצוע הפקודה בלבד.
בשלב זה, ברור שהתקפה זו שילבה במיומנות טכניקות פשוטות עם טקטיקות מתוחכמות וייחודיות. מאפיין אחד בולט מהחקירה הראשונית שלנו היה השימוש הנרחב בתשתית ובשירותים של מיקרוסופט המשולבים לאורך הקמפיין.
לאחר ניתוח התוכנה הזדונית ותיאום המידע החדש עם תובנות החקירה שלנו, השגנו הבנה ברורה יותר לגבי השימוש של התוקף בשירותים שונים ומטרותיהם. גילינו שהשימוש בשירותים ובתשתית של מיקרוסופט היה נרחב אפילו יותר ממה שהושג בתחילה.
ראה את הטבלה שלהלן לסיכום קצר:
שֵׁרוּת | שׂוֹכֵר | מַטָרָה |
---|---|---|
צוותי מיקרוסופט | מארגון A לארגון C | Spear הודעות דיוג כדי לפתות את הקורבן להוריד ולהפעיל כלי ניהול מרחוק |
סיוע מהיר | Org C | שחקן האיום שולח קוד Quick Assist באמצעות הודעת Microsoft Teams כדי להשיג את השלט הרחוק הראשוני |
SharePoint | מ-Org B ל-Org C | קבצים זדוניים "מתארחים" אצל דייר SharePoint של Org B. קישורי הורדה משותפים עם Org C באמצעות הודעות SharePoint ונפתחים על ידי התוקף באמצעות Quick Assist |
Azure VM | תשתית של התוקף | התוכנה הזדונית תקשרה עם Azure Virtual Machine בבעלות שחקן האיום למטרות HTTPS Socket C2 |
OneDrive (גרף API) | בין מארח OneDrive ו-Org C של התוקף | שחקן האיום השתמש ב-OneDrive כערוץ C2 נוסף, כדי לקבל יכולות כמו ביצוע מרחוק של פקודות, צילום צילומי מסך, הורדה/העלאה של קבצים וכו'. התמקדות במארחים של ארגון C. |
רישום אפליקציות Azure AD | בין מארח OneDrive ו-Org C של Attacker | האפליקציה שימשה לאימות מטעם חשבון משתמש Azure AD בבעלות השחקן, וגישה לתיקיית הבית של OneDrive שלו |
C5f077f6-5f7e-41a3-8354-8e31d50ee4d
893e5862-3e08-434b-9067-3289bec85f7d
B686e964-b479-4ff5-bef6-e360321a9b65
2c73cab1-a8ee-4073-96fd-38245d976882
SafeShift390[.]onmicrosoft[.]com
GreenGuard036[.]onmicrosoft[.]com
a515634efa79685970e0930332233aee74ec95aed94271e674445712549dd254
1040aede16d944be8831518c68edb14ccbf255feae3ea200c9401186f62d2cc4
7f61ff9dc6bea9dee11edfbc641550015270b2e8230b6196e3e9e354ff39da0e
d6af24a340fe1a0c6265399bfb2823ac01782e17fc0f966554e01b6a1110473f
7f33398b98e225f56cd287060beff6773abb92404afc21436b0a20124919fe05
40.90.196[.]221
40.90.196[.]228
38.180.136[.]85
213.87.86[.]192
בנוסף ל-IOC הספציפיים שהוזכרו לעיל, יצרנו שאילתות מרובות לציד איומים שניתן להשתמש בהן כדי לזהות התקפות שמקורן באותו שחקן, שבוצעו תחת אותו קמפיין, או חולקות מאפיינים דומים (TTPs)
הערה: מסגרת הזמן המומלצת לציד עבור VEILDrive היא מיולי 2024.
היגיון שאילתה: במהלך הניתוח שלנו, זיהינו שכלי הגישה מרחוק (RAT) של התוקף השתמש ב-Powershell כדי להביא את UUID של המחשב כחלק מתהליך הביצוע שלו. שאילתה זו מזהה מקרים חריגים של Powershell שהולידה על ידי javaw.exe עם דגלי שורת הפקודה הספציפיים המשמשים את שחקן האיום.
שְׁאֵלָה:
SELECT EVENT_TIME, AGENT_ID, PARENT_PROCESS_NAME, PARENT_PROCESS_COMMANDLINE, INITIATING_PROCESS_NAME, INITIATING_PROCESS_COMMANDLINE, TARGET_PROCESS_NAME, TARGET_PROCESS_COMMANDLINE, TARGET_PROCESS_OS_PID FROM INVESTIGATION.EDR_PROCESS_CREATION_EVENTS WHERE 1=1 AND PARENT_PROCESS_NAME ILIKE '%javaw%' AND INITIATING_PROCESS_NAME ILIKE '%cmd%' AND TARGET_PROCESS_NAME ILIKE '%powershell%' AND TARGET_PROCESS_COMMANDLINE ILIKE 'powershell.exe -ExecutionPolicy Bypass -NoExit -NoProfile %' AND EVENT_TIME > current_timestamp - interval '60d'
היגיון שאילתה: שאילתה זו מזהה מופעים של משימה מתוזמנת שנרשמת עם ביצוע של כלי ROM המשמש את שחקן האיום להתמדה.
שְׁאֵלָה:
SELECT EVENT_TIME AS EVENT_TIME, AID AS AGENT_ID, CID AS COMPUTER_ID, EVENT_SIMPLE_NAME AS EVENT_NAME, RAW:TaskName AS TASK_NAME, RAW:TaskExecCommand AS TASK_EXEC_COMMAND, RAW:TaskAuthor AS TASK_AUTHOR, RAW:UserName AS USER_NAME --- Adjust according to your EDR of choice FROM RAW.CROWDSTRIKE_RAW_EVENTS WHERE EVENT_SIMPLE_NAME = 'ScheduledTaskRegistered' AND TASK_EXEC_COMMAND ILIKE '%romserver%' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '60d'
SET YOUR_ORGANIZATION_NAME = 'hunters'; SELECT EVENT_TIME, ORGANIZATION_ID AS ORG_ID, OPERATION AS EVENT_TYPE, SPLIT_PART(LOWER(SPLIT_PART(USER_ID, '@', 2)), '.', 1) AS SENDER_ORG_DOMAIN, RECORD_SPECIFIC_DETAILS:message_ur_ls AS MESSAGE_URLS, WORKLOAD AS WORKLOAD, USER_ID AS USER_ID, RECORD_SPECIFIC_DETAILS:chat_thread_id AS CHAT_THREAD_ID, RECORD_SPECIFIC_DETAILS:communication_type AS COMMUNICATION_TYPE, RECORD_SPECIFIC_DETAILS:members[0].DisplayName AS MEMBER_DISPLAY_NAME, RECORD_SPECIFIC_DETAILS:members[0].UPN AS MEMBER_UPN, RECORD_SPECIFIC_DETAILS:members[0] AS MEMBERS, RECORD_SPECIFIC_DETAILS:resource_tenant_id AS RESOURCE_TENANT_ID, RECORD_SPECIFIC_DETAILS FROM RAW.O365_AUDIT_LOGS WHERE NOT USER_ID ILIKE '%' || $YOUR_ORGANIZATION_NAME || '%' AND (NOT (MESSAGE_URLS ILIKE '%' || SENDER_ORG_DOMAIN || '%') AND MESSAGE_URLS ILIKE '%sharepoint%') AND NOT MESSAGE_URLS ILIKE '%' || $YOUR_ORGANIZATION_NAME || '%' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '60d'
היגיון שאילתה: השאילתה הבאה מזהה הודעות שנשלחו בצ'אט אחד על אחד על ידי משתמשים חיצוניים מתחומים שאינם נפוצים. השאילתה מסננת דומיינים בשימוש נרחב בהתבסס על פעילות היסטורית ומזהה חברים חיצוניים שנוספו לצ'אטים ועשויים לבצע התקפות פישינג.
שְׁאֵלָה:
SET YOUR_DOMAIN_NAME = 'hunters'; --- GET EXTERNAL TEAMS AND ONEDRIVE USERS OF THE LAST 3 MONTHS - TO CLEAN EXTENSIVELY USED DOMAINS WITH COMMONLY_USED_DOMAINS AS ( SELECT LOWER(SPLIT_PART(USER_ID , '@', 2)) AS DOMAIN_COMMONLY_USED, MIN(EVENT_TIME) AS MIN_EVENT_TIME, MAX(EVENT_TIME) AS MAX_EVENT_TIME, ARRAY_AGG(DISTINCT OPERATION) AS OPERATIONS, COUNT(*) AS COUNTER FROM RAW.O365_AUDIT_LOGS WHERE WORKLOAD IN ('MicrosoftTeams', 'OneDrive') AND EVENT_TIME > CURRENT_TIMESTAMP - interval '90d' AND USER_ID ILIKE '%@%' GROUP BY DOMAIN_COMMONLY_USED HAVING COUNTER > 20 ), ---- Get List of External Domains that recently communicated with our organization using Microsoft Teams LATEST_EXTERNAL_DOMAINS AS ( SELECT USER_ID AS LATEST_EXT_USERS, LOWER(SPLIT_PART(USER_ID , '@', 2)) AS USER_DOMAIN, MIN(EVENT_TIME) AS MIN_EVENT_TIME, MAX(EVENT_TIME) AS MAX_EVENT_TIME, ARRAY_AGG(DISTINCT OPERATION) AS OPERATIONS, ARRAY_AGG(DISTINCT RECORD_SPECIFIC_DETAILS:communication_type) AS COMMUNICATION_TYPE, COUNT(*) AS COUNTER FROM RAW.O365_AUDIT_LOGS WHERE EVENT_TIME > CURRENT_TIMESTAMP - interval '50d' AND NOT USER_ID ILIKE '%' || $YOUR_DOMAIN_NAME || '%' AND NOT USER_ID IN ('app@sharepoint') AND USER_ID ILIKE '%@%' -- CLEAN-UP OF EXTENSIVELY USED DOMAINS AND USER_DOMAIN NOT IN (SELECT DISTINCT DOMAIN_COMMONLY_USED FROM COMMONLY_USED_DOMAINS) AND OPERATION IN ('MemberAdded', 'ChatCreated') AND RECORD_SPECIFIC_DETAILS:communication_type = 'OneOnOne' GROUP BY USER_ID HAVING COUNT(*) > 5 ) SELECT EVENT_TIME, ORGANIZATION_ID AS ORG_ID, WORKLOAD AS WORKLOAD, OPERATION AS OPERATION, USER_ID AS USER_ID, LOWER(SPLIT_PART(USER_ID , '@', 2)) AS USER_DOMAIN, RECORD_SPECIFIC_DETAILS:chat_thread_id AS CHAT_THREAD_ID, RECORD_SPECIFIC_DETAILS:communication_type AS COMMUNICATION_TYPE, RECORD_SPECIFIC_DETAILS:members[0].DisplayName AS MEMBER_DISPLAY_NAME_0, RECORD_SPECIFIC_DETAILS:members[0].UPN AS MEMBER_UPN_0, RECORD_SPECIFIC_DETAILS:members[0] AS MEMBERS_0, RECORD_SPECIFIC_DETAILS:members[1].DisplayName AS MEMBER_DISPLAY_NAME_2, RECORD_SPECIFIC_DETAILS:members[1].UPN AS MEMBER_UPN_2, RECORD_SPECIFIC_DETAILS:members[1] AS MEMBERS_2, RECORD_SPECIFIC_DETAILS:resource_tenant_id AS RESOURCE_TENANT_ID, RECORD_SPECIFIC_DETAILS, RAW:ClientIP AS CLIENT_IP FROM RAW.O365_AUDIT_LOGS WHERE 1=1 AND RECORD_SPECIFIC_DETAILS:communication_type = 'OneOnOne' AND ( RECORD_SPECIFIC_DETAILS:members[0].UPN IN (SELECT LATEST_EXT_USERS FROM LATEST_EXTERNAL_DOMAINS) OR RECORD_SPECIFIC_DETAILS:members[1].UPN IN (SELECT LATEST_EXT_USERS FROM LATEST_EXTERNAL_DOMAINS) ) AND USER_ID ILIKE '%' || $YOUR_DOMAIN_NAME || '%' AND OPERATION = 'MemberAdded' AND EVENT_TIME > CURRENT_TIMESTAMP - interval '50d';
היגיון שאילתה מעמיק: מכיוון שהשאילתה הזו מעט מורכבת, הנה הסבר על ההיגיון. ראשית, אנו משתמשים בתכונת "CTE" של Snowflake כדי לבנות שתי תצוגות:
לבסוף, אנו מאחזרים מידע מפורט על המשתמש והדומיין המשויך לו על ידי שאילתה לתוצאות המסוננות מ-LATEST_EXTERNAL_DOMAINS.
כיסינו היבטי ציד וחקירה הקשורים למספר טכניקות תקיפה בהן השתמש השחקן. חלק מאותן שיטות וטכניקות זדוניות ידועות גם בשימוש בקמפיינים שונים.
הגנה על הארגון שלך מפני איומים אלה יכולה להפחית משמעותית את הסיכון להתקפות מוצלחות המכוונות לחלקים שונים של התשתית הארגונית שלך.
הנה כמה נאגטס היגיינה שניתן להשתמש בהם כדי לשפר את תנוחת האבטחה שלך:
VEILDrive משלב פשטות ותחכום. מעניין היה לחזות בשימוש במאפיינים קלאסיים של C2 במקביל ל-C2 דרך OneDrive, כמו גם בשימוש בהתמדה מתוזמנת מבוססת משימות קלאסית בשילוב עם ביצוע תוכנות זדוניות ש-EDR מהשורה הראשונה לא מזהה.
המאפיינים שזוהו במסגרת חקירה וחקר איומים היו מעניינים, והם אפשרו לנו להבין טוב יותר כיצד פועל שחקן האיום הזה, באילו שירותים ידועים הוא מנצל, כיצד הוא מנצל אותם לרעה ולאיזו מטרה.
לדרך שבה OneDrive נוצל לרעה עבור תקשורת C2 ב-VEILDrive היו מאפיינים ייחודיים. עם זאת, הרעיון הכללי של שימוש לרעה ב-OneDrive למטרות C2 נמצא במגמת עלייה במהלך החודשים האחרונים, וזה משהו שצריך לזכור.
גישה ראשונית באמצעות דיוג בחנית בפלטפורמות תקשורת כמו Microsoft Teams, Slack ושירותים דומים נפוצה יותר ויותר.
אנו צופים שזה יהפוך לנפוץ עוד יותר ככל שהזמן יעבור. לפיכך, אמצעי היגיינה ויציבה הקשורים להיבט זה (כפי שהוזכר בנאגטס ההיגיינה לעיל) הם קריטיים.
כלי ניהול מרחוק כבר פופולריים מאוד בקרב גורמי איומים. ניתן לנקוט גישות שונות כדי למזער את הפוטנציאל לגישה לא מורשית באמצעות כלים כאלה. מנקודת המבט שלנו, הגישה המומלצת בתחום זה היא רישום הלבן (רשימה היתר) בשילוב ניטור חזק.
אנו צופים שעוד יצוצו קמפיינים מסוג זה, תוך שימוש בשיטות ומאפיינים דומים. לכן, מומלץ בחום ניטור רציף וציד איומים יזום אחר סוג זה של איום.
כדי להתעדכן במחקר, פעילויות ושאילתות ציד איומים, עקוב אחר חשבון X/Twitter של Team Axon ( @team__axon ).