Les chercheurs d'ESET ont découvert une attaque Lazarus contre une entreprise aérospatiale en Espagne, où le groupe a déployé plusieurs outils, notamment une porte dérobée non documentée publiquement que nous avons nommée LightlessCan. Les opérateurs de Lazarus ont obtenu un accès initial au réseau de l'entreprise l'année dernière après une campagne de spearphishing réussie, se faisant passer pour un recruteur de Meta - la société à l'origine de Facebook, Instagram et WhatsApp.

Le faux recruteur a contacté la victime via LinkedIn Messaging, une fonctionnalité de la plateforme de réseau social professionnel LinkedIn, et lui a envoyé deux défis de codage requis dans le cadre d'un processus d'embauche, que la victime a téléchargés et exécutés sur un appareil de l'entreprise. Le premier défi est un projet très basique qui affiche le texte "Hello, World !", le second imprime une séquence de Fibonacci - une série de nombres dans laquelle chaque nombre est la somme des deux précédents. ESET Research a pu reconstituer les étapes d'accès initiales et analyser l'ensemble des outils utilisés par Lazarus grâce à une coopération avec l'entreprise aérospatiale concernée.

Dans ce billet, nous décrivons la méthode d'infiltration et les outils déployés lors de cette attaque de Lazarus. Nous présenterons également certaines de nos conclusions sur cette attaque lors de la conférence du Virus Bulletin le 4 octobre 2023.

Points clés de l'article de blog :

  • Les employés de l'entreprise ciblée ont été contactés par un faux recruteur via LinkedIn et ont été incités à ouvrir un exécutable malveillant se présentant comme un défi de codage ou un quiz.
  • Nous avons identifié quatre chaînes d'exécution différentes, délivrant trois types de charges utiles via un chargement latéral de DLL.
  • La charge utile la plus remarquable est la porte dérobée LightlessCan, qui met en œuvre des techniques visant à empêcher la détection par les logiciels de surveillance de la sécurité en temps réel et l'analyse par les professionnels de la cybersécurité ; il s'agit d'un changement majeur par rapport à son prédécesseur BlindingCan, un RAT Lazarus HTTP(S) phare.
  • Nous attribuons cette activité avec un niveau de confiance élevé à Lazarus, en particulier à ses campagnes liées à l'opération DreamJob.
  • L'objectif final de l'attaque était le cyberespionnage.

Lazarus a transmis diverses charges utiles aux systèmes des victimes, la plus remarquable étant un cheval de Troie d'accès à distance (RAT) sophistiqué et non documenté publiquement, que nous avons baptisé LightlessCan et qui représente une avancée significative par rapport à son prédécesseur, BlindingCan. LightlessCan imite les fonctionnalités d'une large gamme de commandes Windows natives, ce qui permet une exécution discrète au sein du RAT lui-même au lieu d'exécutions bruyantes sur la console. Ce changement stratégique renforce la furtivité, ce qui complique la détection et l'analyse des activités de l'attaquant.

Lazarus s'est assuré que la charge utile ne pouvait être décryptée que sur l'ordinateur de la victime visée. Les garde-fous d'exécution sont un ensemble de protocoles et de mécanismes de protection mis en œuvre pour sauvegarder l'intégrité et la confidentialité de la charge utile lors de son déploiement et de son exécution, empêchant ainsi tout décryptage non autorisé sur des machines non prévues, telles que celles des chercheurs en sécurité. Nous décrivons la mise en œuvre de ce mécanisme dans la section Chaîne d'exécution 3 : LightlessCan (version complexe).

Attribution au groupe Lazarus

Le groupe Lazarus (également connu sous le nom de HIDDEN COBRA) est un groupe de cyberespionnage lié à la Corée du Nord qui est actif depuis au moins 2009. Il est responsable d'incidents très médiatisés tels que le piratage de Sony Pictures Entertainment et les cyberhistoires ayant coûté des dizaines de millions de dollars en 2016, l'épidémie de WannaCryptor (alias WannaCry) en 2017, les attaques de la chaîne d'approvisionnement 3CX et X_TRADER, ainsi qu'une longue série d'attaques perturbatrices contre les infrastructures publiques et critiques de la Corée du Sud depuis au moins 2011. La diversité, le nombre et l'excentricité de la mise en œuvre des campagnes Lazarus définissent ce groupe, ainsi que le fait qu'il réalise les trois piliers des activités cybercriminelles : le cyberespionnage, le cybersabotage et la recherche de gains financiers.

Les entreprises aérospatiales ne sont pas une cible inhabituelle pour les groupes de menaces persistantes avancées (APT) alignés sur la Corée du Nord. Le pays a procédé à de multiples essais nucléaires et lancé des missiles balistiques intercontinentaux, en violation des résolutions du Conseil de sécurité de l'Organisation des Nations unies (ONU). L'ONU surveille les activités nucléaires de la Corée du Nord afin d'empêcher le développement et la prolifération d'armes nucléaires ou d'armes de destruction massive, et publie des rapports semestriels sur ces activités. Selon ces rapports, les groupes APT alignés sur la Corée du Nord attaquent les entreprises aérospatiales pour tenter d'accéder à des technologies sensibles et au savoir-faire aérospatial, car les missiles balistiques intercontinentaux passent leur phase de mi-parcours dans l'espace situé en dehors de l'atmosphère terrestre. Ces rapports affirment également que l'argent provenant des cyberattaques représente une partie des coûts de développement des missiles de la Corée du Nord.

Nous attribuons l'attaque en Espagne au groupe Lazarus, et plus précisément à l'opération DreamJob, avec un niveau de confiance élevé. Le nom de l'opération DreamJob a été inventé dans un article de blog de ClearSky datant d'août 2020, décrivant une campagne de Lazarus ciblant des entreprises de défense et d'aérospatiale, dans le but de faire du cyberespionnage. Depuis lors, nous avons utilisé ce terme pour désigner diverses opérations Lazarus utilisant des offres d'emploi mais ne déployant pas d'outils clairement similaires à ceux impliqués dans ses autres activités, telles que l'opération In(ter)ception. Par exemple, la campagne impliquant des outils signés avec des certificats 2 TOY GUYS (voir ESET Threat Report T1 2021, page 11), et le cas des leurres sur le thème d'Amazon aux Pays-Bas et en Belgique publié en septembre 2022.

