Procurar ransomware

Aplica-se a:

  • Microsoft Defender XDR

O ransomware evoluiu rapidamente de ser software maligno simples que afeta utilizadores individuais de computadores para uma ameaça empresarial que está a afetar severamente indústrias e instituições governamentais. Embora Microsoft Defender XDR fornece muitas capacidades que detetam e bloqueiam ransomware e atividades de intrusão associadas, a realização de verificações proativas de sinais de comprometimento pode ajudar a manter a sua rede protegida.

Leia sobre ransomware operado por humanos

Com a investigação avançada no Microsoft Defender XDR, pode criar consultas que localizam artefactos individuais associados à atividade de ransomware. Também pode executar consultas mais sofisticadas que podem procurar sinais de atividade e pesar esses sinais para encontrar dispositivos que necessitem de atenção imediata.

Sinais de atividade de ransomware

Os investigadores de segurança da Microsoft observaram vários artefactos comuns, mas subtis, em muitas campanhas de ransomware lançadas por intrusos sofisticados. Estes sinais envolvem principalmente a utilização de ferramentas do sistema para preparar a encriptação, impedir a deteção e limpar provas forenses.

Atividade de ransomware Ferramentas comuns Intenção
Parar processos taskkill.exe, net stop Certifique-se de que os ficheiros direcionados para encriptação não estão bloqueados por várias aplicações.
Desativar serviços sc.exe - Certifique-se de que os ficheiros direcionados para encriptação não estão bloqueados por várias aplicações.
- Impedir que o software de segurança interrompa a encriptação e outras atividades de ransomware.
- Impedir que o software de cópia de segurança crie cópias recuperáveis.
Eliminar registos e ficheiros cipher.exe, wevtutil,fsutil.exe Remova as provas forenses.
Eliminar cópias sombra vsadmin.exe, wmic.exe Remova cópias sombra de unidades que podem ser utilizadas para recuperar ficheiros encriptados.
Eliminar e parar cópias de segurança wbadmin.exe Elimine as cópias de segurança existentes e pare as tarefas de cópia de segurança agendadas, impedindo a recuperação após a encriptação.
Modificar definições de arranque bcdedit.exe Desative os avisos e as reparações automáticas após falhas de arranque que possam ser causadas pelo processo de encriptação.
Desativar as ferramentas de recuperação schtasks.exe, regedit.exe, Desative o Restauro do Sistema e outras opções de recuperação do sistema.

Verificar se existem sinais individuais de atividade de ransomware

Muitas atividades que constituem o comportamento de ransomware, incluindo as atividades descritas na secção anterior, podem ser benignas. Ao utilizar as seguintes consultas para localizar ransomware, execute mais do que uma consulta para verificar se os mesmos dispositivos apresentam vários sinais de possível atividade de ransomware.

Parar vários processos com taskkill.exe

Esta consulta verifica se há tentativas de parar, pelo menos, 10 processos separados com o utilitário taskkill.exe . Executar consulta

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

Parar processos com a paragem líquida

Esta consulta verifica se há tentativas de parar, pelo menos, 10 processos separados com o comando net stop . Executar consulta

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

Eliminação de dados em várias unidades com cipher.exe

Esta consulta verifica a existência de tentativas de eliminação de dados em várias unidades com cipher.exe. Normalmente, esta atividade é efetuada por ransomware para impedir a recuperação de dados após a encriptação. Executar consulta

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

Limpar provas forenses dos registos de eventos com wevtutil

Esta consulta verifica a existência de tentativas para limpar, pelo menos, 10 entradas de registo dos registos de eventos com o wevtutil. Executar consulta

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

Desativar serviços com sc.exe

Esta consulta verifica se existem tentativas de desativar, pelo menos, 10 serviços existentes com sc.exe. Executar consulta

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

Desativar o Restauro do Sistema

Esta consulta identifica as tentativas de parar o Restauro do Sistema e impedir que o sistema crie pontos de restauro, que podem ser utilizados para recuperar dados encriptados por ransomware. Executar consulta

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'

Eliminação da cópia de segurança

Esta consulta identifica a utilização de wmic.exe para eliminar instantâneos de cópia sombra antes da encriptação. Executar consulta

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

Verificar a existência de vários sinais de atividade de ransomware

Em vez de executar várias consultas separadamente, também pode utilizar uma consulta abrangente que verifica a existência de vários sinais de atividade de ransomware para identificar os dispositivos afetados. A seguinte consulta consolidada:

  • Procura sinais relativamente concretos e subtis de atividade de ransomware
  • Pesa a presença destes sinais
  • Identifica dispositivos com maior probabilidade de serem alvos de ransomware

Quando executada, esta consulta consolidada devolve uma lista de dispositivos que apresentaram vários sinais de ataque. A contagem de cada tipo de atividade de ransomware também é mostrada. Para executar esta consulta consolidada, copie-a diretamente para o editor de consultas de investigação avançada.

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

Compreender e ajustar os resultados da consulta

A consulta consolidada devolve os seguintes resultados:

  • DeviceId — identifica o dispositivo afetado
  • TimeStamp – a primeira vez que qualquer sinal de atividade de ransomware foi observado no dispositivo
  • Sinais específicos de atividade — a contagem para cada sinal apresentado em múltiplas colunas, como BcdEdit ou FsUtil
  • TotalEvidenceCount — número de sinais observados
  • UniqueEvidenceCount — número de tipos de sinais observados

Um exemplo de uma consulta consolidada para uma atividade de ransomware no portal do Microsoft Defender

Resultados da consulta que mostram os dispositivos afetados e contagens de vários sinais de atividade de ransomware

Por predefinição, o resultado da consulta lista apenas os dispositivos com mais de dois tipos de atividade de ransomware. Para ver todos os dispositivos com qualquer sinal de atividade de ransomware, modifique o operador seguinte where e defina o número como zero (0). Para ver menos dispositivos, defina um número mais elevado.

| where UniqueEvidenceCount > 2

Mais recursos de ransomware

Informações importantes da Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Mensagens de blogue da equipa de Segurança Microsoft:

Sugestão

Quer saber mais? Interaja com a comunidade do Microsoft Security na nossa Tech Community: Microsoft Defender XDR Tech Community.