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.
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
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 :
- Menace croissante des rançongiciels, billet de blog Microsoft On the Issues du 20 juillet 2021
- Rançongiciel géré par l’humain
- Déployer rapidement des préventions contre les rançongiciels
- Rapport de défense numérique Microsoft 2021 (voir les pages 10 à 19)
- Ransomware : rapport d’analyse des menaces omniprésent et continu dans le portail Microsoft Defender
Microsoft 365 :
- Déployer la protection contre les rançongiciels pour votre client Microsoft 365
- Optimisez la résilience aux ransomwares avec Azure et Microsoft 365
- Playbooks de réponse aux incidents de ransomware
- Protection contre les rançongiciels et programmes malveillants
- Protéger votre PC Windows contre les rançongiciels
- Gérer les rançongiciels dans SharePoint Online
- Rapports d’analyse des menaces pour les rançongiciels dans le portail Microsoft Defender
Microsoft Azure :
- Défenses Azure pour les attaques par rançongiciel
- Optimisez la résilience aux ransomwares avec Azure et Microsoft 365
- Plan de sauvegarde et de restauration pour se protéger contre les rançongiciels
- Se protéger contre les rançongiciels avec la Sauvegarde Microsoft Azure (vidéo de 26 minutes)
- Récupération d’une compromission d’identité systémique
- Détection avancée d’attaques à plusieurs niveaux dans Azure Sentinel
- Détection de fusion pour les ransomware dans Azure Sentinel
Microsoft Defender for Cloud Apps :
Billets de blog de l’équipe de sécurité Microsoft :
Trois étapes pour empêcher et récupérer des rançongiciels (septembre 2021)
Guide de la lutte contre les ransomware gérés par des personnes : Partie 1 (septembre 2021)
Étapes clés sur la façon dont l’équipe de détection et de réponse de Microsoft (CAS) effectue des enquêtes sur les incidents de ransomware.
Guide de la lutte contre les ransomware gérés par des personnes : Partie 2 (septembre 2021)
Recommandations meilleures pratiques
-
Consultez la section Rançongiciel.
Attaques par rançongiciels contrôlés par l’homme : un sinistre pouvant être évité (mars 2020)
Inclut des analyses de chaîne d’attaques des attaques réelles.
Réponse au rançongiciel : payer ou ne pas payer ? (Décembre 2019)
Norsk Hydro répond aux attaques par rançongiciel avec transparence (décembre 2019)
Conseil
Voulez-vous en savoir plus ? Engage avec la communauté Microsoft Security dans notre communauté technique : Microsoft Defender XDR Tech Community.