Notre attribution est basée sur les facteurs suivants, qui montrent une relation principalement avec la campagne sur le thème d'Amazon mentionnée précédemment :

1. Logiciels malveillants (l'ensemble des intrusions) :

  • L'accès initial a été obtenu en prenant contact via LinkedIn, puis en convainquant la cible d'exécuter un logiciel malveillant, déguisé en test, afin de réussir un processus d'embauche. Il s'agit d'une tactique connue de Lazarus, utilisée au moins depuis l'opération DreamJob.
  • Nous avons observé de nouvelles variantes de charges utiles déjà identifiées dans l'affaire néerlandaise de l'année dernière, telles que des chargeurs intermédiaires et la porte dérobée BlindingCan liée à Lazarus.
  • Les outils de cette campagne Lazarus utilisent plusieurs types de chiffrement fort - AES-128 et RC6 avec une clé de 256 bits - qui ont également été utilisés dans la campagne sur le thème d'Amazon.

2. Infrastructure :

  • Pour les serveurs C&C de premier niveau (énumérés dans la section Réseau à la fin de ce billet), les attaquants ne créent pas leurs propres serveurs, mais compromettent des serveurs existants, généralement ceux dont la sécurité est médiocre et qui hébergent des sites dont la maintenance a été négligée. Il s'agit d'un comportement typique de Lazarus, même si la confiance est faible.

3. Cui bono:

  • Le vol du savoir-faire d'une entreprise aérospatiale est conforme aux objectifs à long terme de Lazarus.

Accès initial

Le groupe a ciblé plusieurs employés de l'entreprise par le biais de la messagerie LinkedIn. Se faisant passer pour un recruteur de Meta, l'attaquant a utilisé une offre d'emploi pour attirer l'attention et la confiance de la cible. Une capture d'écran de cette conversation, que nous avons obtenue dans le cadre de notre coopération avec l'entreprise aérospatiale espagnole, est illustrée à la figure 1.

Figure_01
Figure 1. Le premier contact établi par l'attaquant se faisant passer pour un recruteur de Meta

Au début des attaques Lazarus, les cibles inconscientes sont généralement convaincues de compromettre elles-mêmes leurs systèmes. À cette fin, les attaquants emploient différentes stratégies ; par exemple, la cible est incitée à exécuter une visionneuse PDF fournie par l'attaquant (et trojanisée) pour voir le contenu intégral d'une offre d'emploi. D'autre part, la cible est encouragée à se connecter avec un client SSL/VPN troyen, en recevant une adresse IP et des informations de connexion. Les deux scénarios sont décrits dans un billet de blog de Microsoft publié en septembre 2022. Dans ce cas, l'escroc demande à la victime de prouver qu'elle maîtrise le langage de programmation C++.

Deux exécutables malveillants, Quiz1.exe et Quiz2.exe, ont été fournis à cette fin et livrés via les images Quiz1.iso et Quiz2.iso hébergées sur une plateforme de stockage en nuage tierce. Les deux exécutables sont des applications de ligne de commande très simples qui demandent des données.

Le premier est un projet Hello World, qui est un programme très basique, souvent composé d'une seule ligne de code, qui affiche le texte "Hello, World !" lorsqu'il est exécuté. Le second imprime une séquence de Fibonacci jusqu'au plus grand élément plus petit que le nombre saisi en entrée. Une séquence de Fibonacci est une série de nombres dans laquelle chaque nombre est la somme des deux précédents, commençant généralement par 0 et 1 ; cependant, dans ce défi malveillant, la séquence commence par 1 et 2. La figure 2 présente un exemple de sortie du défi de la séquence de Fibonacci. Une fois la sortie imprimée, les deux exécutables déclenchent l'action malveillante consistant à installer sur le système de la cible des charges utiles supplémentaires provenant des images ISO. La tâche d'un développeur ciblé consiste à comprendre la logique du programme et à le réécrire dans le langage de programmation C++.

Figure_03
Figure 2. Sortie du programme leurre Quiz2.exe

La chaîne d'événements qui a conduit à la compromission initiale est décrite dans la figure 3. La première charge utile livrée au système de la cible est un téléchargeur HTTP(S) que nous avons appelé NickelLoader. Cet outil permet aux attaquants de déployer n'importe quel programme dans la mémoire de l'ordinateur de la victime.

Figure_03
Figure 3. Chaîne d'événements complétant l'accès initial

Outils post-compromission

Une fois que NickelLoader fonctionne sur le système de la cible, les attaquants l'utilisent pour diffuser deux types de RAT. L'un de ces RATs est déjà connu pour faire partie de la boîte à outils Lazarus, en particulier une variante de la porte dérobée BlindingCan avec des fonctionnalités limitées mais une logique de traitement des commandes identique. Pour la distinguer, nous avons ajouté le préfixe mini- devant le nom de la variante. En outre, les attaquants ont introduit un RAT qui n'avait pas encore été documenté publiquement et que nous avons appelé LightlessCan.

Les RAT sont déployés en tant qu'étape finale de chaînes d'étapes plus ou moins complexes et sont précédés d'exécutables d'aide, tels que des droppers et des loaders. Nous qualifions un exécutable de dropper s'il contient une charge utile intégrée, même s'il n'est pas déposé sur le système de fichiers mais chargé directement dans la mémoire et exécuté. Les logiciels malveillants qui n'ont pas de tableau de données cryptées intégrées, mais qui chargent une charge utile à partir du système de fichiers, sont appelés chargeurs.

Outre les leurres initiaux liés au quiz, le tableau 1 résume les fichiers exécutables (EXE) et les bibliothèques de liens dynamiques (DLL) livrés au système de la victime. Tous les échantillons de logiciels malveillants figurant dans la troisième colonne sont des applications open-source trojanisées (voir la quatrième colonne pour le projet sous-jacent), avec un exécutable légitime chargeant latéralement une DLL malveillante. Par exemple, le fichier malveillant mscoree.dll est une version trojanisée du fichier légitime NppyPluginDll ; la DLL contient un NickelLoader intégré et est chargée par un fichier légitime PresentationHost.exe, tous deux situés dans le répertoire C:\ProgramShared.

Tableau 1. Résumé des binaires impliqués dans l'attaque

Location directory

Legitimate parent process

Malicious side-loaded DLL

Trojanized project
(payload)

C:\ProgramShared\

PresentationHost.exe

mscoree.dll

NppyPluginDll
(NickelLoader)

C:\ProgramData\Adobe\

colorcpl.exe

colorui.dll

LibreSSL 2.6.5
(miniBlindingCan)

C:\ProgramData\Oracle\Java\

fixmapi.exe

mapistub.dll

Lua plugin for Notepad++ 1.4.0.0
(LightlessCan)

C:\ProgramData\Adobe\ARM\

tabcal.exe

HID.dll

MZC8051 for Notepad++ 3.2
(LightlessCan)

LightlessCan - nouvelle porte dérobée

La charge utile la plus intéressante utilisée dans cette campagne est LightlessCan, un successeur du RAT HTTP(S) Lazarus phare du groupe appelé BlindingCan. LightlessCan est un nouveau RAT complexe qui prend en charge jusqu'à 68 commandes distinctes, indexées dans une table de fonctions personnalisée, mais dans la version actuelle, 1.0, seules 43 de ces commandes sont mises en œuvre avec une certaine fonctionnalité. Les autres commandes sont présentes, mais leur implémentation formelle se fait sous la forme d'espaces réservés, dépourvus de toute fonctionnalité réelle. Le projet derrière le RAT est définitivement basé sur le code source de BlindingCan, car l'ordre des commandes partagées est préservé de manière significative, même s'il peut y avoir des différences dans leur indexation.

La mise à jour la plus importante est l'imitation de la fonctionnalité de nombreuses commandes Windows natives telles que ping, ipconfig, systeminfo, sc, net, etc. La chaîne codée en dur "L'opération s'est terminée avec succès", le message standard du système pour le résultat ERROR_SUCCESS, nous a amené à cette idée. Le tableau 2 contient une liste des commandes mises en œuvre dans LightlessCan. Dans les attaques Lazarus précédemment rapportées, telles que documentées dans les blogposts de Positive Technologies en avril 2021 et de HvS Consulting en décembre 2020, ces commandes natives sont souvent exécutées dans de nombreux cas après que les attaquants ont pris pied dans le système de la cible. Toutefois, dans le cas présent, ces commandes sont exécutées discrètement au sein du RAT lui-même, plutôt que de manière visible dans la console du système. Cette approche offre un avantage significatif en termes de furtivité, à la fois pour échapper aux solutions de surveillance en temps réel telles que les EDR, et aux outils d'investigation numérique post-mortem. Le numéro de version interne (1.0) indique qu'il s'agit d'un nouvel effort de développement de la part des attaquants.

Les utilitaires de base de Windows étant propriétaires et non open-source, les développeurs de LightlessCan étaient confrontés à un choix : soit faire de la rétro-ingénierie sur les binaires du système fermé, soit s'inspirer du code disponible via le projet Wine, où de nombreux programmes sont réécrits afin d'imiter leur exécution sur d'autres plateformes telles que Linux, macOS ou ChromeOS. Nous sommes enclins à croire que les développeurs ont choisi la première option, car les programmes Wine correspondants qu'ils ont imités dans LightlessCan ont été implémentés un peu différemment ou pas du tout (par exemple, netsh).

Il est intéressant de noter que dans l'un des cas que nous avons analysés, la charge utile de LightlessCan est stockée dans un fichier crypté sur la machine compromise, qui ne peut être décrypté qu'à l'aide d'une clé dépendant de l'environnement. Pour plus de détails, voir la section Chaîne d'exécution 3 : LightlessCan (version complexe). Cela permet de s'assurer que la charge utile ne peut être décryptée que sur l'ordinateur de la victime visée et non, par exemple, sur l'appareil d'un chercheur en sécurité.

Tableau 2. Liste des commandes LightlessCan imitant celles de l'invite Windows

Index

Description

33

Mimic the ipconfig command from the Windows command prompt; see Figure 4.

34

Mimic the net command from the Windows prompt; see Figure 5.

35

Mimic the netshadvfirewall firewall command from the Windows prompt; see Figure 4.

36

Mimic the netstat command from the Windows prompt.

37

Mimic the ping -6 command from the Windows prompt.

38

Mimic the reg command from the Windows prompt; see Figure 7.

39

Mimic the sc command from the Windows prompt; see Figure 8.

40

Mimic the ping command from the Windows prompt.

41

Mimic the tasklist command from the Windows prompt.

42

Mimic the wmic process call create command from the Windows prompt; see Figure 9.

43

Mimic the nslookup command from the Windows Server prompt.

44

Mimic the schstasks command from the Windows prompt; see Figure 10.

45

Mimic the systeminfo command from the Windows prompt.

46

Mimic the arp command from the Windows prompt.

47

Mimic the mkdir command from the Windows prompt.

Figure_04_ipconfig
Figure 4. Chaînes codées en dur révélant le sous-ensemble de la fonctionnalité ipconfig
Figure_05_net
Figure 5.
Chaînes codées en dur
révélant le sous-ensemble de la fonctionnalité net
Figure_06_netsh
Figure 6.
Chaînes codées en dur révélant la
fonctionnalité netsh firewall
Figure_03
Figure 7.
Chaînes codées en dur révélant la
fonctionnalité (partielle) reg
Figure_03
Figure 8.
Chaînes codées en dur révélant la fonctionnalité
(partielle) sc
Figure_03
Figure 9.
Chaînes codées en dur révélant la
fonctionnalité de création d'appel de processus wmic
Figure_03
Figure 10.
Chaînes codées en dur révélant la fonctionnalité
(partielle) schtasks

En outre, un examen de la configuration interne du RAT suggère que, par rapport à BlindingCan, Lazarus a augmenté la sophistication du code de LightlessCan.

Analyse technique

Dans cette section, nous fournissons des détails techniques sur la chaîne de compromission qui fournit le téléchargeur NickelLoader et sur les trois chaînes d'exécution utilisées par Lazarus pour livrer ses charges utiles sur le système compromis.

Chaîne de compromission : NickelLoader

NickelLoader est un téléchargeur HTTP(S) exécuté sur le système compromis par chargement latéral de DLL, qui est ensuite utilisé pour livrer d'autres charges utiles Lazarus.

Le processus de livraison de NickelLoader se déroule en plusieurs étapes, en commençant par l'exécution de PresentationHost.exe, qui est déclenchée automatiquement après que la cible a exécuté manuellement les défis initiaux du quiz ; le cas Quiz1 est illustré à la figure 3. Une bibliothèque malveillante liée dynamiquement, mscoree.dll, est ensuite chargée latéralement par le fichier PresentationHost.exe légitime - tous deux situés dans C:\ProgramShared\. Cette DLL est une NppyPluginDll.dll trojanisée, issue du projet inactif General Python Plugins DLL for Notepad++ de 2011. Elle sert de dropper et possède plusieurs exportations : toutes les exportations copiées depuis le NppyPluginDll.d ll original plus toutes les exportations depuis le mscoree.dll légitime. L'une de ces exportations légitimes, CorExitProcess, contient le code malveillant responsable du décryptage et de l'exécution de l'étape suivante du logiciel malveillant.

Pour réussir à décrypter un tableau de données cryptées intégré dans le dropper, ce dernier a besoin de trois mots-clés de 16 caractères. Ces mots-clés sont les suivants

  1. le nom du processus parent(PresentationHost),
  2. le paramètre interne codé en dur dans le binaire(9zCnQP6o78753qg8), et
  3. le paramètre externe transmis sur la ligne de commande(-embeddingObject), qui est hérité du processus parent de PresentationHost.exe, étant fourni par Quiz1.exe ou Quiz2.exe.

Les mots-clés sont combinés par XOR, octet par octet, et la sortie forme la clé de décryptage AES-128.

La charge utile est un téléchargeur HTTP(S) qui reconnaît quatre commandes, toutes de cinq lettres, comme le montre le tableau 3. En raison de ces commandes de cinq lettres, nous avons choisi de nommer cette charge utile "NickelLoader", en nous inspirant du terme familier désignant la pièce américaine de cinq cents - une pièce de cinq cents. Les commandes les plus importantes sont avdrq et gabnc. Lorsque ces commandes sont émises, chacune d'entre elles charge les données reçues du serveur C&C sous la forme d'une DLL. À cette fin, les attaquants ont probablement utilisé MemoryModule, une bibliothèque qui peut être utilisée pour charger une DLL entièrement à partir de la mémoire.

Tableau 3. Liste des mots-clés magiques reconnus dans les tampons reçus

Keyword

Description

abcde

Requests another immediate command without the usual long sleep delay that separates the execution of the commands.

avdrq

Loads a DLL contained in the received buffer and executes its hardcoded export info.

gabnc

Loads a DLL contained in the received buffer.

dcrqv

Terminates itself.

Chaîne d'exécution 1 : miniBlindingCan

L'une des charges utiles téléchargées et exécutées par NickelLoader est miniBlindingCan, une version simplifiée du RAT phare du groupe, BlindingCan. Il a été signalé pour la première fois par Mandiant en septembre 2022, sous le nom AIRDRY.V2.

Pour charger miniBlindingCan, une bibliothèque liée dynamiquement malveillante de 64 bits, colorui.dll , est chargée latéralement par un fichier colorcpl.exe légitime exécuté à partir de C:\ProgramData\Adobe\ et sert de dropper. La DLL est obscurcie à l'aide de VMProtect et contient des milliers d'exportations dont LaunchColorCpl est la plus importante, car elle gère l'exécution de l'étape suivante. Le corps de la DLL contient un tableau de données crypté, ainsi que plusieurs symboles de débogage révélant le répertoire racine et le projet à partir duquel elle a été construite :

W:\NDevelop\NaTool\NShellCodeLoader\NApp\Nlibressl-2.6.5\N

Comme le nom ShellCodeLoader l'indique, l'objectif principal de cette étape initiale est de décrypter et de charger le tableau de données à partir de son corps, qui contient le shellcode. Au début de son exécution, ShellCodeLoader utilise des techniques anti-débogage en inspectant la valeur BeingDebugged dans la structure PEB (Process Environment Block) pour déterminer si elle est examinée ou analysée par des outils de débogage, et utilise des techniques anti-sandbox pour éviter d'être détecté dans les environnements sandbox conçus pour l'analyse de la sécurité. Le logiciel malveillant vérifie également de manière explicite si son processus parent est colorcpl.exe; si ce n'est pas le cas, il se retire immédiatement.

Le tableau de données décrypté n'est pas une DLL complète, mais forme un blob intermédiaire en deux parties : un shellcode suivi d'un autre tableau de données cryptées, qui représente la dernière étape de la chaîne. Le shellcode semble être produit par une instance du projet open-source ShellcodeRDI - en particulier, le code ShellcodeRDI.c. Il a probablement été produit par l'exécution du script Python ConvertToShellcode.py de ce projet sur une DLL payante servant de source pour l'injection de DLL réflexive.

La charge utile finale est extraite et décryptée à l'aide d'un XOR avec une clé longue, qui est une chaîne construite en concaténant le nom du processus parent(colorcpl.exe), le nom de fichier du dropper(colorui.dll) et le paramètre externe de la ligne de commande - dans ce cas, le résultat est COLORCPL.EXECOLORUI.DLL669498484488D3F22712CC5BACA6B7A7. Ce processus est similaire à celui que nous avons observé avec la porte dérobée BlindingCan dans le cas néerlandais que nous avons décrit précédemment dans ce billet de WeLiveSecurity. Le décryptage révèle un exécutable doté d'une fonctionnalité de téléchargement et d'exécution, dont la logique interne d'envoi et d'analyse des commandes rappelle fortement BlindingCan, un RAT Lazarus HTTP(S) phare. Contrairement au cas des Pays-Bas, il n'est pas protégé par VMP et ne prend en charge qu'un petit sous-ensemble de commandes disponibles auparavant : comparez le tableau 4 du présent article et le tableau 3 de l'article sur le cas des Pays-Bas datant de septembre 2022. Étant donné que les fonctionnalités de ce RAT sont considérablement réduites par rapport à celles de BlindingCan, et qu'elles semblent pourtant partager la même infrastructure côté serveur, nous avons choisi de le distinguer en ajoutant le préfixe "mini-" à son nom, soulignant ainsi sa fonctionnalité réduite par rapport à son homologue RAT aux fonctionnalités complètes.

Tableau 4. Commandes de miniBlindingCan

Command ID

Description

8201

Send system information like computer name, Windows version, and code page.

8232

Update the current communication interval with a value provided by the C&C server.

8233

Discontinue the command execution.

8241

Send the current configuration of size 9,392 bytes to the C&C server.

8242

Update the configuration of size 9,392 bytes, stored encrypted on the file system.

8247

Wait for the next command.

8248

Update the current communication interval with a value stored in the configuration.

8274

Download and decrypt a file from the C&C server.

8279

Execute shellcode passed as a parameter.

La figure 11 montre l'état décrypté d'une configuration de 9 392 octets intégrée à la RAT. Elle contient cinq URL, en l'occurrence des sites web compromis, chacun étant limité par une taille maximale de 260 caractères .

Figure_03
Figure 11. Configuration de la porte dérobée miniBlindingCan. La valeur en surbrillance correspond au nombre d'URL, mais seules la première et la dernière des cinq URL sont indiquées ici.
L'
objectif des deux dernières chaînes de caractères n'est pas connu

Chaîne d'exécution 2 : LightlessCan (version simple)

Une autre charge utile exécutée par NickelLoader est LightlessCan, une nouvelle porte dérobée Lazarus. Nous avons observé deux chaînes différentes qui chargent cette porte dérobée.

Dans la version simple de la chaîne, le dropper de cette charge utile est la bibliothèque malveillante liée dynamiquement mapistub.dll qui est chargée latéralement par le fichier légitime fixmapi.exe exécuté à partir de C:\ProgramData\Oracle\Java\. La DLL est un plugin Lua trojanisé, version 1.4, dont toutes les exportations ont été copiées à partir de la bibliothèque légitime Windows mapi32.dll. L'exportation FixMAPI contient le code malveillant responsable du décryptage et du chargement de l'étape suivante ; toutes les autres exportations contiennent du code bénin provenant d'un exemple de projet MineSweeper accessible au public. Ce dropper mapistub.dll a une persistance établie via une tâche planifiée. Malheureusement, nous ne disposons pas de détails supplémentaires sur cette tâche, si ce n'est que son processus parent apparaît sous la forme %WINDOWS%\system32\svchost.exe -k netsvcs -p -s Schedule.

Pour réussir à décrypter le tableau de données intégré, le dropper a besoin que trois mots-clés soient fournis correctement :

  1. le nom du processus parent(fixmapi.exe),
  2. le paramètre interne codé en dur dans le binaire(IP7pdINfE9uMz63n), et
  3. le paramètre externe passé dans la ligne de commande(AudioEndpointBuilder).

Les mots-clés sont combinés par XOR, octet par octet, et la sortie forme une clé AES de 128 bits à utiliser pour le décryptage. Notez que la longueur des mots-clés n'est pas exactement de 16 octets, mais le processus de décryptage fonctionnera toujours si la chaîne surdimensionnée est tronquée à une longueur de 16 octets (par exemple, AudioEndpointBuilder vers AudioEndpointBui), et la chaîne sous-dimensionnée, fixmapi.exe, est traitée comme fixmapi.exe\x00\x00\x00\x00\x00\x00, parce que la chaîne a été initialisée avec 260 occurrences du caractère NUL.

Chaîne d'exécution 3 : LightlessCan (version complexe)

La chaîne la plus complexe que nous avons observée sur le système compromis fournit également LightlessCan, avec différents composants impliqués dans la chaîne complète des étapes d'installation : une application légitime, un dropper initial, un dropper complet (qui contient la configuration), un dropper intermédiaire, un fichier de configuration, un fichier contenant des informations système (pour le décryptage des charges utiles cryptées sur le système de fichiers), un chargeur intermédiaire et l'étape finale, le RAT LightlessCan. Les connexions et les relations entre ces fichiers sont illustrées à la figure 12.

Figure_12_chain
Figure 12. Une chaîne complexe d'étapes livrant la quatrième charge utile

Le dropper initial de la quatrième chaîne est une bibliothèque malveillante liée dynamiquement HID.dll qui est chargée latéralement par un exécutable légitime, tabcal.exe, exécuté à partir de C:\ProgramData\Adobe\ARM\. La DLL est une version trojanisée de MZC8051.dll, un fichier légitime du projet de compilateur 8051 C plugin pour Notepad++. Elle contient toutes les exportations du projet original, mais aussi les exportations nécessaires de la bibliothèque utilisateur Hid légitime de Microsoft, afin que le chargement latéral par tabcal.exe soit réussi. L'exportation HidD_GetHidGuid contient le code malveillant responsable de l'abandon de l'étape suivante et, comme dans le cas du dropper de la chaîne précédente (chaîne d'exécution 2), toutes les autres exportations contiennent le code MineSweeper bénin.

