Share via


Gå på jagt efter ransomware

Gælder for:

  • Microsoft Defender XDR

Ransomware udviklede sig hurtigt fra at være simpel vare malware, der påvirker individuelle computerbrugere, til en virksomhedstrussel, der er alvorligt påvirkende industrier og offentlige institutioner. Selvom Microsoft Defender XDR giver mange funktioner, der registrerer og blokerer ransomware og tilknyttede indtrængensaktiviteter, kan udførelse af proaktive kontroller for tegn på kompromis hjælpe med at holde dit netværk beskyttet.

Læs om menneskeligt drevet ransomware

Med avanceret jagt i Microsoft Defender XDR kan du oprette forespørgsler, der finder individuelle artefakter, der er knyttet til ransomware-aktivitet. Du kan også køre mere avancerede forespørgsler, der kan søge efter tegn på aktivitet og veje disse tegn for at finde enheder, der kræver øjeblikkelig opmærksomhed.

Tegn på ransomware aktivitet

Microsoft-sikkerhedsforskere har observeret forskellige fælles, men subtile artefakter i mange ransomware-kampagner lanceret af sofistikerede ubudne gæster. Disse tegn involverer hovedsageligt brug af systemværktøjer til at forberede kryptering, forhindre opdagelse og klar kriminaltekniske beviser.

Ransomware-aktivitet Almindelige værktøjer Hensigt
Stop processer taskkill.exe, net stop Sørg for, at filer, der er målrettet til kryptering, ikke låses af forskellige programmer.
Deaktiver tjenester sc.exe – Sørg for, at filer, der er målrettet til kryptering, ikke låses af forskellige programmer.
- Undgå, at sikkerhedssoftware forstyrrer kryptering og anden ransomware-aktivitet.
- Forhindre sikkerhedskopiering af software i at oprette kopier, der kan gendannes.
Slet logge og filer cipher.exe, wevtutilfsutil.exe Fjern retsmedicinske beviser.
Slet øjebliksbilleder vsadmin.exe, wmic.exe Fjern øjebliksbilleder af drev, der kan bruges til at gendanne krypterede filer.
Slet og stop sikkerhedskopieringer wbadmin.exe Slet eksisterende sikkerhedskopier, og stop planlagte sikkerhedskopieringsopgaver, hvilket forhindrer gendannelse efter kryptering.
Rediger startindstillinger bcdedit.exe Deaktiver advarsler og automatiske reparationer efter startfejl, der kan skyldes krypteringsprocessen.
Slå genoprettelsesværktøjer fra schtasks.exe, regedit.exe, Deaktiver Systemgendannelse og andre indstillinger for systemgendannelse.

Tjek for individuelle tegn på ransomware aktivitet

Mange aktiviteter, der udgør ransomware adfærd, herunder de aktiviteter, der er beskrevet i foregående afsnit, kan være godartede. Når du bruger følgende forespørgsler til at finde ransomware, skal du køre mere end én forespørgsel for at kontrollere, om de samme enheder udviser forskellige tegn på mulig ransomware-aktivitet.

Stop af flere processer ved hjælp af taskkill.exe

Denne forespørgsel søger efter forsøg på at stoppe mindst 10 separate processer ved hjælp af værktøjettaskkill.exe . Kør forespørgsel

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

Stop af processer ved hjælp af net stop

Denne forespørgsel søger efter forsøg på at stoppe mindst 10 separate processer ved hjælp af kommandoen net stop . Kør forespørgsel

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

Sletning af data på flere drev ved hjælp af cipher.exe

Denne forespørgsel søger efter forsøg på at slette data på flere drev ved hjælp af cipher.exe. Denne aktivitet udføres typisk af ransomware for at forhindre gendannelse af data efter kryptering. Kør forespørgsel

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

Rydning af retsmedicinske beviser fra hændelseslogge ved hjælp af wevtutil

Denne forespørgsel søger efter forsøg på at rydde mindst 10 logposter fra hændelseslogfiler ved hjælp af wevtutil. Kør forespørgsel

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

Deaktivering af tjenester ved hjælp af sc.exe

Denne forespørgsel søger efter forsøg på at deaktivere mindst 10 eksisterende tjenester ved hjælp af sc.exe. Kør forespørgsel

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

Deaktiver systemgendannelse

Denne forespørgsel identificerer forsøg på at stoppe Systemgendannelse og forhindre systemet i at oprette gendannelsespunkter, som kan bruges til at gendanne data, der er krypteret af ransomware. Kør forespørgsel

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'

Sikkerhedskopieringssletning

Denne forespørgsel identificerer brugen af wmic.exe til at slette øjebliksbilleder af øjebliksbilleder før kryptering. Kør forespørgsel

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

Kontrollér, om der er flere tegn på ransomware-aktivitet

I stedet for at køre flere forespørgsler separat, kan du også bruge en omfattende forespørgsel, der kontrollerer, om der er flere tegn på ransomware-aktivitet for at identificere berørte enheder. Følgende konsoliderede forespørgsel:

  • Leder efter både relativt konkrete og subtile tegn på ransomware aktivitet
  • Vejer tilstedeværelsen af disse tegn
  • Identificerer enheder med en højere chance for at være mål for ransomware

Når denne konsoliderede forespørgsel køres, returnerer den en liste over enheder, der har udvist flere tegn på angreb. Antallet af hver type ransomware-aktivitet vises også. Hvis du vil køre denne sammenflettede forespørgsel, skal du kopiere den direkte til den avancerede forespørgselseditor til jagt.

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

Forstå og finjustere forespørgselsresultaterne

Den konsoliderede forespørgsel returnerer følgende resultater:

  • DeviceId – identificerer den berørte enhed
  • TimeStamp – første gang et tegn på ransomware-aktivitet blev observeret på enheden
  • Specifikke tegn på aktivitet – antallet for hvert tegn, der vises i flere kolonner, f.eks . BcdEdit eller FsUtil
  • TotalEvidenceCount – antallet af observerede tegn
  • UniqueEvidenceCount – antallet af typer observerede tegn

Et eksempel på en konsolideret forespørgsel om en ransomware-aktivitet på Microsoft Defender-portalen

Forespørgselsresultater, der viser berørte enheder og antallet af forskellige tegn på ransomware-aktivitet

Som standard viser forespørgselsresultatet kun enheder, der har mere end to typer ransomware-aktivitet. Hvis du vil se alle enheder med et tegn på ransomware-aktivitet, skal du ændre følgende where operatør og indstille tallet til nul (0). Hvis du vil se færre enheder, skal du angive et højere tal.

| where UniqueEvidenceCount > 2

Flere ransomware-ressourcer

Nøgleoplysninger fra Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Blogindlæg om Microsoft Security-teamet:

Tip

Vil du vide mere? Kontakt Microsoft Security-community'et i vores Tech Community: Microsoft Defender XDR Tech Community.