Jag utpressningstrojan

Gäller för:

  • Microsoft Defender XDR

Utpressningstrojaner utvecklades snabbt från att vara enkel skadlig kod som påverkar enskilda datoranvändare till ett företagshot som allvarligt påverkar branscher och statliga institutioner. Även om Microsoft Defender XDR har många funktioner som identifierar och blockerar utpressningstrojaner och associerade intrångsaktiviteter, kan proaktiva kontroller av tecken på intrång hjälpa dig att hålla nätverket skyddat.

Läs mer om utpressningstrojaner som drivs av människor

Med avancerad jakt i Microsoft Defender XDR kan du skapa frågor som hittar enskilda artefakter som är associerade med utpressningstrojaner. Du kan också köra mer avancerade frågor som kan söka efter tecken på aktivitet och väga dessa tecken för att hitta enheter som kräver omedelbar uppmärksamhet.

Tecken på utpressningstrojanaktivitet

Microsofts säkerhetsforskare har observerat olika vanliga men subtila artefakter i många utpressningstrojankampanjer som lanserats av sofistikerade inkräktare. Dessa tecken omfattar främst användning av systemverktyg för att förbereda för kryptering, förhindra identifiering och rensa kriminaltekniska bevis.

Utpressningstrojanaktivitet Vanliga verktyg Avsikt
Stoppa processer taskkill.exe, net stop Se till att filer som är avsedda för kryptering inte är låsta av olika program.
Inaktivera tjänster sc.exe – Se till att filer som är avsedda för kryptering inte låses av olika program.
– Förhindra att säkerhetsprogramvara stör kryptering och annan utpressningstrojanaktivitet.
– Stoppa säkerhetskopieringsprogram från att skapa återställningsbara kopior.
Ta bort loggar och filer cipher.exe, wevtutil, fsutil.exe Ta bort kriminaltekniska bevis.
Ta bort skuggkopior vsadmin.exe, wmic.exe Ta bort skuggkopior av enheter som kan användas för att återställa krypterade filer.
Ta bort och stoppa säkerhetskopior wbadmin.exe Ta bort befintliga säkerhetskopieringar och stoppa schemalagda säkerhetskopieringsuppgifter, vilket förhindrar återställning efter kryptering.
Ändra startinställningar bcdedit.exe Inaktivera varningar och automatiska reparationer efter startfel som kan orsakas av krypteringsprocessen.
Inaktivera återställningsverktyg schtasks.exe, regedit.exe, Inaktivera Systemåterställning och andra alternativ för systemåterställning.

Sök efter enskilda tecken på utpressningstrojanaktivitet

Många aktiviteter som utgör utpressningstrojaner, inklusive de aktiviteter som beskrivs i föregående avsnitt, kan vara godartade. När du använder följande frågor för att hitta utpressningstrojaner kör du mer än en fråga för att kontrollera om samma enheter uppvisar olika tecken på möjlig utpressningstrojanaktivitet.

Stoppa flera processer med hjälp avtaskkill.exe

Den här frågan söker efter försök att stoppa minst 10 separata processer med hjälp av verktygettaskkill.exe . Köra fråga

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

Stoppa processer med net stop

Den här frågan söker efter försök att stoppa minst 10 separata processer med hjälp av kommandot net stop . Köra fråga

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

Borttagning av data på flera enheter med hjälp avcipher.exe

Den här frågan söker efter försök att ta bort data på flera enheter med hjälp avcipher.exe. Den här aktiviteten utförs vanligtvis av utpressningstrojaner för att förhindra återställning av data efter kryptering. Köra fråga

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

Rensning av kriminaltekniska bevis från händelseloggar med hjälp av wevtutil

Den här frågan söker efter försök att rensa minst 10 loggposter från händelseloggar med hjälp av wevtutil. Köra fråga

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

Stänga av tjänster med hjälp avsc.exe

Den här frågan söker efter försök att inaktivera minst 10 befintliga tjänster med hjälp avsc.exe. Köra fråga

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

Inaktivera systemåterställning

Den här frågan identifierar försök att stoppa systemåterställning och förhindra att systemet skapar återställningspunkter, som kan användas för att återställa data som krypterats med utpressningstrojaner. Köra fråga

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'

Borttagning av säkerhetskopia

Den här frågan identifierar användningen av wmic.exe för att ta bort ögonblicksbilder av skuggkopior före kryptering. Köra fråga

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

Sök efter flera tecken på utpressningstrojanaktivitet

I stället för att köra flera frågor separat kan du också använda en omfattande fråga som söker efter flera tecken på utpressningstrojanaktivitet för att identifiera berörda enheter. Följande konsoliderade fråga:

  • Letar efter både relativt konkreta och subtila tecken på utpressningstrojanaktivitet
  • Väger förekomsten av dessa tecken
  • Identifierar enheter med högre chans att bli mål för utpressningstrojaner

När den här konsoliderade frågan körs returneras en lista över enheter som har uppvisat flera tecken på angrepp. Antalet av varje typ av utpressningstrojanaktivitet visas också. Om du vill köra den här konsoliderade frågan kopierar du den direkt till frågeredigeraren för avancerad jakt.

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

Förstå och justera frågeresultaten

Den konsoliderade frågan returnerar följande resultat:

  • DeviceId – identifierar den berörda enheten
  • TimeStamp – första gången några tecken på utpressningstrojanaktivitet observerades på enheten
  • Specifika tecken på aktivitet – antalet för varje tecken som visas i flera kolumner, till exempel BcdEdit eller FsUtil
  • TotalEvidenceCount – antalet observerade tecken
  • UniqueEvidenceCount – antal typer av observerade tecken

Ett exempel på en konsoliderad fråga för en utpressningstrojanaktivitet i Microsoft Defender-portalen

Frågeresultat som visar berörda enheter och antal olika tecken på utpressningstrojanaktivitet

Som standard visar frågeresultatet endast enheter som har fler än två typer av utpressningstrojaner. Om du vill se alla enheter med tecken på utpressningstrojanaktivitet ändrar du följande where operator och anger talet till noll (0). Om du vill se färre enheter anger du ett högre tal.

| where UniqueEvidenceCount > 2

Fler resurser för utpressningstrojaner

Viktig information från Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Blogginlägg för Microsoft Security-teamet:

Tips

Vill du veta mer? Engage med Microsofts säkerhetscommunity i vår Tech Community: Microsoft Defender XDR Tech Community.