Sélection de la langue

EtherHiding : Le Cheval de Troie dans votre chaîne d’outils

Le Centre canadien pour la cybersécurité (Centre pour la cybersécurité) suit activement une campagne visant à exploiter la technologie de la chaîne de blocs pour héberger et distribuer secrètement un maliciel. Cette campagne tire parti d’une technique appelée EtherHiding.

Le Centre pour la cybersécurité a compilé une analyse détaillée tirée d’une récente enquête pour aider les responsables de la défense à combattre les attaques tirant parti de cette technique. Cette analyse examine l’évolution et l’utilisation de la technique EtherHiding et elle fournit une caractérisation en profondeur des techniques de l’auteur de menace, ainsi que des conseils importants en matière de mesures d’atténuation et de détection.

Table des matières

Sommaire

Cet article technique vise à sensibiliser et à décrire certaines des tactiques, des techniques et des procédures (TTP) associées à la cyberattaque EtherHiding. Les conclusions préliminaires du Centre pour la cybersécurité démontrent que, dans l’incident analysé, l’auteur de menace a inséré un téléchargeur malveillant JavaScipt en une seule ligne dans un fichier de configuration pour le cadre Tailwind CSS (tailwind.config.js).

La charge de virus JavaScipt téléchargée consiste en une porte dérobée avancée conçue pour une opération secrète, et elle fonctionne dans l’environnement d’exécution Node.js faisant partie intégrante de Visual Studio Code (VS Code) ou de Cursor AI (une version modifiée de VS Code). Elle a été conçue de manière à infecter les machines de développeuses et développeurs, à effectuer le vol de fichiers ou de répertoires et à exécuter une commande à partir d’un serveur de commande et de contrôle (C2). L’analyse subséquente de ce module dorsal a permis d’obtenir de l’information précieuse sur l’étendue de la compromission ainsi que sur les intentions et les activités de l’auteur de menace.

Aperçu d’un incident

Note : Bien que l’on ne sache pas comment l’auteur de menace a pu envoyer le fichier, cette analyse technique tente d’expliquer comment il a été en mesure de réaliser l’exécution du code à distance, de maintenir la persistance, de tirer parti des techniques C2 et d’exfiltrer des données.

En travaillant sur un projet d’intelligence artificielle (IA) utilisant le cadre CSS Node.js Tailwind, une développeuse ou un développeur a observé un commit inconnu utilisé pour son dépôt GitHub interne privé. Ce commit a modifié le fichier tailwind.config.js à la vue de toutes et tous. Rembourré de plus d’un millier d’espaces blancs, le fichier s’est intégré parfaitement à l’espace professionnel de la développeuse ou du développeur, ce qui le rend difficile à détecter lors de revues de routine de code. Une assistance technique a été sollicitée auprès du Centre pour la cybersécurité pour aider à l’analyse et à l’identification de menaces.

Le code malveillant est conçu pour profiter de l’écosystème Node.js, qui est couramment utilisé par des développeuses et développeurs pour créer et tester des applications. Lorsqu’une développeuse ou un développeur interagit avec le dépôt, la charge de virus cachée est déclenchée dans l’environnement sans qu’il le sache.

Figure 1 : Chemin d’attaque illustrant comment l’auteur de menace a obtenu l’accès et s’est déplacé dans l’environnement

Figure 1 - Description détaillée suit immédiatement
Description détaillée - Chemin d’attaque illustrant comment l’auteur de menace a obtenu l’accès et s’est déplacé dans l’environnement

La figure illustre un graphique de cyberattaque en plusieurs phases. Elle commence par l’exécution d’un fichier JavaScript malveillant qui récupère le code de hachage de transaction des plateformes de cryptomonnaie. Cela déclenche une chaîne d’événements impliquant plusieurs téléchargeurs et une porte dérobée JavaScript (InvisibleFerret) pour exécuter des charges de virus malveillantes et permettre un accès non autorisé.

Analyse de l’incident

Note : Pour améliorer la lisibilité du code source, le contenu peut être mis à jour en ajoutant des commentaires ou en renommant les fonctions et les variables.

Techniques mitre att&CK observées durant l’analyse

L’information ci-dessous est basée sur le chemin d’attaque indiqué sur la figure 1.

Observation 1

Observation 2

Observation 3

Observation 4

Observation 1

Tactiques observées : Execution (TA0002 – en anglais seulement); Defense evasion (TA0005 – en anglais seulement); Resource development (TA0042 – en anglais seulement)

Tactiques observées : Command and scripting interpreter: JavaScript (T1059.007 – en anglais seulement); Masquerading (T1036 – en anglais seulement); Stage capabilities: Upload malware (T1608.001 – en anglais seulement)

