Démystifier les techniques de ransomware à l'aide d'assemblages .Net : Une attaque en plusieurs étapes
Dans la première partie de cette série, nous avons examiné des exemples de capacités de programmation qui peuvent être utilisées par les ransomwares dans leurs techniques malveillantes. Dans la deuxième partie, nous avons également examiné les principes fondamentaux du cadre logiciel .Net de Microsoft et des assemblages associés EXE et DLL afin de comprendre comment ces capacités sont rendues possibles.
Dans cette dernière partie, nous combinerons tout ce qui a été discuté jusqu'à présent dans un ensemble de charges utiles mises en scène afin de démontrer les principes fondamentaux d'une attaque par charges utiles en plusieurs étapes.
Charge utile et configuration de l'attaque
Nous commençons par présenter les charges utiles qui seront utilisées pour l'attaque. Toutes les capacités précédentes, y compris les nouvelles, seront prises en compte pour créer les charges utiles échelonnées. Il s'agit de démontrer globalement comment les différentes tactiques et techniques que nous avons vues jusqu'à présent peuvent être combinées, comme c'est généralement le cas pour les ransomwares.
Nous allons utiliser les charges utiles suivantes :
- Application EXE initiale : Charge utile du stager
- EXE principal du ransomware : charge utile de l'étape 1
- 2e DLL principale du ransomware : charge utile de l'étape 2
L'utilisation de plusieurs charges utiles pour accomplir différentes tâches dans cet exemple d'attaque constitue une attaque en plusieurs étapes. Si vous vous reportez à la série précédente sur les charges utiles des logiciels malveillants et les balises, la deuxième partie a abordé plus en détail les types de charges utiles malveillantes. J'y ai expliqué la différence entre une charge utile en escalier et des types de charges utiles en escalier. En résumé, un stager est une application exécutable initiale souvent plus petite qui peut servir de téléchargeur, de dropper et/ou de charge utile pour un fichier de charge utile principal plus performant et souvent plus gros, appelé stage. L'objectif de la charge utile de la scène est d'installer la scène principale. Dans cet exemple d'attaque, en utilisant l'échelonnement des charges utiles tel que décrit ci-dessus, les différentes charges utiles auront les différentes tâches suivantes :
La charge utile du Stager EXE aura les effets suivants :
- Techniques d'évasion
- Télécharge deux fichiers "texte" sur le disque. Ces fichiers sont en fait des EXE et des DLL.
- Lancez ledeuxième fichier EXE
- L'organisateur quitte ensuite
- Ledeuxième EXE en cours d'exécution (étape 1) charge la DLL (étape 2).
Les charges utiles Stage-1 EXE et Stage-2 DLL exécutent ensuite les actions malveillantes suivantes du ransomware :
- Techniques d'évasion
- Découverte
- Manipulation des processus
- Enumération des lecteurs et des fichiers
- Cryptage des fichiers
Stager : Exécutable initial de la charge utile (EXE)
L'attaque commence avec notre charge utile initiale, le stager livré à la machine de la victime. Il s'agit souvent de techniques d'ingénierie sociale telles que l'hameçonnage. Une fois que la charge utile initiale est livrée et exécutée, elle commence à exécuter la série d'instructions malveillantes.
Evasion
Il attendra d'abord un certain temps sans effectuer aucune action. Il s'agit d'une technique d'évasion conçue pour déjouer l'analyse des menaces pesant sur les machines virtuelles. Ensuite, il télécharge un exécutable bien connu sur Internet, tel qu'une application de bloc-notes. Il s'agit d'un leurre et d'une autre tactique d'évasion pour éviter d'être détecté.

D'autres techniques peuvent consister à vérifier les clics de souris ou les répertoires de documents pour trouver des fichiers associés à l'utilisation normale d'un système informatique, par opposition à une machine virtuelle en bac à sable utilisée pour l'analyse des menaces.
Downloader, dropper et loader
Une fois que ces premières actions d'évasion ont été exécutées, la charge utile initiale (stager) exécute à nouveau une troisième action de mise en veille. Il attendra à nouveau pendant une durée déterminée avant de passer à la série d'instructions suivante, qui consistera à télécharger les fichiers de la charge utile de l'étape. Ces fichiers sont hébergés à distance par l'attaquant, comme indiqué ci-dessous.

