Jaa


Kiristysohjelmien etsiminen

Koskee seuraavia:

  • Microsoft Defender XDR

Kiristyshaittaohjelmat kehittyivät nopeasti yksinkertaisesta hyödykeohjelmistosta, joka vaikuttaa yksittäisiin tietokoneen käyttäjiin, yritysuhaksi, joka vaikuttaa vakavasti teollisuudenaloihin ja valtion laitoksiin. Vaikka Microsoft Defender XDR tarjoaa monia ominaisuuksia, jotka havaitsevat ja estävät kiristysohjelmia ja niihin liittyviä tunkeilutoimintoja, ennakoivat tarkistukset kompromissien merkeistä voivat auttaa pitämään verkkosi suojattuna.

Lue ihmisen ylläpitämästä kiristyshaittaohjelmasta

Kehittyneen metsästyksen Microsoft Defender XDR avulla voit luoda kyselyitä, jotka paikantavat kiristyshaittaohjelmatoimintaan liittyviä yksittäisiä artefakteja. Voit myös suorittaa kehittyneempiä kyselyitä, jotka voivat etsiä toiminnan merkkejä ja punnita näitä merkkejä löytääkseen laitteita, jotka vaativat välitöntä huomiota.

Kiristyshaittaohjelmatoiminnan merkit

Microsoftin tietoturvatutkijat ovat havainneet erilaisia yleisiä mutta hienovaraisia artefakteja monissa kehittyneiden tunkeilijoiden käynnistäissä kiristyshaittaohjelmakampanjoissa. Näihin etumerkkeihin liittyy enimmäkseen järjestelmätyökalujen käyttö salaukseen valmistautumiseen, tunnistamisen estämiseen ja rikosteknisten todisteiden selvittämiseen.

Kiristyshaittaohjelmatoiminta Yleiset työkalut Tarkoitus
Pysäytä prosessit taskkill.exe, verkon pysäytys Varmista, että eri sovellukset eivät ole lukinneet salaukseen liittyviä tiedostoja.
Palveluiden poistaminen käytöstä sc.exe - Varmista, että eri sovellukset eivät ole lukinneet salaukseen liittyviä tiedostoja.
- Estä suojausohjelmistoa häiritsemästä salausta ja muuta kiristyshaittaohjelmatoimintaa.
- Lopeta varmuuskopio-ohjelmiston luominen palautettavia kopioita.
Lokien ja tiedostojen poistaminen cipher.exe, wevtutil, fsutil.exe Poista rikostekniset todisteet.
Poista tilannevedokset vsadmin.exe, wmic.exe Poista aseman tilannevedokset, joita voidaan käyttää salattujen tiedostojen palauttamiseen.
Poista ja pysäytä varmuuskopiot wbadmin.exe Poista olemassa olevat varmuuskopiot ja pysäytä ajoitetut varmuuskopiointitehtävät estäen palautuksen salauksen jälkeen.
Muokkaa käynnistysasetuksia bcdedit.exe Poista käytöstä varoitukset ja automaattiset korjaukset salausprosessin aiheuttamien käynnistysvirheiden jälkeen.
Poista palautustyökalut käytöstä schtasks.exe, regedit.exe, Poista käytöstä järjestelmän palautus ja muut järjestelmän palautusasetukset.

Tarkista yksittäiset kiristyshaittaohjelmatoiminnan merkit

Monet toiminnot, jotka ovat kiristyshaittaohjelmakäyttäytymistä, mukaan lukien edellisessä osiossa kuvatut toimet, voivat olla hyvänlaatuisia. Kun käytät seuraavia kyselyitä kiristyshaittaohjelman paikantamiseen, suorita useampi kuin yksi kysely tarkistaaksesi, onko samoissa laitteissa erilaisia merkkejä mahdollisesta kiristyshaittaohjelmatoiminnasta.

Useiden prosessien lopettaminen taskkill.exe avulla

Tämä kysely tarkistaa yritykset pysäyttää vähintään 10 erillistä prosessia taskkill.exe apuohjelmalla. Suorita kysely

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

Pysäytetään prosessit verkon pysäytyksen avulla

Tämä kysely tarkistaa yritykset pysäyttää vähintään 10 erillistä prosessia käyttämällä net stop -komentoa. Suorita kysely

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

