البحث عن برامج الفدية الضارة

ينطبق على:

  • Microsoft Defender XDR

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

اقرأ عن برامج الفدية الضارة التي يديرها الإنسان

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

علامات نشاط برامج الفدية الضارة

لاحظ باحثو أمان Microsoft العديد من البيانات الاصطناعية الشائعة ولكنها دقيقة في العديد من حملات برامج الفدية الضارة التي أطلقها متسللون متطورون. تتضمن هذه العلامات في الغالب استخدام أدوات النظام للتحضير للتشفير ومنع الكشف ومسح الأدلة الجنائية.

نشاط برامج الفدية الضارة الأدوات الشائعة القصد
إيقاف العمليات taskkill.exe، net stop تأكد من عدم تأمين الملفات المستهدفة للتشفير بواسطة تطبيقات مختلفة.
إيقاف تشغيل الخدمات sc.exe - تأكد من عدم تأمين الملفات المستهدفة للتشفير بواسطة تطبيقات مختلفة.
- منع برامج الأمان من تعطيل التشفير ونشاط برامج الفدية الضارة الأخرى.
- إيقاف برنامج النسخ الاحتياطي من إنشاء نسخ قابلة للاسترداد.
حذف السجلات والملفات cipher.exe، wevtutil، fsutil.exe إزالة الأدلة الجنائية.
حذف نسخ الظل vsadmin.exe، wmic.exe إزالة نسخ ظل محرك الأقراص التي يمكن استخدامها لاسترداد الملفات المشفرة.
حذف النسخ الاحتياطية وإيقافها wbadmin.exe احذف النسخ الاحتياطية الموجودة وتوقف عن مهام النسخ الاحتياطي المجدولة، مما يمنع الاسترداد بعد التشفير.
تعديل إعدادات التمهيد bcdedit.exe قم بإيقاف تشغيل التحذيرات والإصلاحات التلقائية بعد فشل التمهيد الذي يمكن أن يحدث بسبب عملية التشفير.
إيقاف تشغيل أدوات الاسترداد schtasks.exe، regedit.exe، قم بإيقاف تشغيل استعادة النظام وخيارات استرداد النظام الأخرى.

التحقق من وجود علامات فردية لنشاط برامج الفدية الضارة

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

إيقاف عمليات متعددة باستخدام taskkill.exe

يتحقق هذا الاستعلام من محاولات إيقاف 10 عمليات منفصلة على الأقل باستخدام الأداة المساعدةtaskkill.exe . تشغيل الاستعلام

// Find attempts to stop processes using taskkill.exe
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "taskkill.exe" 
| summarize taskKillCount = dcount(ProcessCommandLine), TaskKillList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where taskKillCount > 10

إيقاف العمليات باستخدام net stop

يتحقق هذا الاستعلام من محاولات إيقاف 10 عمليات منفصلة على الأقل باستخدام أمر net stop . تشغيل الاستعلام

// Find attempts to stop processes using net stop
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "net.exe" and ProcessCommandLine has "stop"
| summarize netStopCount = dcount(ProcessCommandLine), NetStopList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where netStopCount > 10

حذف البيانات على محركات أقراص متعددة باستخدام cipher.exe

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

// Look for cipher.exe deleting data from multiple drives
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "cipher.exe" 
// cipher.exe /w flag used for deleting data 
| where ProcessCommandLine has "/w" 
| summarize CipherCount = dcount(ProcessCommandLine),
CipherList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 1m) 
// cipher.exe accessing multiple drives in a short timeframe 
| where CipherCount > 1

مسح الأدلة الجنائية من سجلات الأحداث باستخدام wevtutil

يتحقق هذا الاستعلام من محاولات مسح 10 إدخالات سجل على الأقل من سجلات الأحداث باستخدام wevtutil. تشغيل الاستعلام

// Look for use of wevtutil to clear multiple logs
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "WEVTUTIL" and ProcessCommandLine has "CL"
| summarize LogClearCount = dcount(ProcessCommandLine), ClearedLogList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where LogClearCount > 10

إيقاف تشغيل الخدمات باستخدام sc.exe

يتحقق هذا الاستعلام من محاولات إيقاف تشغيل 10 خدمات موجودة على الأقل باستخدام sc.exe. تشغيل الاستعلام

