Windows Server 2022 et FSRM : comment se protéger des ransomwares ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à configurer FSRM sur notre serveur de fichiers de manière à déployer une première barrière de protection contre les ransomwares. Pour cela, nous allons utiliser un script PowerShell prêt à l'emploi, développé par mes soins et personnalisable pour votre environnement.
Pour rappel, un ransomware, en français rançongiciel, est un logiciel malveillant qui va chiffrer vos données et vous demander de payer une rançon si vous souhaitez obtenir la clé de déchiffrement dans le but de récupérer vos données. Dans certains cas, les données sont également exfiltrées dans le but d'être divulguées ou revendues.
- Lecture recommandée : FSRM et le filtrage de fichiers
II. L'intérêt de cette protection
Avec le filtrage de fichiers de FSRM, on va pouvoir bannir certaines extensions de fichiers (et noms de fichiers) sur notre serveur de fichiers Windows Server. En bloquant les extensions associées aux ransomwares, on empêchera le ransomware de chiffrer les fichiers, car il ne pourra pas enregistrer le fichier dans son nouveau format.
Prenons un exemple. L'extension ".locky" associée au ransomware Locky. S'il est exécuté par un pirate sur votre serveur de fichiers, il ne pourra pas chiffer vos données, car l'extension ".locky" est bloquée sur les volumes/dossiers où sont situées vos données grâce à la règle mise en place et déployée via le script PowerShell.
Cette technique est connue depuis plusieurs années et mérite d'être toujours mise en place aujourd'hui puisqu'elle se met en place facilement et qu'elle protège vos données.
III. Que va faire ce script ?
Lorsque le script BlockRansomwares.ps1 sera exécuté sur votre serveur de fichiers, que va-t-il faire ?
Ce script sert à configurer le filtrage de fichiers dans FSRM sur votre serveur et à maintenir à jour la configuration. Ce script va :
- Créer un groupe de fichiers
Ce groupe de fichiers contiendra la liste de toutes les extensions associées aux attaques par ransomware. Pour cela, on va s'appuyer sur la liste accessible à cette adresse qui est la relève du site fsrm.experiant.ca puisque la liste n'est plus maintenue après des années d'existences. Cette liste contient tous les noms de fichiers et toutes les extensions qui ont été utilisées par des ransomwares.
Cette liste sera mise à jour par le script (que l'on exécutera en tâche planifiée) pour tenir compte des changements apportés dans la liste téléchargée via l'API.
- Créer un modèle de groupe de fichiers
Un modèle de groupe de fichiers sera créé pour effectuer du filtrage actif sur les extensions correspondantes à notre groupe de fichiers précédemment créé. Cela va aussi activer les notifications par e-mail et l'avertissement dans le journal des événements.
- Créer les règles de filtre de fichiers
Pour finir, ce script va mettre en place les règles de filtrages de fichiers pour protéger les dossiers et volumes de votre choix.
- Logs et rapports
Les actions réalisées par ce script seront journalisées dans des fichiers de logs et un rapport par e-mail pourra être envoyé à destination du service informatique à chaque exécution. Ce rapport contient la liste des nouvelles extensions ajoutées et des extensions supprimées.
IV. Déployer BlockRansomwares
Le projet BlockRansomwares se découpe en trois fichiers :
- Prerequis-BlockRansomwares.ps1 : un script qui sert à vérifier la version PowerShell du serveur et à installer le rôle FSRM s'il n'est pas installé
- BlockRansomwares.ps1 : le script qui sert à déployer la configuration et qu'il faut exécuter en tâche planifiée (au moins une fois par jour) pour mettre à jour la liste des extensions
- BlockRansomwares.psd1 : un fichier de configuré appelé par le script de configuration qui vous permet de personnaliser le fonctionnement de l'outil
Voyons plus en détail comment cela se passe...
A. Prérequis
La première étape consiste à exécuter le script qui vérifie les prérequis, en tant qu'administrateur. Un retour de la console sera généré.
.\Prerequis-BlockRansomwares.ps1
B. Personnaliser la configuration
La seconde étape consiste à personnaliser la configuration avec "BlockRansomwares.psd1".
Chaque paramètre est commenté, mais voici quelques informations complémentaires :
- ClientName : nom de l'entreprise qui ressortira dans les rapports envoyés par e-mail (voir plus loin dans l'article)
- APIMode :
- En mode "Incremental", on ajoute les nouvelles extensions ajoutées dans la liste récupérée sur GitHub mais on ne supprime pas celles qui seraient supprimées dans cette même liste
- En mode "Sync", on se calque à l'identique de la liste, pour tenir compte des ajouts et suppressions
- ExtensionsToExclude : s'il y a une extension qui vous pose problème et qu'elle est dans la liste récupérée, vous pouvez l'exclure ici (plusieurs valeurs possibles)
- ExtensionsToInclude : s'il y a une ou plusieurs extensions à ajouter, en plus de celles présentes dans la liste
- ProtectAllShares :
- Si ce paramètre est sur vrai ($true), le script va protéger tous les partages de fichiers du serveur, sauf ceux correspondants aux chemins déclarés dans DirToExclude
- Si ce paramètre est sur faux ($false), le script va protéger uniquement les chemins déclarés dans DirToProtect
- SMTP : les paramètres pour envoyer les e-mails, attention cela va venir écraser vos paramètres dans FSRM (si c'est déjà configuré) donc remettez vos valeurs
Une fois que la configuration est prête, le script de mise en place peut être exécuté.
C. Déployer la protection anti-ransomware dans FSRM
On exécute le script :
.\BlockRansomwares.ps1
Par défaut, il va chercher le fichier de configuration dans le même répertoire que le script. Sinon, il faut spécifier le paramètre -Config.
La sortie dans la console permet de voir ce qu'il se passe.
Un nouveau groupe de fichiers sera créé :
Un nouveau modèle de filtre de fichiers sera créé :
Enfin, la protection sera déployée sur tous les partages ciblés d'après la configuration de l'outil. Il est à noter que c'est uniquement de l'ajout : si une nouvelle exclusion est ajoutée dans la liste, ou que l'on change de mode, la protection n'est pas supprimée. Actuellement, on fait uniquement de l'ajout et actualisation.
Dans le même temps, un rapport par e-mail est envoyé. Voici à quoi il ressemble :
D. Créer une tâche planifiée pour la mise à jour automatique
Pour que la liste des extensions soit actualisée fréquemment, on va créer une tâche planifiée qui s'exécuter une fois par jour et qui va relancer le script BlockRansomwares.ps1.
Cette tâche doit être créée par vos soins et exécuter le script via PowerShell. Ce qui donnera :
V. Conclusion
Grâce à la mise en place de ce filtrage, une barrière de protection très intéressante est en place sur votre serveur de fichiers ! Ce qui peut, potentiellement, vous éviter quelques sueurs froides....
Ce script est disponible en libre accès sur mon GitHub :
Vous pouvez aussi consulter ce projet similaire et qui mérite d'être connu :
Pour aller plus loin, on pourrait :
- Désactiver temporairement le service de partage de fichiers du serveur de manière à bloquer l'attaque (attention aux éventuels faux positifs...)
- Créer une règle de refus sur le partage pris pour cible en bloquant l'utilisateur qui a cherché à créer le fichier avec une extension bannie
Qu'en pensez-vous ? N'hésitez pas à laisser un commentaire si vous avez des idées d'amélioration.
Si vous souhaitez déployer cette solution sur votre serveur, vous pouvez me solliciter pour l'intégration !
Au temps pour moi, j’ai écris un peu vite … 😀
BlockRansomwares.ps1 ligne 131, les exclusions ne sont pas retirées de la liste:
$FSRMapiJsonExt = $FSRMapiJsonExt | Where{ $_ -ne $FSRM_ExtensionsToExclude }
à corriger avec:
$FSRMapiJsonExt = $FSRMapiJsonExt | Where-Object { $FSRM_ExtensionsToExclude -notcontains $_ }
Hello Guyot,
Merci beaucoup pour tes corrections, je viens de tester et de mettre à jour la version sur GitHub ! Sympa de ta part ! 🙂
Salut, bientôt 2 mois que j’utilise ton code avec beaucoup de satisfaction.
En me basant sur le travail de Matt Hopton, (https://blog.netwrix.com/2016/04/11/ransomware-protection-using-fsrm-and-powershell/), je propose d’ajouter le blocage automatique de l’utilisateur sur tous les partages du serveur de cette façon: (testé et fonctionnel sur WS2019)
Merci 😉
BlockRansomwares.psd1
FSRM = @{
…
# Ajoute une commande PowerShell personnalisée
Cmd = »C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe »
# Bloque l’accès de l’utilisateur au partages du serveur en cas de détection
CmdParameters =’-ExecutionPolicy Unrestricted -NoLogo -Command « & { Get-SmbShare -Special $false | ForEach-Object { Block-SmbShareAccess -Name $_.Name -AccountName »[Source Io Owner] » -Force } } »‘
# Restauration de l’accès:
# Get-SmbShare -Special $false | ForEach-Object { Unblock-SmbShareAccess -Name $_.Name -AccountName ‘COMPTEADEBLOQUER’ -Force }
# Source: https://blog.netwrix.com/2016/04/11/ransomware-protection-using-fsrm-and-powershell/
}
BlockRansomwares.psd1
Ligne 44, ajout: $FSRM_Cmd = $ClientConfig.FSRM.Cmd
Ligne 45, ajout: $FSRM_CmdParameters = $ClientConfig.FSRM.CmdParameters
Ligne 218, modif: -Body « L’utilisateur [Source Io Owner] a tenté de sauvegarder le fichier [Source File Path] dans [File Screen Path] sur le serveur [Server]. Cette extension est contenue dans le groupe [Violated File Group], et elle n’est pas autorisée sur ce serveur. Tous les accès aux partages de ce serveur ont été bloqués pour cet utilisateur. » -RunLimitInterval 30
Ligne 221, modif: -Body « L’utilisateur [Source Io Owner] a tenté d’enregistrer [Source File Path] dans [File Screen Path] sur le serveur [Server]. Ce fichier se trouve dans le groupe de fichiers [Violated File Group], qui n’est pas autorisé sur le serveur. Tous les accès aux partages de ce serveur ont été bloqués pour cet utilisateur. » -RunLimitInterval 30
Ligne 222, ajout: $FSRM_NotifAction = New-FsrmAction -Type Command -Command $FSRM_Cmd -CommandParameter $FSRM_CmdParameters -SecurityLevel LocalSystem -KillTimeOut 1
ligne 241, modif: New-FsrmFileScreenTemplate -Name $FSRM_FilesTemplateName -Active:$True -IncludeGroup « $FSRM_FilesGroupName » -Notification $FSRM_NotifEvent,$FSRM_NotifEmail,$FSRM_NotifAction
Bonjour,
Mes rapports m’indiquent aucune modification d’extensions depuis 3 semaines, normal ?
Cordialement
Revenu a la normal ce jour