Useiden asemien tietojen poistaminen cipher.exe

Tämä kysely tarkistaa yritykset poistaa tietoja useista asemista käyttämällä cipher.exe. Tämän toiminnan suorittaa yleensä kiristyshaittaohjelma tietojen palauttamisen estämiseksi salauksen jälkeen. Suorita kysely

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

Rikosteknisten todisteiden tyhjentäminen tapahtumalokeista wevtutilia käyttämällä

Tämä kysely tarkistaa yritykset tyhjentää vähintään 10 lokimerkintää tapahtumalokeista käyttämällä wevtutilia. Suorita kysely

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

Palveluiden poistaminen käytöstä sc.exe avulla

Tämä kysely tarkistaa yritykset poistaa käytöstä vähintään 10 aiemmin luotua palveluasc.exeavulla . Suorita kysely

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

Järjestelmän palauttamisen poistaminen käytöstä

Tämä kysely tunnistaa yritykset pysäyttää järjestelmän palautus ja estää järjestelmää luomasta palautuspisteitä, joita voidaan käyttää kiristyshaittaohjelman salaamien tietojen palauttamiseen. Suorita kysely

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'

Varmuuskopioinnin poistaminen

Tässä kyselyssä tunnistetaan tilannevedoksen tilannevedosten poistaminen wmic.exe avulla ennen salausta. Suorita kysely

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

Tarkista useita merkkejä kiristyshaittaohjelmatoiminnasta

Sen sijaan, että suoritit useita kyselyitä erikseen, voit myös käyttää kattavaa kyselyä, joka tarkistaa useita kiristyshaittaohjelman toiminnan merkkejä tunnistaaksesi kyseiset laitteet. Seuraava yhdistetty kysely:

  • Etsii sekä suhteellisen konkreettisia että hienovaraisia merkkejä kiristyshaittaohjelmatoiminnasta
  • Punnitsi näiden merkkien esiintymistä
  • Tunnistaa laitteet, joilla on suurempi mahdollisuus olla kiristyshaittaohjelman kohteena

Kun tämä yhdistetty kysely suoritetaan, se palauttaa luettelon laitteista, joissa on ollut useita merkkejä hyökkäyksestä. Näytetään myös kunkin tyyppisten kiristyshaittaohjelmatoimintojen määrä. Jos haluat suorittaa tämän yhdistetyn kyselyn, kopioi se suoraan kehittyneeseen metsästyskyselyeditoriin.

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

Kyselyn tulosten ymmärtäminen ja muokkaaminen

Yhdistetty kysely palauttaa seuraavat tulokset:

  • DeviceId – tunnistaa kyseessä olevan laitteen
  • TimeStamp – ensimmäinen kerta, kun laitteessa havaittiin merkkejä kiristyshaittaohjelmasta
  • Tietyt toiminnan merkit – jokaisen useassa sarakkeessa näkyvän merkin määrä, kuten BcdEdit tai FsUtil
  • TotalEvidenceCount – havaittujen merkkien määrä
  • UniqueEvidenceCount – havaittujen merkkityyppien määrä

Esimerkki Microsoft Defender portaalin yhdistetystä kyselystä kiristyshaittaohjelmatoiminnalle

Kyselytulokset, jotka näyttävät kyseiset laitteet ja useita merkkejä kiristyshaittaohjelmatoiminnasta

Oletusarvoisesti kyselyn tuloksessa luetellaan vain laitteet, joissa on yli kaksi kiristyshaittaohjelmatoimintaa. Jos haluat nähdä kaikki laitteet, joilla on merkkejä kiristyshaittaohjelmatoiminnasta, muokkaa seuraavaa where operaattoria ja määritä numeroksi nolla (0). Jos haluat nähdä vähemmän laitteita, määritä suurempi luku.

| where UniqueEvidenceCount > 2

Lisää kiristysohjelmaresursseja

Tärkeimmät tiedot Microsoftilta:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Microsoftin tietoturvatiimin blogikirjoituksia:

Vihje

Haluatko tietää lisää? Ota yhteyttä Microsoft Security -yhteisöön Tech Community -yhteisössä: Microsoft Defender XDR Tech Community.