// Look for sc.exe disabling services
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled"
| summarize ScDisableCount = dcount(ProcessCommandLine), ScDisableList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where ScDisableCount > 10

إيقاف تشغيل استعادة النظام

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

DeviceProcessEvents
//Pivoting for rundll32  
| where InitiatingProcessFileName =~ 'rundll32.exe'   
//Looking for empty command line   
and InitiatingProcessCommandLine !contains " " and InitiatingProcessCommandLine != ""  
//Looking for schtasks.exe as the created process  
and FileName in~ ('schtasks.exe')  
//Disabling system restore   
and ProcessCommandLine has 'Change' and ProcessCommandLine has 'SystemRestore' 
and ProcessCommandLine has 'disable'

حذف النسخ الاحتياطي

يحدد هذا الاستعلام استخدام wmic.exe لحذف لقطات النسخ الظلي قبل التشفير. تشغيل الاستعلام

DeviceProcessEvents
| where FileName =~ "wmic.exe"
| where ProcessCommandLine has "shadowcopy" and ProcessCommandLine has "delete"
| project DeviceId, Timestamp, InitiatingProcessFileName, FileName,
ProcessCommandLine, InitiatingProcessIntegrityLevel, InitiatingProcessParentFileName

التحقق من وجود علامات متعددة لنشاط برامج الفدية الضارة

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

  • يبحث عن علامات ملموسة نسبيا وخفية لنشاط برامج الفدية الضارة
  • يزن وجود هذه العلامات
  • يحدد الأجهزة التي لها فرصة أكبر في أن تكون أهدافا لبرامج الفدية الضارة

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

// Find attempts to stop processes using taskkill.exe
let taskKill = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "taskkill.exe" 
| summarize taskKillCount = dcount(ProcessCommandLine), TaskKillList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where taskKillCount > 10;
// Find attempts to stop processes using net stop
let netStop = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "net.exe" and ProcessCommandLine has "stop"
| summarize netStopCount = dcount(ProcessCommandLine), NetStopList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 2m)
| where netStopCount > 10;
// Look for cipher.exe deleting data from multiple drives
let cipher = DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "cipher.exe" 
// cipher.exe /w flag used for deleting data 
| where ProcessCommandLine has "/w" 
| summarize CipherCount = dcount(ProcessCommandLine), 
CipherList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 1m) 
// cipher.exe accessing multiple drives in a short timeframe 
| where CipherCount > 1;
// Look for use of wevtutil to clear multiple logs
let wevtutilClear = DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "WEVTUTIL" and ProcessCommandLine has "CL"
| summarize LogClearCount = dcount(ProcessCommandLine), ClearedLogList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where LogClearCount > 10;
// Look for sc.exe disabling services
let scDisable = DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled"
| summarize ScDisableCount = dcount(ProcessCommandLine), ScDisableList = make_set(ProcessCommandLine) by DeviceId, bin(Timestamp, 5m)
| where ScDisableCount > 10;
// Main query for counting and aggregating evidence
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName =~ "vssadmin.exe" and ProcessCommandLine has_any("list shadows", "delete shadows")
or FileName =~ "fsutil.exe" and ProcessCommandLine has "usn" and ProcessCommandLine has "deletejournal"
or ProcessCommandLine has("bcdedit") and ProcessCommandLine has_any("recoveryenabled no", "bootstatuspolicy ignoreallfailures")
or ProcessCommandLine has "wbadmin" and ProcessCommandLine has "delete" and ProcessCommandLine has_any("backup", "catalog", "systemstatebackup")
or (ProcessCommandLine has "wevtutil" and ProcessCommandLine has "cl") 
or (ProcessCommandLine has "wmic" and ProcessCommandLine has "shadowcopy delete")
or (ProcessCommandLine has "sc" and ProcessCommandLine has "config" and ProcessCommandLine has "disabled")
| extend Bcdedit = iff(ProcessCommandLine has "bcdedit" and ProcessCommandLine has_any("recoveryenabled no", "bootstatuspolicy ignoreallfailures"), 1, 0)
| extend ShadowCopyDelete = iff (ProcessCommandLine has "shadowcopy delete", 1, 0)
| extend VssAdminShadows = iff(ProcessCommandLine has "vssadmin" and ProcessCommandLine has_any("list shadows", "delete shadows"), 1, 0)
| extend Wbadmin = iff(ProcessCommandLine has "wbadmin" and ProcessCommandLine has "delete" and ProcessCommandLine has_any("backup", "catalog", "systemstatebackup"), 1,0)
| extend Fsutil = iff(ProcessCommandLine has "fsutil" and ProcessCommandLine has "usn" and ProcessCommandLine has "deletejournal", 1, 0)
| summarize FirstActivity = min(Timestamp), ReportId = any(ReportId), Commands = make_set(ProcessCommandLine) by DeviceId, Fsutil, Wbadmin, ShadowCopyDelete, Bcdedit, VssAdminShadows, bin(Timestamp, 6h)
// Joining extra evidence
| join kind=leftouter (wevtutilClear) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (cipher) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (netStop) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (taskKill) on $left.DeviceId == $right.DeviceId
| join kind=leftouter (scDisable) on $left.DeviceId == $right.DeviceId
| extend WevtutilUse = iff(LogClearCount > 10, 1, 0)
| extend CipherUse = iff(CipherCount > 1, 1, 0)
| extend NetStopUse = iff(netStopCount > 10, 1, 0)
| extend TaskkillUse = iff(taskKillCount > 10, 1, 0)
| extend ScDisableUse = iff(ScDisableCount > 10, 1, 0)
// Adding up all evidence
| mv-expand CommandList = NetStopList, TaskKillList, ClearedLogList, CipherList, Commands, ScDisableList
// Format results
| summarize BcdEdit = iff(make_set(Bcdedit) contains "1" , 1, 0), NetStop10PlusCommands = iff(make_set(NetStopUse) contains "1", 1, 0), Wevtutil10PlusLogsCleared = iff(make_set(WevtutilUse) contains "1", 1, 0),
CipherMultipleDrives = iff(make_set(CipherUse) contains "1", 1, 0), Fsutil = iff(make_set(Fsutil) contains "1", 1, 0), ShadowCopyDelete = iff(make_set(ShadowCopyDelete) contains "1", 1, 0),
Wbadmin = iff(make_set(Wbadmin) contains "1", 1, 0), TaskKill10PlusCommand = iff(make_set(TaskkillUse) contains "1", 1, 0), VssAdminShadow = iff(make_set(VssAdminShadows) contains "1", 1, 0), 
ScDisable = iff(make_set(ScDisableUse) contains "1", 1, 0), TotalEvidenceCount = count(CommandList), EvidenceList = make_set(Commands), StartofBehavior = min(FirstActivity) by DeviceId, bin(Timestamp, 1d)
| extend UniqueEvidenceCount = BcdEdit + NetStop10PlusCommands + Wevtutil10PlusLogsCleared + CipherMultipleDrives + Wbadmin + Fsutil + TaskKill10PlusCommand + VssAdminShadow + ScDisable + ShadowCopyDelete
| where UniqueEvidenceCount > 2