Comme dans les cas précédents, trois longs mots-clés doivent être fournis pour décrypter la charge utile intégrée :

  1. le nom du processus parent(tabcal.exe),
  2. le paramètre interne codé en dur dans le binaire(9zCnQP6o78753qg8), et
  3. le paramètre externe(LocalServiceNetworkRestricted) - cette fois-ci non pas sous la forme d'un paramètre de ligne de commande, mais sous la forme du contenu d'un fichier situé à %WINDOWS%\system32\thumbs.db.

Une fois encore, les mots-clés sont combinés par XOR, octet par octet, et le résultat forme une clé AES de 128 bits à utiliser pour le décryptage. Comme dans le cas précédent, les longueurs des mots-clés ne sont pas toutes exactement de 16 octets, mais le décryptage fonctionnera toujours si la chaîne surdimensionnée est tronquée (par exemple, à LocalServiceNetw) et si la chaîne sous-dimensionnée est étendue avec des zéros (par exemple, à tabcal.exe\x00\x00\x00\x00\x00\x00\x00\x00).

L'exécutable produit par la recette ci-dessus est le dropper complet de la figure 12 et possède la ressource InternalName AppResolver.dll (trouvée dans la ressource VERSIONINFO). Il contient deux tableaux de données cryptées : un petit de 126 octets et un grand de 1 807 464 octets (qui contient trois sous-parties). Tout d'abord, il décrypte le petit tableau à l'aide de l'algorithme RC6 avec la clé codée en dur de 256 bits DA 48 A3 14 8D BF E2 D2 EF 91 12 11 FF 75 59 A3 E1 6E A0 64 B8 78 89 77 A0 37 91 58 5A FF FF 07. La sortie représente les chemins vers lesquels les deux premières sous-parties du grand blob sont déposées (c'est-à-dire LightlessCan et le dropper intermédiaire), et produit les chaînes de caractères C:\windows\system32\oci.dll et C:\windows\system32\grpedit.dat.

Ensuite, il poursuit le décryptage du deuxième tableau de données - le grand blob - en utilisant la même clé de cryptage que précédemment. Le résultat est un blob décrypté contenant trois sous-parties : une DLL correspondant à grpedit.dat (LightlessCan), une DLL correspondant à oci.dll (le dropper intermédiaire) et un fichier crypté de 14 948 octets déposé dans %WINDOWS%\System32\wlansvc.cpl (configuration) ; comme le montre la figure 13.

Figure_03
Figure 13. Configuration décryptée stockée dans wlansvc.cpl

En outre, le dropper complet stocke également plusieurs caractéristiques identifiant le système compromis dans le fichier %WINDOWS%\System32\4F59FB87DF2F, dont le nom est codé en dur dans le binaire. Ces caractéristiques sont principalement extraites du chemin d'accès au registre Computer\HKLM\HARDWARE\DESCRIPTION\System\BIOS. Voici les valeurs spécifiques de ces caractéristiques, ainsi qu'une commande PowerShell fournie entre parenthèses qui peut être utilisée pour afficher la valeur correspondante sur n'importe quelle machine Windows :

  • SystemBIOSDate(Get-ItemProperty "HKLM:\NHARDWARE\NDescription\NSystem\NBIOS" -Name BIOSReleaseDate | Select-Object -Property BIOSReleaseDate)
  • SystemBIOSVersion(Get-CimInstance -ClassName Win32_Bios | Select-Object -Property Version)
  • SystemManufacturer(Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property Manufacturer)
  • SystemProductName(Get-CimInstance -ClassName Win32_ComputerSystemProduct | Select-Object -Property Name)
  • Identifiant dans Computer\HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\DiskController\0\DiskPeripheral\0

La concaténation des valeurs est nécessaire pour décrypter le fichier crypté grpedit.dat du système de fichiers. Sur une machine de test exécutant une image de Windows 10 sur VMWare, la sortie peut être :

11/12/20INTEL - 6040000VMware, Inc.VMware Virtual Platform656ba047-20b25a2a-A

Le fichier oci.dll est une autre couche de dépôt - le dépôt intermédiaire qui dépose le chargeur intermédiaire, qui est une charge utile similaire à celle décrite dans le cas néerlandais mentionné précédemment. Là encore, les attaquants ont utilisé un projet open-source, le plugin Flashing Tip pour Notepad++, qui n'est plus disponible en ligne. Contrairement aux cas précédents, seuls deux longs mots-clés doivent être fournis afin de décrypter avec succès la charge utile intégrée à l'aide de l'AES-128 :

  1. le nom du processus parent(msdtc.exe), et
  2. le paramètre interne codé en dur dans le fichier binaire(fb5XPNCr8v83Y85P).

Les deux mots-clés sont combinés par XOR, octet par octet (le nom du processus parent est tronqué ou complété par des NULL, si nécessaire, pour remplir 16 octets). Le produit du décryptage est le chargeur intermédiaire(LLTMapperAPI.dll). Il utilise les informations système (identiques aux valeurs stockées dans 4F59FB87DF2F) pour déchiffrer le fichier de configuration wlansvc.cpl et pour localiser, déchiffrer et charger le fichier crypté grpedit.dat, qui est LightlessCan, le nouveau RAT complet.

Conclusion

Nous avons décrit une nouvelle attaque Lazarus qui trouve son origine sur LinkedIn, où de faux recruteurs approchent leurs victimes potentielles, qui utilisent des ordinateurs d'entreprise à des fins personnelles. Même si le public devrait être sensibilisé à ce type d'attaques, le taux de réussite de ces campagnes n'a pas encore été réduit à zéro.

L'aspect le plus inquiétant de l'attaque est le nouveau type de charge utile, LightlessCan, un outil complexe et probablement évolutif qui présente un niveau élevé de sophistication dans sa conception et son fonctionnement, ce qui représente une avancée significative dans les capacités malveillantes par rapport à son prédécesseur, BlindingCan.

Les attaquants peuvent désormais limiter considérablement les traces d'exécution de leurs programmes de ligne de commande Windows préférés, qui sont largement utilisés dans leurs activités post-compromission. Cette manœuvre a des implications considérables, car elle a un impact sur l'efficacité des solutions de surveillance en temps réel et des outils d'investigation numérique post-mortem.

IoCs

Fichiers

SHA-1

Filename

Detection

Description

C273B244EA7DFF20B1D6B1C7FD97F343201984B3

%TEMP%\7zOC35416EE\Quiz1.exe

Win64/NukeSped.KT

An initial dropper disguised as a “Hello World” challenge that triggers the compromise.

38736CA46D7FC9B9E5C74D192EEC26F951E45752

%TEMP%\7zOCB3CC96D\Quiz2.exe

Win64/NukeSped.KT

An initial dropper disguised as a “Fibonacci sequence” challenge that triggers the compromise.

C830B895FB934291507E490280164CC4234929F0

%ALLUSERSPROFILE%\Adobe\colorui.dll

Win64/NukeSped.KV

A VMProtect-ed dropper side-loaded by the legitimate colorcpl.exe. It contains the debug information string W:\Develop\aTool\ShellCodeLoader\App\libressl-2.6.5.

8CB37FA97E936F45FA8ECD7EB5CFB68545810A22

N/A

Win64/NukeSped.KU

The miniBlindingCan backdoor dropped by colorui.dll.

0F33ECE7C32074520FBEA46314D7D5AB9265EC52

%ALLUSERSPROFILE%\Oracle\Java\mapistub.dll

Win64/NukeSped.KW

A dropper of LightlessCan, side-loaded by the legitimate fixmapi.exe.

C7C6027ABDCED3093288AB75FAB907C598E0237D

N/A

Win64/NukeSped.KW

A LightlessCan backdoor dropped by mapistub.dll.

C136DD71F45EAEF3206BF5C03412195227D15F38

C:\ProgramShared\mscoree.dll

Win64/NukeSped.KT

A dropper of NickelLoader, side-loaded by PresentationHost.exe. It is dropped by both quiz-related samples: C273B244EA7DFF20B1D6B1C7FD97F343201984B3 and 38736CA46D7FC9B9E5C74D192EEC26F951E45752.

E61672B23DBD03FE3B97EE469FA0895ED1F9185D

N/A

Win64/NukeSped.KT

An HTTPS downloader we’ve named NickelLoader, dropped by mscoree.dll.

E18B9743EC203AB49D3B57FED6DF5A99061F80E0

%ALLUSERSPROFILE%\Adobe\ARM\HID.dll

Win64/NukeSped.KX

An initial dropper side-loaded by the legitimate tabcal.exe.

10BD3E6BA6A48D3F2E056C4F974D90549AED1B96

N/A

Win64/NukeSped.KT

The complete dropper AppResolver.dll dropped by HID.dll in the complex chain of LightlessCan delivery.

3007DDA05CA8C7DE85CD169F3773D43B1A009318

%WINDIR%\system32\grpedit.dat

Win64/NukeSped.KW

A LightlessCan backdoor dropped in the complex chain of its delivery.

247C5F59CFFBAF099203F5BA3680F82A95C51E6E

%WINDIR%\system32\oci.dll

@Trojan.Win64/NukeSped.MI

The intermediate dropper dropping the intermediate loader in the complex chain of the LightlessCan delivery.

EBD3EF268C71A0ED11AE103AA745F1D8A63DDF13

N/A

Win64/NukeSped.KT

The intermediate loader of LightlessCan.

Réseau

IP

Domain

Hosting provider

First seen

Details

46.105.57[.]169

bug.restoroad[.]com

OVH SAS

2021‑10‑10

A compromised legitimate site hosting the C&C server:

http://bug.restoroad[.]com/admin/view_status.php

50.192.28[.]29

hurricanepub[.]com

Comcast Cable Communications, LLC

2020‑01‑06

A compromised legitimate site hosting the C&C server:

https://hurricanepub[.]com/include/include.php

67.225.140[.]4

turnscor[.]com

Liquid Web, L.L.C

2020‑01‑03

A compromised legitimate WordPress-based site hosting the C&C server:

https://turnscor[.]com/wp-includes/contacts.php

78.11.12[.]13

mantis.quick.net[.]pl

Netia SA

2021‑03‑22

A compromised legitimate site hosting the C&C server:

http://mantis.quick.net[.]pl/library/securimage/index.php

89.187.86[.]214

www.radiographers[.]org

Coreix Ltd

2020‑10‑23

A compromised legitimate site hosting the C&C server:

https://www.radiographers[.]org/aboutus/aboutus.php

118.98.221[.]14

kapata-arkeologi.kemdikbud.go[.]id

Pustekkom

2020‑01‑02

A compromised legitimate site hosting the C&C server:

https://kapata-arkeologi.kemdikbud.go[.]id/pages/payment/payment.php

160.153.33[.]195

barsaji.com[.]mx

GoDaddy.com, LLC

2020‑03‑27

A compromised legitimate site hosting the C&C server:

http://barsaji.com[.]mx/src/recaptcha/index.php

175.207.13[.]231

www.keewoom.co[.]kr

Korea Telecom

2021‑01‑17

A compromised legitimate site hosting the C&C server:

http://www.keewoom.co[.]kr/prod_img/201409/prod.php

178.251.26[.]65

kerstpakketten.horesca-meppel[.]nl

InterRacks B.V.

2020‑11‑02

A compromised legitimate WordPress-based site hosting the C&C server:

https://kerstpakketten.horesca-meppel[.]nl/wp-content/plugins/woocommerce/lib.php

185.51.65[.]233

kittimasszazs[.]hu

DoclerNet Operations, ORG-DHK1-RIPE

2020‑02‑22

A compromised legitimate site hosting the C&C server:

https://kittimasszazs[.]hu/images/virag.php

199.188.206[.]75

nrfm[.]lk

Namecheap, Inc.

2021‑03‑13

A compromised legitimate WordPress-based site hosting the C&C server:

https://nrfm[.]lk/wp-includes/SimplePie/content.php

Techniques ATT&CK de MITRE

Ce tableau a été construit en utilisant la version 13 du cadre ATT&CK de MITRE.

Tactic

ID

Name

Description

Reconnaissance

T1593.001

Search Open Websites/Domains: Social Media

Lazarus attackers used LinkedIn to identify and contact specific employees of a company of interest.

Resource Development

T1584.004

Acquire Infrastructure: Server

Compromised servers were used by the Lazarus HTTP(S) backdoors and the downloader for C&C.

T1585.001

Establish Accounts: Social Media Accounts

Lazarus attackers created a fake LinkedIn identity of a headhunter from Meta.

T1585.003

Establish Accounts: Cloud Accounts

Lazarus attackers had to create an account on a third-party cloud storage in order to deliver the initial ISO images.

T1587.001

Develop Capabilities: Malware

Custom tools from the attack are likely developed by the attackers. Some exhibit highly specific kernel development capacities seen earlier in Lazarus tools.

T1608.001

Stage Capabilities: Upload Malware

Lazarus attackers uploaded the initial ISO images to a cloud storage.

Initial Access

T1566.002

Phishing: Spearphishing Link

The target received a link to a third-party remote storage with malicious ISO images.

T1566.003

Phishing: Spearphishing via Service

The target was contacted via LinkedIn Messaging.

Execution

T1106

Native API

Windows APIs are essential for miniBlindingCan and LightlessCan to function and are resolved dynamically at runtime.

T1053

Scheduled Task/Job

Based on the parent process, a scheduled task was probably created to trigger thesimple chain of the LightlessCan execution.

T1129

Shared Modules

NickelLoader can load and execute an arbitrary DLL within memory.

T1204.002

User Execution: Malicious File

Lazarus attackers relied on the execution of Quiz1.exe and Quiz2.exe from the ISO files.

T1047

Windows Management Instrumentation

One of the LightlessCan commands allows creation of a new process via WMI.

Persistence

T1053

Scheduled Task/Job

Based on the parent process, a scheduled task was probably created to trigger the simple chain of the LightlessCan execution. Moreover, LightlessCan can mimic the schtasks command.

Defense Evasion

T1134.002

Access Token Manipulation: Create Process with Token

LightlessCan can create a new process in the security context of the user represented by the specified token and collect the output.

T1622

Debugger Evasion

There’s an anti-debug check in the dropper of miniBlindingCan.

T1480

Execution Guardrails

There’s a parent process check in the miniBlindingCan dropper. The concatenation of the values is required for decryption of the encrypted LightlessCan from the file system.

T1140

Deobfuscate/Decode Files or Information

Many of these Lazarus tools and configurations are encrypted on the file system, e.g., LightlessCan in grpedit.dat and its configuration in wlansvc.cpl.

T1574.002

Hijack Execution Flow: DLL Side-Loading

Many of the Lazarus droppers and loaders use a legitimate program for their loading.

T1027.002

Obfuscated Files or Information: Software Packing

Lazarus obfuscated several executables by VMProtect in this attack, e.g., colorui.dll

T1027.007

Obfuscated Files or Information: Dynamic API Resolution

Both LightlessCan and miniBlindingCan resolve Windows APIs dynamically.

T1027.009

Obfuscated Files or Information: Embedded Payloads

The droppers of all malicious chains contain an embedded data array with an additional stage.

T1562.003

Impair Defenses: Impair Command History Logging

New features of LightlessCan mimic the most useful Windows command line utilities, to avoid executing the original console utilities.

T1562.004

Impair Defenses: Disable or Modify System Firewall

LightlessCan can mimic the netsh command and interact with firewall rules.

T1070.004

Indicator Removal: File Deletion

LightlessCan has the ability to delete files securely.

T1070.006

Indicator Removal: Timestomp

LightlessCan can alter the modification timestamps of files.

T1202

Indirect Command Execution

LightlessCan bypasses command execution by implementing their functionality.

T1055

Process Injection

LightlessCan and miniBlindingCan use various types of process injection.

T1497.003

Virtualization/Sandbox Evasion: Time Based Evasion

The miniBlindingCan dropper has an intentional initial execution delay.

T1620

Reflective Code Loading

Most of the droppers use reflective DLL injection.

Discovery

T1083

File and Directory Discovery

LightlessCan can locate a file by its name.

T1135

Network Share Discovery

LightlessCan can mimic the net share command.

T1057

Process Discovery

LightlessCan identifies processes by name.

T1012

Query Registry

LightlessCan queries the registry for various system information it uses for encryption.

T1018

Remote System Discovery

LightlessCan can mimic the net view command.

T1016

System Network Configuration Discovery

LightlessCan can mimic the arp and ipconfig commands.

T1049

System Network Connections Discovery

LightlessCan can mimic the netstat command.

T1007

System Service Discovery

LightlessCan can mimic the sc query and tasklist commands.

Command and Control

T1071.001

Application Layer Protocol: Web Protocols

NickelLoader, LightlessCan, and miniBlindingCan use HTTP and HTTPS for C&C.

T1573.001

Encrypted Channel: Symmetric Cryptography

LightlessCan and miniBlindingCan encrypt C&C traffic using the AES-128 algorithm.

T1132.001

Data Encoding: Standard Encoding

LightlessCan and miniBlindingCan encode C&C traffic using base64.

Exfiltration

T1041

Exfiltration Over C2 Channel

LightlessCan can exfiltrate data to its C&C server.