Ricerca ransomware
Si applica a:
- Microsoft Defender XDR
Ransomware si è evoluto rapidamente da semplice malware commodity che colpisce i singoli utenti di computer a una minaccia aziendale che sta gravemente influenzando settori e istituzioni governative. Anche se Microsoft Defender XDR offre molte funzionalità che rilevano e bloccano ransomware e le attività di intrusione associate, l'esecuzione di controlli proattivi per i segni di compromissione può aiutare a mantenere la rete protetta.
Con la ricerca avanzata in Microsoft Defender XDR, è possibile creare query che individuano singoli artefatti associati all'attività ransomware. È anche possibile eseguire query più sofisticate che possono cercare segni di attività e pesare tali segni per trovare i dispositivi che richiedono attenzione immediata.
Ricercatori di sicurezza Microsoft hanno osservato vari artefatti comuni ma sottili in molte campagne ransomware lanciato da intrusi sofisticati. Questi segni implicano principalmente l'uso di strumenti di sistema per preparare la crittografia, impedire il rilevamento e chiarire le prove forensi.
Attività ransomware | Strumenti comuni | Intento |
---|---|---|
Arrestare i processi | taskkill.exe, net stop | Assicurarsi che i file destinati alla crittografia non siano bloccati da varie applicazioni. |
Disattivare i servizi | sc.exe | - Verificare che i file destinati alla crittografia non siano bloccati da varie applicazioni. - Impedire che il software di sicurezza interrompa la crittografia e altre attività ransomware. - Interrompi la creazione di copie ripristinabili da parte del software di backup. |
Eliminare log e file | cipher.exe, wevtutil, fsutil.exe | Rimuovere le prove forensi. |
Eliminare copie shadow | vsadmin.exe, wmic.exe | Rimuovere le copie shadow dell'unità che possono essere usate per ripristinare i file crittografati. |
Eliminare e arrestare i backup | wbadmin.exe | Eliminare i backup esistenti e arrestare le attività di backup pianificate, impedendo il ripristino dopo la crittografia. |
Modificare le impostazioni di avvio | bcdedit.exe | Disattiva avvisi e riparazioni automatiche dopo errori di avvio che possono essere causati dal processo di crittografia. |
Disattivare gli strumenti di ripristino | schtasks.exe, regedit.exe, | Disattivare Ripristino di sistema e altre opzioni di ripristino del sistema. |
Molte attività che costituiscono il comportamento ransomware, incluse le attività descritte nella sezione precedente, possono essere benigne. Quando si usano le query seguenti per individuare il ransomware, eseguire più di una query per verificare se gli stessi dispositivi presentano vari segni di possibile attività ransomware.
Questa query verifica la presenza di tentativi di arrestare almeno 10 processi separati usando l'utilità taskkill.exe . Esegui query
// 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
Questa query verifica la presenza di tentativi di arrestare almeno 10 processi separati usando il comando net stop . Esegui query
// 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
Questa query verifica la presenza di tentativi di eliminazione dei dati in più unità usando cipher.exe. Questa attività viene in genere eseguita dal ransomware per impedire il ripristino dei dati dopo la crittografia. Esegui query
// 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
Questa query verifica la presenza di tentativi di cancellare almeno 10 voci di log dai log eventi usando wevtutil. Esegui query
// 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
Questa query verifica la presenza di tentativi di disattivare almeno 10 servizi esistenti usando sc.exe. Esegui query
// 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
Questa query identifica i tentativi di arrestare Il ripristino del sistema e impedire al sistema di creare punti di ripristino, che possono essere usati per recuperare i dati crittografati da ransomware. Esegui query
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'
Questa query identifica l'uso di wmic.exe per eliminare gli snapshot di copia shadow prima della crittografia. Esegui query
DeviceProcessEvents
| where FileName =~ "wmic.exe"
| where ProcessCommandLine has "shadowcopy" and ProcessCommandLine has "delete"
| project DeviceId, Timestamp, InitiatingProcessFileName, FileName,
ProcessCommandLine, InitiatingProcessIntegrityLevel, InitiatingProcessParentFileName
Invece di eseguire diverse query separatamente, è anche possibile usare una query completa che verifica la presenza di più segni di attività ransomware per identificare i dispositivi interessati. La query consolidata seguente:
- Cerca segni relativamente concreti e sottili di attività ransomware
- Pesa la presenza di questi segni
- Identifica i dispositivi con una maggiore probabilità di essere obiettivi di ransomware
Quando viene eseguita, questa query consolidata restituisce un elenco di dispositivi che hanno mostrato più segni di attacco. Viene visualizzato anche il conteggio di ogni tipo di attività ransomware. Per eseguire questa query consolidata, copiarla direttamente nell'editor di query di ricerca avanzata.
// 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
La query consolidata restituisce i risultati seguenti:
DeviceId: identifica il dispositivo interessato
TimeStamp: prima volta che è stato osservato un segno di attività ransomware sul dispositivo
Segni di attività specifici: il conteggio per ogni segno visualizzato in più colonne, ad esempio BcdEdit o FsUtil
TotalEvidenceCount: numero di segni osservati
UniqueEvidenceCount: numero di tipi di segni osservati
Risultati delle query che mostrano i dispositivi interessati e i conteggi dei vari segni di attività ransomware
Per impostazione predefinita, i risultati della query elencano solo i dispositivi con più di due tipi di attività ransomware. Per visualizzare tutti i dispositivi con qualsiasi segno di attività ransomware, modificare l'operatore seguente where
e impostare il numero su zero (0). Per visualizzare un minor numero di dispositivi, impostare un numero più alto.
| where UniqueEvidenceCount > 2
Informazioni chiave di Microsoft:
- La minaccia crescente del ransomware, Post di blog di Microsoft On the Issues del 20 luglio 2021
- Ransomware gestito da umani
- Distribuire rapidamente le misure di prevenzione ransomware
- Report Microsoft sulla difesa digitale 2021 (vedere le pagine 10-19)
- Ransomware: report di analisi delle minacce pervasivo e in corso nel portale di Microsoft Defender
Microsoft 365:
- Implementare la protezione ransomware per il tenant Microsoft 365
- Ottimizzare la resilienza ransomware con Azure e Microsoft 365
- Playbook di risposta agli eventi imprevisti ransomware
- Protezione da malware e ransomware
- Proteggere il PC Windows da ransomware
- Gestione di ransomware in SharePoint Online
- Report di analisi delle minacce per ransomware nel portale di Microsoft Defender
Microsoft Azure:
- Difese di Azure dagli attacchi ransomware
- Ottimizzare la resilienza ransomware con Azure e Microsoft 365
- Piano di backup e ripristino per la protezione da ransomware
- Proteggere da ransomware con Backup di Microsoft Azure (video di 26 minuti)
- Ripristino da una compromissione dell'identità sistemica
- Rilevamento avanzato di attacchi multistage in Microsoft Sentinel
- Rilevamento fusioni per ransomware in Microsoft Sentinel
Microsoft Defender for Cloud Apps:
Post di blog del team Microsoft Security:
Tre passaggi per prevenire e recuperare da ransomware (settembre 2021)
Guida alla lotta contro i ransomware gestiti dall'uomo: parte 1 (settembre 2021)
Passaggi chiave su come il team Microsoft Detection and Response (DART) conduce indagini sugli incidenti ransomware.
Guida alla lotta contro i ransomware gestiti dall'uomo: parte 2 (settembre 2021)
Consigli e procedure consigliate.
-
Vedere la sezione Ransomware.
Attacchi ransomware umani: un’emergenza evitabile (marzo 2020)
Include analisi della catena di attacchi effettivi.
Norsk Hydro risponde agli attacchi ransomware con la trasparenza (dicembre 2019)
Suggerimento
Per saperne di più, Engage con la community Microsoft Security nella community tech: Microsoft Defender XDR Tech Community.