فهم نتائج الاستعلام وتعديلها

يقوم الاستعلام الموحد بإرجاع النتائج التالية:

  • DeviceId — يحدد الجهاز المتأثر
  • TimeStamp — في المرة الأولى التي تمت فيها ملاحظة أي علامة على نشاط برامج الفدية الضارة على الجهاز
  • علامات نشاط محددة — عدد كل علامة تظهر في أعمدة متعددة، مثل BcdEdit أو FsUtil
  • TotalEvidenceCount — عدد العلامات التي تمت ملاحظتها
  • UniqueEvidenceCount — عدد أنواع العلامات التي تمت ملاحظتها

مثال على استعلام موحد لنشاط برامج الفدية الضارة في مدخل Microsoft Defender

نتائج الاستعلام التي تعرض الأجهزة المتأثرة وعدد العلامات المختلفة لنشاط برامج الفدية الضارة

بشكل افتراضي، تسرد نتيجة الاستعلام الأجهزة التي تحتوي على أكثر من نوعين من نشاط برامج الفدية الضارة فقط. لمشاهدة جميع الأجهزة التي تحتوي على أي علامة على نشاط برامج الفدية الضارة، قم بتعديل عامل التشغيل التالي where وتعيين الرقم إلى صفر (0). لمشاهدة عدد أقل من الأجهزة، قم بتعيين رقم أعلى.

| where UniqueEvidenceCount > 2

المزيد من موارد برامج الفدية الضارة

المعلومات الرئيسية من Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

منشورات مدونة فريق أمان Microsoft:

تلميح

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