L'organisateur procède ensuite au téléchargement de deux fichiers texte "notepadlog0120231224.txt" and “notepadlog0120231513.txt.” La phase suivante est indiquée en rouge dans l'exemple ci-dessous.
Remarquez que les liens de téléchargement des fichiers de charge utile sont en fait obscurcis à l'aide de l'encodage base64, qui a été présenté comme la quatrième technique dans la première partie de cette série.

La charge utile initiale convertit à la volée la base64 en liens de téléchargement originaux.
Les deux fichiers texte téléchargés sont en réalité un exécutable (EXE) et une bibliothèque de liens dynamiques (DLL), déguisés en fichiers texte. Il s'agit des charges utiles des étapes 1 et 2 de cet exemple d'attaque de ransomware en plusieurs étapes. Lorsque les téléchargements sont réussis, ces fichiers sont renommés en fonction de leur type d'origine.

La charge utile stager lance alors la charge utile exécutable stage-1 pour lancer l'attaque du ransomware proprement dite. La mise en scène a maintenant atteint son objectif et se termine une fois que la charge utile de l'étape 1 est chargée dans la mémoire et commence à fonctionner. Ainsi, comme nous l'avons vu dans la première technique de la première partie de cette série, la charge utile de l'étape initiale est le téléchargeur et le distributeur de la charge utile EXE de l'étape 1 et de la charge utile DLL de l'étape 2, et le chargeur uniquement de la charge utile de l'étape 1. La charge utile DLL sera chargée en tant que charge utile de niveau 2 par la charge utile EXE de niveau 1 en cours d'exécution, d'où une attaque par charge utile à plusieurs niveaux.
Stage-1exécutable (EXE)
Unefois que l'exécution a été transmise à l'exécutable de l'étape 1, celui-ci se met d'abord en veille pendant une durée déterminée, comme indiqué ci-dessous.

Il supprime ensuite le fichier de charge utile "payload_initial_stager.exe" du système de fichiers afin d'éliminer toute preuve. Dans l'exemple ci-dessous, le fichier a été supprimé et ne se trouve plus dans le répertoire.

La charge utile de l'étape 1 est maintenant prête à exécuter sa série d'actions pour poursuivre le reste de l'attaque.
Découverte
Ensuite, il exécute des techniques de découverte sur le système infecté. Ces techniques de découverte permettent à un acteur de la menace d'en savoir un peu plus sur le système infecté. La découverte aide l'opérateur de la menace à prendre certaines décisions cruciales en matière de sécurité opérationnelle afin d'assurer le succès global de l'attaque. Dans cet exemple, la charge utile de l'étape 1 vérifie la liste des processus. Parmi les processus susceptibles de présenter un intérêt, citons les processus de détection et de réponse des points finaux (EDR), d'antivirus ou de machines virtuelles. Ils permettent de comprendre la probabilité de détection de la charge utile.

Sur la base des résultats des informations de découverte, un acteur de la menace peut prendre d'importantes décisions en matière de sécurité opérationnelle. Par exemple, si un processus EDR bien connu est détecté sur le système ou si la charge utile détecte des processus de machines virtuelles, il est possible de demander à la charge utile de quitter le système pour éviter d'être détectée.

L'acteur de la menace peut également décider d'employer d'autres techniques d'évasion pour échapper au CED ou même tenter d'utiliser d'autres moyens pour mettre fin au processus de CED.
La découverte permet également de déterminer la valeur du système compromis. Par exemple, s'agit-il d'un serveur de base de données de production ou d'un système de paiement contenant des données précieuses sur les clients ? Plus le système est critique pour une entreprise, plus il y a de chances qu'une rançon soit payée pour le récupérer.
Manipulation de processus : Binaires "Vivre sans terre" (LotL)
Unautre ensemble d'informations utiles est constitué par les informations relatives au système, telles que le système d'exploitation, la langue locale, les correctifs et les mises à jour installés ou manquants dans le système. Ce type d'information peut aider à planifier d'autres attaques telles que l'exploitation de vulnérabilités.
Si le processus EDR n'a pas été trouvé, la charge utile se poursuivra car l'acteur de la menace peut être sûr de pouvoir traiter d'autres processus. Ainsi, après avoir vérifié les informations relatives au processus, la charge utile exécutable de l'étape 1 utilise une technique de survie et lance une invite de commande Windows distincte, comme le montre l'exemple ci-dessous.

Une fois l'invite de commande lancée, la charge utile lui transmet certaines commandes Windows à exécuter. Cette commande génère des informations sur le système, telles que le type de système, les informations sur le processeur, le temps de fonctionnement et les correctifs. L'exemple ci-dessous montre un instantané du résultat en rouge.