Une fois déclenché, le maliciel exécute des routines JavaScript personnalisées qui décryptent et lancent d’autres charges de virus. L’attaque se fait en plusieurs phases et est dynamique.

Phase 1

Le fichier tailwind.config.js charge un téléchargeur jadesnow qui demande un code de hachage de transaction à partir d’adresses de portefeuille codées en dur sur les chaînes de blocs Tron ou Aptos.Note de bas de page 1

Figure 2 : Organigramme illustrant comment le script demande un code de hachage de transaction

Figure 2 - Description détaillée suit immédiatement
Description détaillée - Organigramme illustrant comment le script demande un code de hachage de transaction

La figure illustre les phases initiales d’une cyberattaque, en commençant par l’exécution d’un fichier JavaScript (tailwind.config.js) malveillant dans un environnement Node.js. Ce script déclenche le téléchargeur jadesnow Downloader1, qui récupère un code de hachage de transaction à partir des plateformes de cryptomonnaie.

Phase 2

À l’aide du code de hachage de transaction, le téléchargeur jadesnow récupère une charge de virus de la chaîne de blocs Binance Smart Chain (BSC) par le biais d’une requête JSON RPC POST. La charge de virus est déchiffrée par XOR au moyen d’une clé codée en dur et exécutée avec JavaScript.

Figure 3 : Organigramme illustrant comment la charge de virus est chiffrée par XOR

Figure 3 - Description détaillée suit immédiatement
Description détaillée - Organigramme illustrant comment la charge de virus est chiffrée par XOR

La figure illustre un segment de cyberattaque impliquant deux téléchargeurs malveillants. Le « jadesnow Downloader1 » télécharge une charge de virus à partir de Binance (étape 3) et déchiffre la charge de virus à l’aide de l’opérateur logique XOR (étape 4) pour produire un fichier JavaScript (payload1.js). Le fichier déchiffré est ensuite exécuté (étape 5), déclenchant le « jadesnow Downloader2 » pour continuer la chaîne d’attaque.

Phase 3

La charge de virus déchiffrée est un autre téléchargeur jadesnow, qui répète le processus de récupération et de déchiffrement de la chaîne de blocs avec de nouvelles combinaisons de portefeuilles et une clé XOR codée en dur. La charge de virus est un chargeur pour la porte dérobée InvisibleFerret.Javascript.Note de bas de page 2

Figure 4: Comment la charge de virus déchiffrée reprend le processus à l’aide de nouvelles combinaisons de portefeuilles

Figure 4 - Description détaillée suit immédiatement
Description détaillée - Comment la charge de virus déchiffrée reprend le processus à l’aide de nouvelles combinaisons de portefeuilles

La figure illustre comment le maliciel de téléchargeur « jadesnow Downloader2 » récupère un code de hachage de transaction des plateformes de cryptomonnaies TRON et APTOS. À l’aide de ce code de hachage de transaction, il télécharge une charge de virus de la chaîne de blocs Binance qui est déchiffrée au moyen de l’opérateur logique XOR pour produire un fichier JavaScript (payload2.js). Il est ensuite exécuté pour déclencher le téléchargeur « jadesnow Downloader1 » et continuer la séquence d’attaque.

Phase 4

La dernière charge de virus est un autre téléchargeur jadesnow qui est déchiffré par XOR au moyen d’une clé statique. Ce variant du maliciel cherche un dispositif d’arrêt d’urgence (process.env.jsbot) pour s’arrêter s’il est détecté, il tente de déployer le langage de programmation Python (python.zip, python.7z, 7zr.exe), et il exécute des scripts (au démarrage, client) pour d’autres compromissions.

Figure 5 : Clé de déchiffrement XOR

Figure 5 - Description détaillée suit immédiatement
Description détaillée - Clé de déchiffrement XOR

La figure illustre comment le maliciel de téléchargeur « jadesnow Downloader1 » récupère un code de hachage de transaction des plateformes de cryptomonnaies TRON et APTOS. À l’aide de ce code de hachage de transaction, il télécharge une charge de virus de la chaîne de blocs Binance qui est déchiffrée au moyen de l’opérateur logique XOR pour produire un fichier JavaScript (payload3.js). Il est ensuite exécuté pour déclencher le téléchargeur « jadesnow Downloader3 » et continuer la séquence d’attaque.

Observation 2

Tactiques observées : Privilege escalation (TA0004 – en anglais seulement); Persistence (TA0003 – en anglais seulement)

Technique observée :Event triggered execution: Component object model hijacking (T1546.015 – en anglais seulement)

InvisibleFerret.Javascript s’injecte dans les fichiers de télémesure de VS Code et de Cursor AI pour reconfigurer des fichiers comme index.js dans les modules internes de l’éditeur. Le code injecté comprend un étiquetage personnalisé de session comme [5-74-<date>]<hostname>$<username>.

