البحث عن التهديدات عبر الأجهزة ورسائل البريد الإلكتروني والتطبيقات والهويات

ينطبق على:

  • Microsoft Defender XDR

يتيح لك التتبع المتقدم في Microsoft Defender XDR البحث بشكل استباقي عن التهديدات عبر:

  • الأجهزة التي تديرها Microsoft Defender لنقطة النهاية
  • رسائل البريد الإلكتروني التي تمت معالجتها بواسطة Microsoft 365
  • أنشطة تطبيق السحابة وأحداث المصادقة وأنشطة وحدة التحكم بالمجال التي يتم تعقبها بواسطة Microsoft Defender for Cloud Apps Microsoft Defender for Identity

باستخدام هذا المستوى من الرؤية، يمكنك بسرعة البحث عن التهديدات التي تعبر أقساما من شبكتك، بما في ذلك الاختراقات المتطورة التي تصل على البريد الإلكتروني أو الويب، ورفع الامتيازات المحلية، والحصول على بيانات اعتماد المجال المتميزة، والانتقال أفقيا إلى جميع أجهزتك.

فيما يلي تقنيات عامة واستعلامات نموذجية استنادا إلى سيناريوهات التتبع المختلفة التي يمكن أن تساعدك على استكشاف كيفية إنشاء الاستعلامات عند البحث عن مثل هذه التهديدات المعقدة.

الحصول على معلومات الكيان

استخدم هذه الاستعلامات لمعرفة كيفية الحصول بسرعة على معلومات حول حسابات المستخدمين والأجهزة والملفات.

الحصول على حسابات المستخدمين من عناوين البريد الإلكتروني

عند إنشاء استعلامات عبر الجداول التي تغطي الأجهزة ورسائل البريد الإلكتروني، ستحتاج على الأرجح إلى الحصول على أسماء حسابات المستخدمين من عناوين البريد الإلكتروني للمرسل أو المستلم. يمكنك بشكل عام القيام بذلك لعنوان المستلم أو المرسل باستخدام المضيف المحلي من عنوان البريد الإلكتروني.

في القصاصة البرمجية أدناه، نستخدم الدالة tostring() Kusto لاستخراج المضيف المحلي مباشرة قبل @ من عناوين البريد الإلكتروني للمستلم في العمود RecipientEmailAddress.

//Query snippet showing how to extract the account name from an email address
AccountName = tostring(split(RecipientEmailAddress, "@")[0])

يوضح الاستعلام أدناه كيفية استخدام هذه القصاصة البرمجية:

EmailEvents
| where Timestamp > ago(7d)
| project RecipientEmailAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);

دمج جدول IdentityInfo

يمكنك الحصول على أسماء الحسابات ومعلومات الحساب الأخرى عن طريق دمج جدول IdentityInfo أو الانضمام إليه. يحصل الاستعلام أدناه على قائمة بالتصيد الاحتيالي واكتشاف البرامج الضارة من جدول EmailEvents ثم ينضم إلى تلك المعلومات مع IdentityInfo الجدول للحصول على معلومات مفصلة حول كل مستلم.

EmailEvents
| where Timestamp > ago(7d)
//Get email processing events where the messages were identified as either phishing or malware
| where ThreatTypes has "Malware" or ThreatTypes has "Phish"
//Merge email events with identity info to get recipient details
| join (IdentityInfo | distinct AccountUpn, AccountDisplayName, JobTitle,
Department, City, Country) on $left.RecipientEmailAddress == $right.AccountUpn
//Show important message and recipient details
| project Timestamp, NetworkMessageId, Subject, ThreatTypes,
SenderFromAddress, RecipientEmailAddress, AccountDisplayName, JobTitle,
Department, City, Country

شاهد هذا الفيديو القصير لمعرفة كيفية استخدام لغة استعلام Kusto للانضمام إلى الجداول.

الحصول على معلومات الجهاز

يوفر مخطط التتبع المتقدم معلومات شاملة عن الجهاز في جداول مختلفة. على سبيل المثال، يوفر جدول DeviceInfo معلومات شاملة عن الجهاز استنادا إلى بيانات الحدث المجمعة بانتظام. يستخدم DeviceInfo هذا الاستعلام الجدول للتحقق مما إذا كان المستخدم الذي يحتمل اختراقه (<account-name>) قام بتسجيل الدخول إلى أي أجهزة ثم يسرد التنبيهات التي تم تشغيلها على تلك الأجهزة.

تلميح