Bibliothèque de liens dynamiques (DLL) de l'étape 2
Comme nous l'avons vu dans les articles précédents, un fichier DLL contient un code informatique qui ne peut pas être exécuté seul. Ainsi, dans notre exemple, l'EXE de l'étape 1 utilise également le code de la DLL de l'étape 2 pour terminer le reste du cycle d'attaque.
Stage-1 EXE loading stage-2 DLL payload
Une fois que la charge utile EXE de l'étape 1 a terminé ses actions, elle procède au chargement de la charge utile DLL de l'étape 2. La charge utile DLL contient le code qui sera utilisé pour les étapes finales de l'attaque, à savoir la vérification des lecteurs du système et le chiffrement des fichiers sélectionnés sur ces lecteurs.

Le code DLL exécute d'abord une vérification des lecteurs pour trouver les lecteurs du système infecté, en listant des informations utiles sur chacun d'entre eux. Dans l'affichage ci-dessus, les informations sur les lecteurs du système qui sont prêts à être accédés et ceux qui ne le sont pas sont particulièrement intéressantes. Cela permet de cibler les fichiers sur les bons lecteurs pour le cryptage et d'éviter les erreurs en essayant d'opérer sur des lecteurs en lecture seule ou auxquels il est impossible d'accéder.
Chiffrement
À ce stade, le chiffrement de la rançon est prêt à être exécuté. Le code de cryptage de la DLL de l'étape 2 vérifie d'abord la présence d'une liste de fichiers texte dans le répertoire. En effet, dans cette dernière démonstration, nous ne crypterons que des fichiers texte. La charge utile affiche ensuite tous les fichiers texte trouvés.

Les fichiers découverts sont alors cryptés par la charge utile. Les extensions de fichiers sont également remplacées par ".encrypted" pour afficher les fichiers texte cryptés.

Ci-dessous, nous pouvons également voir les images avant et après du répertoire où se trouvent les fichiers texte, montrant les changements après le cryptage.

Enfin, la note de rançon : elle avertit généralement l'utilisateur que ses fichiers ont été cryptés. Il leur indique également comment payer la rançon et obtenir la clé de déchiffrement pour décrypter les fichiers. Dans de nombreux cas, le paiement de la rançon ne garantit pas automatiquement l'accès à la clé de décryptage.

Notez que dans notre exemple, nous avons choisi de placer tout le code de chiffrement dans un fichier DLL qui est devenu notre charge utile de l'étape 2. Cela s'explique principalement par le fait que, comme nous l'avons vu dans les articles précédents, une DLL est un fichier de bibliothèque, ce qui signifie qu'elle peut être réutilisée. Par exemple, si un attaquant choisit d'utiliser une charge utile EXE de stade 1 complètement différente, peut-être en raison de nouvelles améliorations en matière d'évasion à l'avenir, il n'a pas besoin de réécrire la partie chiffrement de son code de charge utile pour finaliser cette nouvelle campagne d'attaque. Nous pouvons simplement associer notre nouvelle charge utile au fichier DLL de l'étape 2 existant et faire en sorte que le nouvel EXE charge la DLL pour crypter les fichiers.
Atténuation des risques de ransomware
En fin de compte, les ransomwares utiliseront trois frontières principales : l'infection, l'exécution et la persistance.
Ils peuvent être classés dans les grandes catégories suivantes :
- Système de fichiers
- Registre
- Mémoire
- Réseau (distant et local - mouvement latéral)
Les défenseurs doivent donc s'efforcer d'acquérir les bons outils et de les utiliser de la bonne manière pour réduire efficacement les risques de sécurité. Dans la troisième partie de la série précédente sur les charges utiles et les balises des logiciels malveillants, vous trouverez une présentation plus détaillée des mesures d'atténuation de la défense en profondeur fondées sur la philosophie de la violation présumée et de la résilience cybernétique.
Cette série en trois parties a montré comment les différentes tactiques et techniques utilisées par les logiciels malveillants, et plus particulièrement les ransomwares, peuvent voir le jour. En comprenant ces différentes tactiques et techniques, les défenseurs peuvent être mieux placés pour évaluer leurs politiques et défenses cybernétiques existantes afin de trouver des contre-mesures efficaces.
Vous souhaitez en savoir plus sur la protection de votre organisation contre les ransomwares et les brèches ? Contactez-nous dès aujourd'hui.