חיפוש מול רשימות חיצוניות – Cyber Threat Hunting

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

המאמר הינו חלק מסדרת מאמרים קצרים על חיפוש וציד (Cyber Threat Hunting) באמצעות KQL. השאילתות מובאות על סמך ידע וניסיון מהשטח ועל סמך יצירה ופיתוח תוכן, תחקור, חיפוש וציד על גבי מערכות רבות. השאילתות יכולות להתאים למערכות כמו Microsoft Sentinel או Advanced Hunting. 

חיפוש מול מקור מידע חיצוני

האפשרויות של של שילוב מודיעין איומים ומקורות מידע מול מערכות כגון Microsoft Sentinel או כלי Microsoft Defender השונים מאפשרים ליצור חיפושים מתקדמים ולדייק את חוקי הזיהוי וע״י כך להוריד התראות כוזבות ולהרים דגל בבקרות כאשר ישנו חשד לפעולות לא לגיטימיות. האפשרויות של מודיעין איומים מאפשרים לחבר תריסרי קונקטורים ואפשרויות שמשלבים בין היתר שימוש באינדיקטורים וברשימות IP חיצוניות, בין תריסרי הקונקטורים והאפשרויות אפשר למצוא את האפשרות של האופרטור externaldata שמייבא כתובות IP זדוניות מגורם חיצוני ומשלב אותם מול טבלאות שונות במטרה למצוא ניסיונות גישה או קישוריות מול גורם לא מורשה.

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

בשלב ראשון נוודא שיש ברשותינו מאגר כלשהוא עם כתובות חיצוניות IP זדוניות ולאחר מכן נשלב את האופרטור של externaldata לקריאה מתוך הכתובת המצורפת 

 

externaldata(ip:string)
[@"https://raw.githubusercontent.com/CriticalPathSecurity/Public-Intelligence-Feeds/master/compromised-ips.txt"
]
with(format="csv")

 

  • externaldata(ip:string הוא התחביר עבור externaldata שמציין את שם העמודה שתיווצר עם ערך ip, ואת סוג הנתונים של העמודה מחרוזת/סטרינג.
  • @”https://raw.githubusercontent.com/CriticalPathSecurity/Public-Intelligence-Feeds/master/compromised-ips.txt היא כתובת האתר של מקור הנתונים החיצוני שממנו  הנתונים מאוחזרים. @ אומר למנוע השאילתה לפרש את כתובת האתר כמחרוזת.
  • with(format=”csv מציין שהפורמט של הנתונים שאוחזר הוא CSV.

הערות:

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

בשלב שני אנו יכולים לשלב אופורטור נוסף בשביל לזקק את המידע. במקרים רבים הנתונים עלולים להיות מוצגים ״בצורה מלוכלכת״ או לא מספיק מדוייקת ולכן נשתמש באופרטור regex בשביל לבצע התאמות ובכדי לנקות את הרשימה. מכיוון שיכולה להיות חפיפה מסוימת נשתמש באופרטור distinct לצורך מניעת כפילויות.

| where ip matches regex "(^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)"
| distinct ip 

למי שעובד עם ChatGPT אז אפשר לייצר regex לטובת התאמת הכתובות לפי הפורמט הנכון. אגב, הצאט עושה עבודה גרועה מאוד ביצירת שאילתות ולכן לא ממליץ כלל להשתמש בו למטרה זאת. 

78331 monosnap new chat 2023 03 15 20 21 09

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

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

let MalIPs = (externaldata(ip:string)
[@"https://raw.githubusercontent.com/CriticalPathSecurity/Public-Intelligence-Feeds/master/compromised-ips.txt"]
with(format="csv")
| where ip matches regex "(^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)"
| distinct ip
);
DeviceEvents
| where RemoteIP in (MalIPs)
| project Timestamp, DeviceName, LocalPort, RemotePort, RemoteUrl

5ca9d monosnap advanced hunting microsoft 365 security 2023 03 16 00 34 51

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

מאמרים נוספים לגבי Threat Hunting

שאילתות MDE 

You may also like...

השאר תגובה