Jakten på løsepengevirus

Gjelder for:

  • Microsoft Defender XDR

Ransomware utviklet seg raskt fra å være enkel vare malware påvirker individuelle databrukere til en virksomhet trussel som er alvorlig påvirker bransjer og offentlige institusjoner. Selv om Microsoft Defender XDR gir mange funksjoner som oppdager og blokkerer løsepengevirus og tilknyttede inntrengingsaktiviteter, kan det å utføre proaktive kontroller for tegn på kompromiss bidra til å holde nettverket beskyttet.

Les om menneskedrevet løsepengevirus

Med avansert jakt i Microsoft Defender XDR kan du opprette spørringer som finner individuelle artefakter knyttet til løsepengevirusaktivitet. Du kan også kjøre mer avanserte spørringer som kan se etter tegn på aktivitet og veie disse tegnene for å finne enheter som krever umiddelbar oppmerksomhet.

Tegn på løsepengevirusaktivitet

Microsofts sikkerhetsforskere har observert ulike vanlige, men subtile gjenstander i mange ransomware-kampanjer lansert av sofistikerte inntrengere. Disse tegnene involverer for det meste bruk av systemverktøy for å forberede kryptering, forhindre gjenkjenning og klare rettsmedisinske bevis.

Løsepengevirusaktivitet Vanlige verktøy Hensikt
Stopp prosesser taskkill.exe, net stop Sørg for at filer som er rettet mot kryptering, ikke er låst av ulike programmer.
Deaktiver tjenester sc.exe – Sørg for at filer som er rettet mot kryptering, ikke er låst av ulike programmer.
– Hindre at sikkerhetsprogramvaren forstyrrer kryptering og annen løsepengevirusaktivitet.
– Stopp sikkerhetskopiering av programvare fra å opprette gjenopprettelige kopier.
Slette logger og filer cipher.exe, wevtutil, fsutil.exe Fjern rettsmedisinske bevis.
Slette skyggekopier vsadmin.exe ,wmic.exe Fjern kopier av stasjonsskygge som kan brukes til å gjenopprette krypterte filer.
Slette og stoppe sikkerhetskopier wbadmin.exe Slett eksisterende sikkerhetskopier og stopp planlagte sikkerhetskopieringsoppgaver, og forhindre gjenoppretting etter kryptering.
Endre oppstartsinnstillinger bcdedit.exe Slå av advarsler og automatiske reparasjoner etter oppstartsfeil som kan skyldes krypteringsprosessen.
Deaktiver gjenopprettingsverktøy schtasks.exe ,regedit.exe, Deaktiver Systemgjenoppretting og andre alternativer for systemgjenoppretting.

Se etter individuelle tegn på løsepengevirusaktivitet

Mange aktiviteter som utgjør løsepengevirusatferd, inkludert aktivitetene som er beskrevet i forrige avsnitt, kan være godartede. Når du bruker følgende spørringer til å finne løsepengevirus, kjører du mer enn én spørring for å kontrollere om de samme enhetene viser ulike tegn på mulig løsepengevirusaktivitet.

Stoppe flere prosesser ved hjelp av taskkill.exe

Denne spørringen søker etter forsøk på å stoppe minst 10 separate prosesser ved hjelp av taskkill.exe-verktøyet . Kjør spørring

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

Stoppe prosesser ved hjelp av net stop

Denne spørringen ser etter forsøk på å stoppe minst 10 separate prosesser ved hjelp av net stop-kommandoen . Kjør spørring

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

Sletting av data på flere stasjoner ved hjelp av cipher.exe

Denne spørringen ser etter forsøk på å slette data på flere stasjoner ved hjelp av cipher.exe. Denne aktiviteten utføres vanligvis av løsepengevirus for å hindre gjenoppretting av data etter kryptering. Kjør spørring

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

Fjerning av rettsmedisinske bevis fra hendelseslogger ved hjelp av wevtutil

Denne spørringen ser etter forsøk på å fjerne minst 10 loggoppføringer fra hendelseslogger ved hjelp av wevtutil. Kjør spørring

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

Deaktivere tjenester ved hjelp av sc.exe

Denne spørringen søker etter forsøk på å slå av minst 10 eksisterende tjenester ved hjelp av sc.exe. Kjør spørring

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

Deaktivere Systemgjenoppretting

Denne spørringen identifiserer forsøk på å stoppe systemgjenoppretting og hindre at systemet oppretter gjenopprettingspunkter, som kan brukes til å gjenopprette data som krypteres av løsepengevirus. Kjør spørring

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'

Sletting av sikkerhetskopiering

Denne spørringen identifiserer bruk av wmic.exe til å slette øyeblikksbilder av skyggekopier før kryptering. Kjør spørring

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

Se etter flere tegn på løsepengevirusaktivitet

I stedet for å kjøre flere spørringer separat, kan du også bruke en omfattende spørring som ser etter flere tegn på løsepengevirusaktivitet for å identifisere berørte enheter. Følgende konsoliderte spørring:

  • Ser etter både relativt konkrete og subtile tegn på løsepengevirusaktivitet
  • Veier tilstedeværelsen av disse tegnene
  • Identifiserer enheter med større sjanse for å være mål for løsepengevirus

Når denne konsoliderte spørringen kjøres, returneres en liste over enheter som har vist flere tegn på angrep. Antallet for hver type løsepengevirusaktivitet vises også. Hvis du vil kjøre denne konsoliderte spørringen, kopierer du den direkte til redigeringsprogrammet for avansert jaktspørring.

// 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 justere spørringsresultatene

Den konsoliderte spørringen returnerer følgende resultater:

  • DeviceId – identifiserer den berørte enheten
  • TimeStamp – første gang noen tegn på løsepengevirusaktivitet ble observert på enheten
  • Bestemte tegn på aktivitet – antallet for hvert tegn som vises i flere kolonner, for eksempel BcdEdit eller FsUtil
  • TotalEvidenceCount – antall observerte tegn
  • UniqueEvidenceCount – antall typer observerte tegn

Et eksempel på en konsolidert spørring for løsepengevirusaktivitet i Microsoft Defender-portalen

Spørringsresultater som viser berørte enheter og antall ulike tegn på løsepengevirusaktivitet

Som standard viser spørringsresultatet bare enheter som har mer enn to typer løsepengevirusaktivitet. Hvis du vil se alle enheter med noen tegn på løsepengevirusaktivitet, endrer du følgende where operator og angir tallet til null (0). Hvis du vil se færre enheter, angir du et høyere tall.

| where UniqueEvidenceCount > 2

Flere ressurser for løsepengevirus

Viktig informasjon fra Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Blogginnlegg fra Microsoft Security-teamet:

Tips

Vil du lære mer? Kommuniser med Microsoft Sikkerhet-fellesskapet i det tekniske fellesskapet vårt: Microsoft Defender XDR Tech Community.