يستخدم kind=inner هذا الاستعلام لتحديد صلة داخلية، مما يمنع إلغاء تكرار القيم الجانبية اليسرى ل DeviceId.

DeviceInfo
//Query for devices that the potentially compromised account has logged onto
| where LoggedOnUsers contains '<account-name>'
| distinct DeviceId
//Crosscheck devices against alert records in AlertEvidence and AlertInfo tables
| join kind=inner AlertEvidence on DeviceId
| project AlertId
//List all alerts on devices that user has logged on to
| join AlertInfo on AlertId
| project AlertId, Timestamp, Title, Severity, Category

الحصول على معلومات حدث الملف

استخدم الاستعلام التالي للحصول على معلومات حول الأحداث المتعلقة بالملف.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceFileEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

الحصول على معلومات حدث الشبكة

استخدم الاستعلام التالي للحصول على معلومات حول الأحداث المتعلقة بالشبكة.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

الحصول على معلومات إصدار عامل الجهاز

استخدم الاستعلام التالي للحصول على إصدار العامل الذي يعمل على جهاز.

DeviceInfo
| where Timestamp > ago(1d)
| where ClientVersion startswith "20.1"
| summarize by DeviceId
| join kind=inner (
    DeviceNetworkEvents
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

مثال استعلام لأجهزة macOS

استخدم استعلام المثال التالي لمشاهدة جميع الأجهزة التي تعمل بنظام التشغيل macOS بإصدار أقدم من Catalina.

DeviceInfo
| where Timestamp > ago(1d)
| where OSPlatform == "macOS" and  OSVersion !contains "10.15" and OSVersion !contains "11."
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

الحصول على معلومات حالة الجهاز

استخدم الاستعلام التالي للحصول على حالة الجهاز. في المثال التالي، يتحقق الاستعلام لمعرفة ما إذا كان الجهاز قد تم إلحاقه.

DeviceInfo
| where Timestamp > ago(1d)
| where OnboardingStatus != "Onboarded"
| summarize by DeviceId
| join kind=inner (
    DeviceInfo
    | where Timestamp > ago(1d)
) on DeviceId
| take 10

سيناريوهات التتبع

سرد أنشطة تسجيل الدخول للمستخدمين الذين تلقوا رسائل البريد الإلكتروني التي لم يتم نقلها بنجاح

يعالج الإزالة التلقائية للساعة الصفرية (ZAP) رسائل البريد الإلكتروني الضارة بعد استلامها. إذا فشل ZAP، فقد يتم تشغيل التعليمات البرمجية الضارة في النهاية على الجهاز وترك الحسابات معرضة للخطر. يتحقق هذا الاستعلام من نشاط تسجيل الدخول الذي قام به مستلمو رسائل البريد الإلكتروني التي لم تتم معالجتها بنجاح بواسطة ZAP.

EmailPostDeliveryEvents
| where Timestamp > ago(7d)
//List malicious emails that were not zapped successfully
| where ActionType has "ZAP" and ActionResult == "Error"
| project ZapTime = Timestamp, ActionType, NetworkMessageId , RecipientEmailAddress
//Get logon activity of recipients using RecipientEmailAddress and AccountUpn
| join kind=inner IdentityLogonEvents on $left.RecipientEmailAddress == $right.AccountUpn
| where Timestamp between ((ZapTime-24h) .. (ZapTime+24h))
//Show only pertinent info, such as account name, the app or service, protocol, the target device, and type of logon
| project ZapTime, ActionType, NetworkMessageId , RecipientEmailAddress, AccountUpn,
LogonTime = Timestamp, AccountDisplayName, Application, Protocol, DeviceName, LogonType

الحصول على محاولات تسجيل الدخول بواسطة حسابات المجال التي تستهدفها سرقة بيانات الاعتماد

يحدد هذا الاستعلام أولا جميع تنبيهات الوصول إلى بيانات الاعتماد في AlertInfo الجدول. ثم يدمج الجدول أو ينضم AlertEvidence إليه، والذي يوزعه لأسماء الحسابات المستهدفة وعوامل التصفية للحسابات المرتبطة بالمجال فقط. وأخيرا، يتحقق من IdentityLogonEvents الجدول للحصول على جميع أنشطة تسجيل الدخول بواسطة الحسابات المستهدفة المرتبطة بالمجال.

AlertInfo
| where Timestamp > ago(30d)
//Get all credential access alerts
| where Category == "CredentialAccess"
//Get more info from AlertEvidence table to get the SID of the target accounts
| join AlertEvidence on AlertId
| extend IsJoined=(parse_json(AdditionalFields).Account.IsDomainJoined)
| extend TargetAccountSid=tostring(parse_json(AdditionalFields).Account.Sid)
//Filter for domain-joined accounts only
| where IsJoined has "true"
//Merge with IdentityLogonEvents to get all logon attempts by the potentially compromised target accounts
| join kind=inner IdentityLogonEvents on $left.TargetAccountSid == $right.AccountSid
//Show only pertinent info, such as account name, the app or service, protocol, the accessed device, and type of logon
| project AccountDisplayName, TargetAccountSid, Application, Protocol, DeviceName, LogonType

التحقق مما إذا كانت الملفات من مرسل ضار معروف موجودة على أجهزتك

بافتراض أنك تعرف عنوان بريد إلكتروني يرسل ملفات ضارة (MaliciousSender@example.com)، يمكنك تشغيل هذا الاستعلام لتحديد ما إذا كانت الملفات من هذا المرسل موجودة على أجهزتك. يمكنك استخدام هذا الاستعلام، على سبيل المثال، لتحديد الأجهزة المتأثرة بحملة توزيع البرامج الضارة.

EmailAttachmentInfo
| where SenderFromAddress =~ "MaliciousSender@example.com"
//Get emails with attachments identified by a SHA-256
| where isnotempty(SHA256)
| join (
//Check devices for any activity involving the attachments
DeviceFileEvents
| project FileName, SHA256, DeviceName, DeviceId
) on SHA256
| project Timestamp, FileName , SHA256, DeviceName, DeviceId,  NetworkMessageId, SenderFromAddress, RecipientEmailAddress

مراجعة محاولات تسجيل الدخول بعد استلام رسائل البريد الإلكتروني الضارة

يعثر هذا الاستعلام على أحدث 10 عمليات تسجيل دخول قام بها مستلمو البريد الإلكتروني في غضون 30 دقيقة بعد تلقيهم رسائل بريد إلكتروني ضارة معروفة. يمكنك استخدام هذا الاستعلام للتحقق مما إذا كانت حسابات مستلمي البريد الإلكتروني قد تم اختراقها.

//Define new table for malicious emails
let MaliciousEmails=EmailEvents
//List emails detected as malware, getting only pertinent columns
| where ThreatTypes has "Malware"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
MaliciousEmails
| join (
//Merge malicious emails with logon events to find logons by recipients
IdentityLogonEvents
| project LogonTime = Timestamp, AccountName, DeviceName
) on AccountName
//Check only logons within 30 minutes of receipt of an email
| where (LogonTime - TimeEmail) between (0min.. 30min)
| take 10

مراجعة أنشطة PowerShell بعد استلام رسائل البريد الإلكتروني من مرسل ضار معروف

غالبا ما تحتوي رسائل البريد الإلكتروني الضارة على مستندات ومرفقات أخرى معدة خصيصا تقوم بتشغيل أوامر PowerShell لتقديم حمولات إضافية. إذا كنت على علم برسائل البريد الإلكتروني الواردة من مرسل ضار معروف (MaliciousSender@example.com)، يمكنك استخدام هذا الاستعلام لسرد أنشطة PowerShell ومراجعتها التي حدثت في غضون 30 دقيقة بعد تلقي رسالة بريد إلكتروني من المرسل.

//Define new table for emails from specific sender
let EmailsFromBadSender=EmailEvents
| where SenderFromAddress =~ "MaliciousSender@example.com"
| project TimeEmail = Timestamp, Subject, SenderFromAddress, AccountName = tostring(split(RecipientEmailAddress, "@")[0]);
//Merge emails from sender with process-related events on devices
EmailsFromBadSender
| join (
DeviceProcessEvents
//Look for PowerShell activity
| where FileName =~ "powershell.exe"
//Add line below to check only events initiated by Outlook
//| where InitiatingProcessParentFileName =~ "outlook.exe"
| project TimeProc = Timestamp, AccountName, DeviceName, InitiatingProcessParentFileName, InitiatingProcessFileName, FileName, ProcessCommandLine
) on AccountName
//Check only PowerShell activities within 30 minutes of receipt of an email
| where (TimeProc - TimeEmail) between (0min.. 30min)

تلميح

هل تريد معرفة المزيد؟ تفاعل مع مجتمع أمان Microsoft في مجتمعنا التقني: Microsoft Defender XDR Tech Community.