Il maintient une communication permanente avec ses opératrices et opérateurs à l’aide des connexions HTTP POST et socket.io en attendant de recevoir des commandes, et il tentera de se reconnecter toutes les cinq secondes si la connexion est coupée.

Étant donné que ce module est chargé de générer des identifiants de machine uniques, en prendre possession permet au maliciel de :

  • suivre les utilisatrices et utilisateurs dans les sessions et les installations
  • laisser fuir de l’information
  • maintenir un accès continu

Les chemins pour le fichier injecté varient selon le système d’exploitation (SE) :

  • Windows: %localappdata%\Programs\Microsoft VS Code\resources\app\node_modules\@vscode\deviceid\dist\index.js
  • MacOS: /Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/@vscode/deviceid/dist/index.js
  • Linux: /usr/share/code/resources/app/node_modules/@vscode/deviceid/dist/index.js

Observation 3

Tactiques observées : Command and control (TA0011); Discovery (TA0007)

Techniques observées : Application layer protocol: Web protocols (T1071.001 – en anglais seulement); Application layer protocol: DNS (T1071.004 – en anglais seulement); System location discovery (T1614 – en anglais seulement)

La communication avec l’infrastructure de l’auteur de menace est gérée spécifiquement par les requêtes HTTP POST vers des adresses IP codées en dur et des identifiants URI. Divers serveurs C2 et points d’extrémité comprennent une valeur numérique de 5 à 74 dans l’adresse URL qui correspond à un maliciel ou à un numéro de version de la campagne défini dans le programme JavaScript.

Le maliciel récupère l’information externe de l’IP pour déterminer l’emplacement géographique de la victime, ce qui permet à l’auteur de menace de mieux dresser un profil de l’environnement infecté et d’adapter ses opérations. Il prend également en charge une panoplie d’autres commandes, comme il est indiqué ci-dessous.

Commandes prises en charge avec descriptions et techniques

  • cd : change l’emplacement actuel au répertoire cible
  • ss_info : renvoie l’information concernant l’exécution de l’application Node.js, la version, la session, le système d’exploitation et le chemin.
  • ss_ip : obtient l’information de l’adresse IP externe à partir de ip-api[.]com/json
  • ss_upf : téléverse un fichier
  • ss_upd : téléverse un répertoire
  • ss_dir : change l’emplacement actuel au répertoire des modules
  • ss_fcd : change l’emplacement actuel au répertoire cible
  • ss_inz : injecte le code JavaScript dans VS Code
  • ss_eval : exécute le code JavaScript avec la fonction eval

Les commandes ci-dessus permettent à l’auteur de menace de mener des activités de collecte de données (Tactique : Collection (TA0009) – Data from Local System (T1005 - en anglais seulement)) et d’exécuter un code arbitraire sur les systèmes touchés.

Observation 4

Tactique observée : Exfiltration (TA0010 – en anglais seulement)

Technique observée : Exfiltration over C2 channel (T1041 – en anglais seulement)

Des routines robustes et récursives sont utilisées pour téléverser un fichier unique ou l’ensemble d’un répertoire dans les serveurs contrôlés par l’auteur de menace. Le maliciel tire ensuite parti des modules Node.js comme Axios et FormData pour créer des requêtes HTTP POST en plusieurs parties avec contenu « multipart/form-data » pour assurer la compatibilité avec les serveurs Web et les données en transit.

La fonction récursive de téléversement du maliciel (recursiveHttpUpload) parcourt les répertoires en recueillant des chemins de fichier et en téléversant chaque fichier individuellement. Il y a un suivi des réussites et des échecs, et des messages d’état sont retournés au serveur C2 par des événements socket.io. L’exfiltration ne se limite pas aux fichiers, car des arborescences entières de répertoires peuvent être envoyées, ce qui permet aux auteurs de menace de détourner de grands volumes de code source, de fichiers de configuration ou de données sensibles en même temps.

Indicateurs de compromission et recommandations

Des indicateurs de compromission (IC) ont été distribués par le biais d’alertes et de communications de l’équipe nationale d’intervention en cas d’incident lié à la cybersécurité (EIIC). Cela a permis aux partenaires de tous les secteurs de recevoir l’information dont ils avaient besoin pour agir de manière décisive.

Pour obtenir de l’information à jour sur les alertes et avis ou des conseils en matière de cybersécurité, veuillez communiquer avec le Centre pour la cybersécurité.

Configuration JavaScript malveillante

  • tailwind.config.js
    • SHA256: d043f264ff5216fa724cad2d35ba4d895c43e295df72be6d46c07a3a46cfbd62

