Vyhledávání ransomwaru

Platí pro:

  • Microsoft Defender XDR

Ransomware se rychle vyvinul z jednoduchého komoditní malwaru ovlivňujícího jednotlivé uživatele počítačů k podnikové hrozbě, která má vážný dopad na odvětví a vládní instituce. I když Microsoft Defender XDR poskytuje mnoho funkcí, které detekují a blokují ransomware a související aktivity vniknutí, provádění proaktivních kontrol na známky ohrožení zabezpečení může pomoct udržet vaši síť chráněnou.

Přečtěte si o ransomwaru provozovaném člověkem.

S pokročilým vyhledáváním v Microsoft Defender XDR můžete vytvářet dotazy, které vyhledá jednotlivé artefakty spojené s aktivitou ransomwaru. Můžete také spouštět sofistikovanější dotazy, které můžou vyhledávat známky aktivity a vážit tyto příznaky a najít zařízení, která vyžadují okamžitou pozornost.

Známky aktivity ransomwaru

Výzkumníci z Microsoftu v oblasti zabezpečení zaznamenali různé běžné, ale jemné artefakty v mnoha ransomwarových kampaních, které spustili sofistikovaní vetřelci. Tyto příznaky většinou zahrnují použití systémových nástrojů k přípravě na šifrování, prevenci detekce a jasné forenzní důkazy.

Aktivita ransomware Běžné nástroje Záměr
Zastavení procesů taskkill.exe, net stop Zajistěte, aby soubory určené pro šifrování nebyly uzamčeny různými aplikacemi.
Vypnutí služeb sc.exe – Zajistěte, aby soubory určené pro šifrování nebyly uzamčeny různými aplikacemi.
– Zabraňte bezpečnostnímu softwaru, aby narušil šifrování a další aktivity ransomwaru.
- Zastavte zálohovací software ve vytváření obnovitelných kopií.
Odstranění protokolů a souborů cipher.exe, wevtutil,fsutil.exe Odeberte forenzní důkazy.
Odstranění stínových kopií vsadmin.exe, wmic.exe Odeberte stínové kopie jednotky, které lze použít k obnovení šifrovaných souborů.
Odstranění a zastavení zálohování wbadmin.exe Odstraňte existující zálohy a zastavte naplánované úlohy zálohování, aby se zabránilo obnovení po šifrování.
Úprava nastavení spouštění bcdedit.exe Vypněte upozornění a automatické opravy po selháních spuštění, které můžou být způsobeny procesem šifrování.
Vypnutí nástrojů pro obnovení schtasks.exe, regedit.exe, Vypněte obnovení systému a další možnosti obnovení systému.

Kontrola jednotlivých příznaků aktivity ransomwaru

Mnoho aktivit, které představují chování ransomwaru, včetně aktivit popsaných v předchozí části, může být neškodných. Při použití následujících dotazů k vyhledání ransomwaru spusťte více než jeden dotaz a zkontrolujte, jestli stejná zařízení nevykazují různé známky možné aktivity ransomware.

Zastavení více procesů pomocí taskkill.exe

Tento dotaz zkontroluje pokusy o zastavení alespoň 10 samostatných procesů pomocí nástrojetaskkill.exe . Spustit dotaz

// 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

Zastavování procesů pomocí net stop

Tento dotaz kontroluje pokusy o zastavení alespoň 10 samostatných procesů pomocí příkazu net stop . Spustit dotaz

// 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

Odstranění dat na více jednotkách pomocí cipher.exe

Tento dotaz kontroluje pokusy o odstranění dat na více jednotkách pomocí cipher.exe. Tuto aktivitu obvykle provádí ransomware, aby se zabránilo obnovení dat po šifrování. Spustit dotaz

// 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

Vymazání forenzních důkazů z protokolů událostí pomocí nástroje wevtutil

Tento dotaz kontroluje pokusy o vymazání alespoň 10 položek protokolu z protokolů událostí pomocí nástroje wevtutil. Spustit dotaz

// 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

Vypnutí služeb pomocí sc.exe

Tento dotaz zkontroluje pokusy o vypnutí alespoň 10 existujících služeb pomocí sc.exe. Spustit dotaz

// 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

Vypnutí nástroje Obnovení systému

Tento dotaz identifikuje pokusy o zastavení obnovení systému a zabrání systému ve vytváření bodů obnovení, které lze použít k obnovení dat šifrovaných ransomwarem. Spustit dotaz

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'

Odstranění zálohy

Tento dotaz identifikuje použití wmic.exe k odstranění snímků stínové kopie před šifrováním. Spustit dotaz

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

Kontrola více známek aktivity ransomwaru

Místo samostatného spouštění několika dotazů můžete také použít komplexní dotaz, který kontroluje, jestli se na ovlivněných zařízeních nevykazuje několik příznaků aktivity ransomware. Následující konsolidovaný dotaz:

  • Hledá relativně konkrétní i drobné známky aktivity ransomwaru.
  • Zváží přítomnost těchto znaků.
  • Identifikuje zařízení s vyšší pravděpodobností, že se budou stát terčem ransomwaru.

Při spuštění vrátí tento konsolidovaný dotaz seznam zařízení, u kterých se projevovalo několik příznaků útoku. Zobrazí se také počet jednotlivých typů aktivit ransomwaru. Pokud chcete tento konsolidovaný dotaz spustit, zkopírujte ho přímo do editoru dotazů rozšířeného proaktivního vyhledávání.

// 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

Vysvětlení a úprava výsledků dotazu

Konsolidovaný dotaz vrátí následující výsledky:

  • DeviceId – identifikuje ovlivněné zařízení.
  • TimeStamp – první výskyt jakýchkoli známek aktivity ransomware na zařízení.
  • Konkrétní znaky aktivity – počet pro každé znaménko zobrazené ve více sloupcích, například BcdEdit nebo FsUtil
  • TotalEvidenceCount – počet pozorovaných příznaků.
  • UniqueEvidenceCount – počet typů pozorovaných znaků.

Příklad konsolidovaného dotazu na aktivitu ransomware na portálu Microsoft Defender

Výsledky dotazu ukazující ovlivněná zařízení a počty různých příznaků aktivity ransomware

Ve výchozím nastavení se ve výsledku dotazu zobrazí jenom zařízení, která mají více než dva typy aktivit ransomwaru. Pokud chcete zobrazit všechna zařízení s jakýmkoli příznakem aktivity ransomware, upravte následující where operátor a nastavte číslo na nulu (0). Pokud chcete zobrazit méně zařízení, nastavte vyšší číslo.

| where UniqueEvidenceCount > 2

Další zdroje informací o ransomwaru

Klíčové informace od Microsoftu:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Příspěvky na blogu týmu Microsoft Security:

Tip

Chcete se dozvědět více? Spojte se s komunitou zabezpečení společnosti Microsoft v naší technické komunitě: Technická komunita Microsoft Defender XDR.