Repérer des menaces de ransomware

S’applique à :

  • Microsoft Defender XDR

Les rançongiciels sont rapidement passés d’un simple programme malveillant de base affectant des utilisateurs d’ordinateurs individuels à une menace d’entreprise qui affecte gravement les industries et les institutions gouvernementales. Bien que Microsoft Defender XDR offre de nombreuses fonctionnalités qui détectent et bloquent les rançongiciels et les activités d’intrusion associées, l’exécution de vérifications proactives des signes de compromission peut aider à protéger votre réseau.

En savoir plus sur les rançongiciels gérés par l’homme

Avec la chasse avancée dans Microsoft Defender XDR, vous pouvez créer des requêtes qui localisent des artefacts individuels associés à l’activité de ransomware. Vous pouvez également exécuter des requêtes plus sophistiquées qui peuvent rechercher des signes d’activité et peser ces signes pour trouver des appareils nécessitant une attention immédiate.

Signes d’activité de ransomware

Les chercheurs en sécurité Microsoft ont observé divers artefacts courants mais subtils dans de nombreuses campagnes de ransomware lancées par des intrus sophistiqués. Ces signes impliquent principalement l’utilisation d’outils système pour préparer le chiffrement, empêcher la détection et effacer les preuves d’investigation.

Activité de rançongiciel Outils courants Intent
Arrêter les processus taskkill.exe, net stop Vérifiez que les fichiers ciblés pour le chiffrement ne sont pas verrouillés par différentes applications.
Désactiver les services sc.exe - Vérifiez que les fichiers ciblés pour le chiffrement ne sont pas verrouillés par différentes applications.
- Empêcher les logiciels de sécurité de perturber le chiffrement et d’autres activités de ransomware.
- Empêcher le logiciel de sauvegarde de créer des copies récupérables.
Supprimer des journaux et des fichiers cipher.exe, wevtutil, fsutil.exe Supprimez les preuves d’investigation.
Supprimer des clichés instantanés vsadmin.exe, wmic.exe Supprimez les clichés instantanés de lecteur qui peuvent être utilisés pour récupérer des fichiers chiffrés.
Supprimer et arrêter les sauvegardes wbadmin.exe Supprimez les sauvegardes existantes et arrêtez les tâches de sauvegarde planifiées, ce qui empêche la récupération après le chiffrement.
Modifier les paramètres de démarrage bcdedit.exe Désactivez les avertissements et les réparations automatiques après les échecs de démarrage qui peuvent être causés par le processus de chiffrement.
Désactiver les outils de récupération schtasks.exe, regedit.exe, Désactivez la restauration du système et d’autres options de récupération système.

Vérifier les signes individuels d’activité de ransomware

De nombreuses activités qui constituent un comportement de ransomware, y compris les activités décrites dans la section précédente, peuvent être sans gravité. Lorsque vous utilisez les requêtes suivantes pour localiser les rançongiciels, exécutez plusieurs requêtes pour case activée si les mêmes appareils présentent différents signes d’activité de ransomware possible.

Arrêt de plusieurs processus à l’aide detaskkill.exe

Cette requête recherche les tentatives d’arrêt d’au moins 10 processus distincts à l’aide de l’utilitaire taskkill.exe . Exécuter la requête

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

Arrêt des processus à l’aide de l’arrêt net

Cette requête recherche les tentatives d’arrêt d’au moins 10 processus distincts à l’aide de la commande net stop . Exécuter la requête

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

Suppression de données sur plusieurs lecteurs à l’aide decipher.exe

Cette requête recherche les tentatives de suppression de données sur plusieurs lecteurs à l’aide decipher.exe. Cette activité est généralement effectuée par ransomware pour empêcher la récupération des données après le chiffrement. Exécuter la requête

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

Effacement des preuves forensiques des journaux d’événements à l’aide de wevtutil

Cette requête recherche les tentatives d’effacement d’au moins 10 entrées de journal des journaux des événements à l’aide de wevtutil. Exécuter la requête

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

Désactivation des services à l’aide desc.exe

Cette requête recherche les tentatives de désactivation d’au moins 10 services existants à l’aide desc.exe. Exécuter la requête

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

Désactivation de la restauration du système

Cette requête identifie les tentatives d’arrêt de la restauration du système et empêchent le système de créer des points de restauration, qui peuvent être utilisés pour récupérer des données chiffrées par ransomware. Exécuter la requête

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'

Suppression de sauvegarde

Cette requête identifie l’utilisation de wmic.exe pour supprimer les instantanés de cliché instantané avant le chiffrement. Exécuter la requête

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

Rechercher plusieurs signes d’activité de ransomware

Au lieu d’exécuter plusieurs requêtes séparément, vous pouvez également utiliser une requête complète qui recherche plusieurs signes d’activité de ransomware pour identifier les appareils affectés. La requête consolidée suivante :

  • Recherche des signes relativement concrets et subtils de l’activité de ransomware
  • Évalue la présence de ces signes
  • Identifie les appareils avec une plus grande probabilité d’être des cibles de ransomware

Lors de l’exécution, cette requête consolidée retourne une liste d’appareils qui ont montré plusieurs signes d’attaque. Le nombre de chaque type d’activité de ransomware est également indiqué. Pour exécuter cette requête consolidée, copiez-la directement dans l’éditeur de requête de repérage avancé.

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

Comprendre et ajuster les résultats de la requête

La requête consolidée retourne les résultats suivants :

  • DeviceId : identifie l’appareil affecté
  • TimeStamp : première fois qu’un signe d’activité de ransomware a été observé sur l’appareil
  • Signes d’activité spécifiques : le nombre de chaque signe affiché dans plusieurs colonnes, telles que BcdEdit ou FsUtil
  • TotalEvidenceCount : nombre de signes observés
  • UniqueEvidenceCount : nombre de types de signes observés

Exemple de requête consolidée pour une activité de ransomware dans le portail Microsoft Defender

Résultats de la requête montrant les appareils affectés et le nombre de différents signes d’activité de ransomware

Par défaut, le résultat de la requête répertorie uniquement les appareils qui ont plus de deux types d’activité de ransomware. Pour afficher tous les appareils présentant un signe d’activité de ransomware, modifiez l’opérateur suivant where et définissez le nombre sur zéro (0). Pour afficher moins d’appareils, définissez un nombre plus élevé.

| where UniqueEvidenceCount > 2

Ressources supplémentaires sur les rançongiciels

Informations clés de Microsoft :

Microsoft 365 :

Microsoft Azure :

Microsoft Defender for Cloud Apps :

Billets de blog de l’équipe de sécurité Microsoft :

Conseil

Voulez-vous en savoir plus ? Engage avec la communauté Microsoft Security dans notre communauté technique : Microsoft Defender XDR Tech Community.