Charges de virus

  • payload2.js (InvisibleFerret.Javascript)
    • SHA256: 7237310e076459d2fce2f531941b5920e451f390a8b8e633787b62b68b1315d5
  • boot-decoded-2.js
    • SHA256: 91822e59bd642f8e6f321011d0fb45b8a5f0854547ea898dead5d5af1db3ed9b

URL C2

  • /verify-human/5-74

URL C2 pour point d’extrémité de téléversement

  • /u/f/

C2 IPs

  • 166.88.4[.]2
  • 23.27.202[.]27
  • 23.27.202[.]143
  • 136.0.9[.]8

Port C2

  • 27017

Outils et services du Centre pour la cybersécurité

Aucun outil unique, aucun service ou aucune solution prédéfinie ne peut en soi reconstituer un incident, tracer le chemin d’un auteur de menace ou valider une menace. Une approche holistique faisant appel à plusieurs points de vue est nécessaire pour mener une enquête approfondie. Ainsi, le Centre pour la cybersécurité s’appuie sur des sources de télémétrie à plusieurs niveaux pour détecter les menaces et protéger les biens surveillés.

AssemblyLine a été utilisé pour assurer un triage à grande échelle, en traitant des centaines de milliers de fichiers par jour. En réponse à cet incident, le Centre pour la cybersécurité a également établi des règles YARA pour aider à la détection de fichiers malveillants en lien aux activités de l’auteur de menace. De nouvelles règles YARA seront publiées régulièrement après la période d’évaluation pour garantir l’exactitude des données.

La règle YARA ci-dessous permet la détection de charges de virus similaires extraites d’un hôte compromis.

Figure 6 : Règle YARA pour téléchargeur dépersonnalisé jadesnow

Figure 6 - Description détaillée suit immédiatement
Description détaillée - Règle YARA pour téléchargeur dépersonnalisé jadesnow

Cette règle YARA cible spécifiquement les maliciels associés à la famille des maliciels jadesnow. Elle utilise une combinaison de métadonnées, notamment un identificateur unique, une empreinte numérique, une version et une description, ainsi qu’une condition et une séquence de chaînes spécifiques pour identifier la présence du téléchargeur dépersonnalisé dans les fichiers. La condition cherche une valeur hexadécimale spécifique et la présence d’une séquence de chaînes dépersonnalisées pour signaler les menaces.

Code
rule jadesnow_obfuscated_downloader { 
    meta: 
      id = "1vzA18HaXi4AzFlgIvijiq" 
      fingerprint = "02701150de12a2a30a570cb0c1147d32b005fe618a6eceb1452e1c1eaba6b27a" 
      version = "1.0" 
      modified = "2025-12-30" 
      status = "RELEASED" 
      sharing = "TLP:GREEN" 
      source = "CCCS" 
      author = "reveng@CCCS" 
      description = "Detects the obfuscated downloader appended to legitimate GitHub projects, used by jadesnow" 
      category = "malware" 
      malware_type = "downloader" 
      report = "TA25-0064" 
      hash = "d043f264ff5216fa724cad2d35ba4d895c43e295df72be6d46c07a3a46cfbd62" 
      first_imported = "2025-12-30" 
      strings: $obfuscated_downloader = /\s{200}global\[[\x09\x0A\x0D\x20-\x7E]+function[\x09\x0A\x0D\x20-\x7E]+\.length;[\x09\x0A\x0D\x20-\x7E]+charAt\([\x09\x0A\x0D\x20-\x7E]+\.join/ 
      condition: uint16(0) != 0x5A4D and 
      $obfuscated_downloader 
    }

Mentions

Le Centre canadien pour la cybersécurité, qui fait partie du Centre de la sécurité des télécommunications Canada (CST), est un fier membre de la collectivité des cinq, la plus ancienne et la plus étroite alliance en matière d’échange de renseignements. Le partage des IC et des TTP avec la collectivité de la cybersécurité et les partenaires de la collectivité des cinq a joué un rôle déterminant depuis la découverte de la campagne EtherHiding, et des échanges analytiques en cours ont permis de maximiser la valeur des données recueillies.

Une collaboration plus poussée avec des organisations comme Mandiant a permis l’échange d’analyses détaillées de logiciels malveillants et de données techniques, en renforçant les défenses collectives.

Avis de non-responsabilité : Le Centre pour la cybersécurité se dégage de toutes responsabilités pour toute perte, tout dommage ou tout frais découlant de l’utilisation ou de la dépendance à l’égard de l’information contenue dans cet article. Les lectrices et lecteurs sont les seuls responsables de vérifier l’exactitude et l’applicabilité de l’information avant d’agir.

Date de modification :