Caçar o ransomware

Aplica-se a:

  • Microsoft Defender XDR

O Ransomware evoluiu rapidamente de ser um malware de mercadoria simples que afeta usuários individuais de computador para uma ameaça empresarial que está afetando severamente indústrias e instituições governamentais. Embora Microsoft Defender XDR forneça muitos recursos que detectam e bloqueiam o ransomware e atividades de intrusão associadas, a execução de verificações proativas em busca de sinais de comprometimento pode ajudar a manter sua rede protegida.

Ler sobre ransomware operado por humanos

Com a caça avançada em Microsoft Defender XDR, você pode criar consultas que localizam artefatos individuais associados à atividade de ransomware. Você também pode executar consultas mais sofisticadas que podem procurar sinais de atividade e pesar esses sinais para encontrar dispositivos que exigem atenção imediata.

Sinais de atividade de ransomware

Pesquisadores de segurança da Microsoft observaram vários artefatos comuns, mas sutis, em muitas campanhas de ransomware lançadas por intrusos sofisticados. Esses sinais envolvem principalmente o uso de ferramentas do sistema para se preparar para criptografia, impedir a detecção e limpar evidências forenses.

Atividade de ransomware Ferramentas comuns Intent
Interromper processos taskkill.exe, net stop Verifique se os arquivos direcionados para criptografia não são bloqueados por vários aplicativos.
Desativar serviços sc.exe – Verifique se os arquivos direcionados para criptografia não são bloqueados por vários aplicativos.
– impedir que o software de segurança interrompa a criptografia e outras atividades de ransomware.
– Impedir que o software de backup crie cópias recuperáveis.
Excluir logs e arquivos cipher.exe, wevtutil, fsutil.exe Remova evidências forenses.
Excluir cópias de sombra vsadmin.exe, wmic.exe Remova cópias de sombra de unidade que podem ser usadas para recuperar arquivos criptografados.
Excluir e parar backups wbadmin.exe Exclua os backups existentes e pare as tarefas de backup agendadas, impedindo a recuperação após a criptografia.
Modificar configurações de inicialização bcdedit.exe Desative avisos e reparos automáticos após falhas de inicialização que podem ser causadas pelo processo de criptografia.
Desativar ferramentas de recuperação schtasks.exe, regedit.exe, Desative a Restauração do Sistema e outras opções de recuperação do sistema.

Verifique se há sinais individuais de atividade de ransomware

Muitas atividades que constituem o comportamento de ransomware, incluindo as atividades descritas na seção anterior, podem ser benignas. Ao usar as consultas a seguir para localizar ransomware, execute mais de uma consulta para marcar se os mesmos dispositivos estão exibindo vários sinais de possível atividade de ransomware.

Interromper vários processos usando taskkill.exe

Essa consulta verifica as tentativas de interromper pelo menos 10 processos separados usando 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

Interromper processos usando a parada líquida

Essa consulta verifica as tentativas de interromper pelo menos 10 processos separados usando 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

Exclusão de dados em várias unidades usando cipher.exe

Essa consulta verifica as tentativas de excluir dados em várias unidades usando cipher.exe. Essa atividade normalmente é feita por ransomware para impedir a recuperação de dados após a criptografia. 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

Limpeza de evidências forenses de logs de eventos usando wevtutil

Essa consulta verifica as tentativas de limpar pelo menos 10 entradas de log de logs de eventos usando 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 usando sc.exe

Essa consulta verifica as tentativas de desativar pelo menos 10 serviços existentes usando 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 a Restauração do Sistema

Essa consulta identifica tentativas de parar a Restauração do Sistema e impedir que o sistema crie pontos de restauração, que podem ser usados para recuperar dados criptografados 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'

Exclusão de backup

Essa consulta identifica o uso de wmic.exe para excluir instantâneos de cópia de sombra antes da criptografia. Executar consulta

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

Verifique se há vários sinais de atividade de ransomware

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

  • Procura sinais relativamente concretos e sutis da atividade de ransomware
  • Pesa a presença desses sinais
  • Identifica dispositivos com maior chance de serem alvos de ransomware

Quando executada, essa consulta consolidada retorna 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 essa consulta consolidada, copie-a diretamente para o editor de consulta de caça avançado.

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

Entender e ajustar os resultados da consulta

A consulta consolidada retorna os seguintes resultados:

  • DeviceId– identifica o dispositivo afetado
  • TimeStamp — primeira vez que qualquer sinal de atividade de ransomware foi observado no dispositivo
  • Sinais específicos de atividade – a contagem para cada sinal mostrada em várias 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 mostrando dispositivos afetados e contagens de vários sinais de atividade de ransomware

Por padrão, o resultado da consulta lista apenas 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 a seguir where e defina o número como zero (0). Para ver menos dispositivos, defina um número maior.

| where UniqueEvidenceCount > 2

Mais recursos de ransomware

Informações importantes da Microsoft:

Microsoft 365:

Microsoft Azure:

Microsoft Defender for Cloud Apps:

Postagens no blog da equipe de Segurança da Microsoft:

Dica

Você deseja aprender mais? Engage com a comunidade de Segurança da Microsoft em nossa Comunidade Tecnológica: Microsoft Defender XDR Tech Community.