Backdoor sur Node.js: pourquoi, pourquoi et comment cela fonctionne

Récemment, des collègues de Yandex ont partagé avec nous un échantillon d'un cheval de Troie intéressant, que nous avons signalé dans cette nouvelle. Un tel malware ne se présente pas souvent, nous avons donc décidé de le démonter plus en détail et de parler en même temps des raisons pour lesquelles nous rencontrons rarement de tels échantillons.

Le cheval de Troie est une porte dérobée à plusieurs composants écrite en JavaScript et utilisant Node.js. pour l'exécuter. Ses principaux éléments sont le programme de travail et le programme de mise à jour, qui sont téléchargés et installés dans le système par le chargeur de démarrage. La charge utile peut être quelconque, mais dans ce cas, le cheval de Troie installe le mineur xmrig. Au moment de l'étude, le développeur a utilisé le mineur pour extraire la crypto-monnaie TurtleCoin.

MonsterInstall est distribué sur des sites avec des astuces pour les jeux vidéo populaires. La plupart de ces ressources appartiennent au développeur du cheval de Troie, mais nous avons trouvé plusieurs fichiers infectés sur d'autres sites similaires. Le propriétaire de l'un d'eux surveille régulièrement les mises à jour des concurrents et reconstitue sa ressource avec du nouveau contenu. Pour ce faire, il utilise le script parser.php, qui via un proxy recherche de nouveaux tricheurs sur cheathappens.com.

Proxy parse done, total: 1 Use sox 84.228.64.133:1080 Error: CURL error(#52), attempts left: 10 Use sox 84.228.64.133:1080 Posts found: 30! [33mPage Satisfactory: ўЂµ№ЅµЂ +8 vCL#96731 {CheatHappens.com} already in base[0m [33mPage Borderlands: The Pre-Sequel - ўЂµ№ЅµЂ +28 v1.2019 {LinGon} already in base[0m [33mPage Borderlands - Game of the Year Enhanced: ўЂµ№ЅµЂ +19 v1.0.1 {LinGon} already in base[0m [33mPage Star Wars: Battlefront 2 (2017): ўЂµ№ЅµЂ +4 v01.04.2019 {MrAntiFun} already in base[0m [36mPage Far Cry 5: ўЂµ№ЅµЂ +23 v1.012 (+LOST ON MARS/DEAD LIVING ZOMBIES) {CheatHappens.com} added 2019-Apr-09[0m [36mPage Fate/Extella Link: ўЂµ№ЅµЂ +13 v04.09.2019 {CheatHappens.com} added 2019-Apr-09[0m [36mPage Superhot: ўЂµ№ЅµЂ +3 v2.1.01p { MrAntiFun} added 2019-Apr-09[0m [36mPage Dawn of Man: ўЂµ№ЅµЂ +7 v1.0.6 {CheatHappens.com} added 2019-Apr-08[0m [36mPage Borderlands 2: ўЂµ№ЅµЂ +14 v06.04.2019 {MrAntiFun} added 2019-Apr-08[0m [36mPage Borderlands: The Pre-Sequel - ўЂµ№ЅµЂ +17 v06.04.2019 {MrAntiFun} added 2019-Apr-08[0m [36mPage Tropico 6: ўЂµ№ЅµЂ +9 v1.01 {MrAntiFun} added 2019-Apr-08[0m [36mPage Operencia: The Stolen Sun - ўЂµ№ЅµЂ +20 v1.2.2 {CheatHappens.com} added 2019-Apr-08[0m [36mPage Enter the Gungeon: ўЂµ№ЅµЂ +6 v2.1.3 {MrAntiFun} added 2019-Apr-07[0m [36mPage The Guild 3: ўЂµ№ЅµЂ +2 v0.7.5 {MrAntiFun} added 2019-Apr-07[0m [36mPage Dead Effect 2: ўЂµ№ЅµЂ +8 v190401 {MrAntiFun} added 2019-Apr-07[0m [36mPage Assassin's Creed: Odyssey - ўЂµ№ЅµЂ +26 v1.2.0 {FLiNG} added 2019-Apr-07[0m [36mPage Assassin's Creed: Odyssey - ўЂµ№ЅµЂ +12 v1.2.0 {MrAntiFun} added 2019-Apr-06[0m [36mPage Super Dragon Ball Heroes: World Mission - ўЂµ№ЅµЂ +11 v1.0 {FLiNG} added 2019-Apr-05[0m [36mPage Tropico 6: ўЂµ№ЅµЂ +7 v1.02 97490 {CheatHappens.com} added 2019-Apr-05[0m [36mPage Risk of Rain 2: ўЂµ№ЅµЂ +10 Build 3703355 {CheatHappens.com} added 2019-Apr-05[0m [36mPage Sid Meier's Civilization 6 - Rise and Fall: ўЂµ№ЅµЂ +12 v1.0.0.314 {MrAntiFun} added 2019-Apr-05[0m [36mPage Sid Meier's Civilization 6 - Gathering Storm: ўЂµ№ЅµЂ +12 v1.0.0.314 {MrAntiFun} added 2019-Apr-05[0m [36mPage Sid Meier's Civilization 6: ўЂµ№ЅµЂ +12 v1.0.0.314 {MrAntiFun} added 2019-Apr-05[0m [36mPage Borderlands GOTY Enhanced: ўЂµ№ЅµЂ +16 v1.0 {CheatHappens.com} added 2019-Apr-05[0m [36mPage Borderlands Game of the Year Enhanced: ўЂµ№ЅµЂ +13 v1.00 {MrAntiFun} added 2019-Apr-04[0m [36mPage Assassin's Creed: Odyssey: ўЂµ№ЅµЂ +24 v1.2.0 (04.04.2019) {CheatHappens.com} added 2019-Apr-04[0m [36mPage Sekiro: Shadows Die Twice - ўЂµ№ЅµЂ +24 v1.02 {FLiNG} added 2019-Apr-04[0m [36mPage Hearts of Iron 4: ўЂµ№ЅµЂ +24 v1.6.2 {MrAntiFun} added 2019-Apr-04[0m [36mPage Wolcen: Lords of Mayhem - ўЂµ№ЅµЂ +5 v1.0.2.1 {MrAntiFun} added 2019-Apr-04[0m [36mPage Devil May Cry 5: ўЂµ№ЅµЂ +18 v1.0 (04.03.2019) {CheatHappens.com} added 2019-Apr-04[0m Parse done 


Sur les sites du développeur, il existe une grande sélection de tricheurs, mais la même archive sera retournée pour tous les liens. Si vous essayez de télécharger l'un des fichiers à partir du site du logiciel malveillant, l'utilisateur recevra Trojan.MonsterInstall. Certains paramètres du cheval de Troie peuvent être devinés à partir du lien de téléchargement:

 https://<malicious_site>/fc/download.php?name=Borderlands%20GOTY%20Enhanced:%20%D0%A2%D1%80%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%20+16%20v1.0%20{CheatHappens.com}&link=https://<malicious_site>//r.php?site=http://gtrainers.com/load/0-0-1-7081-20&password=<malicious_site>/&uid=101&sid1=1&sid2=1&charset=utf-8 

  • nom - le nom de l'archive et de l'exe dans l'archive;
  • lien - un lien vers le fichier que l'utilisateur voulait télécharger (est câblé dans data.json);
  • mot de passe - mot de passe pour l'archive.

Supposons que nous sélectionnions la triche souhaitée et téléchargions l'archive 7zip protégée par mot de passe avec le nom prometteur "ExtrimHack.rar" sur le site du développeur du cheval de Troie. À l'intérieur, il y a un fichier exécutable, un fichier de configuration, une bibliothèque 7zip, ainsi qu'une archive bin avec des bibliothèques et des scripts C ++ natifs lancés à l'aide du binaire Node.js.

Exemple de contenu d'archive:

  • 7z.dll;
  • data.bin;
  • data.json;
  • ESP triche pour COP GO.exe.


Lorsque l'exécutable est lancé, le cheval de Troie installe tous les composants nécessaires à son fonctionnement, et télécharge également la triche nécessaire à l'utilisateur, en utilisant les informations du fichier data.json avec les paramètres.

Exemple de contenu de data.json:
 {"source":[5,10,11,43],"dataVersion":[0,0,0,115],"link":"http:\/\/clearcheats.ru\/images\/dl\/csgo\/ESP_csgo.dll"} 


Pour empêcher plusieurs copies de son processus de fonctionner, le cheval de Troie crée le mutex «cortelMoney-suncMutex» et l'installe dans le répertoire «% WINDIR% \ WinKit \». Il vérifie ensuite s'il se trouve dans le registre ([HKLM \\ Software \\ Microsoft \\ Windows Node]). Si c'est le cas, il lit ses paramètres et compare la version avec celle spécifiée dans data.json. Si la version est à jour, elle ne fait rien de plus et se termine.

Après cela, le cheval de Troie décompresse le contenu de data.bin dans% WINDIR% \\ WinKit \\ et installe le service pour démarrer start.js.

Contenu de data.bin:
  • Démon;
  • node_modules;
  • 7z.dll;
  • msnode.exe;
  • start.js;
  • startDll.dll;
  • update.js;
  • updateDll.dll.

Dans le même temps, msnode.exe est un fichier exécutable Node.js avec une signature numérique valide, et le répertoire node_modules contient les bibliothèques «ffi», «node-windows» et «ref».

La bibliothèque startDll.dll est chargée dans start.js et son export mymain est appelé, dans lequel il lit ses paramètres à partir du registre, démarre "% WINDIR% \\ WinKit \\ msnode% WINDIR% \\ WinKit \\ update.js" et arrête le service "Noeud Windows." Le script update.js, à son tour, charge la bibliothèque updateDll.dll et appelle son export mymain. Rien de compliqué.

Dans updateDll.dll, le cheval de Troie commencera à vérifier votre connexion Internet. Pour ce faire, il enverra des demandes à google.com, yahoo.com, facebook.com toutes les 10 secondes, jusqu'à ce que les trois renvoient 200 codes. Ensuite, il enverra une demande avec des données de configuration au serveur POST s44571fu [.] Bget [.] Ru / CortelMoney / enter.php:

 {"login":"NULL","mainId":"PPrn1DXeGvUtzXC7jna2oqdO2m?WUMzHAoM8hHQF","password":"NULL","source":[0,0,0,0],"updaterVersion":[0,0,0,0],"workerVersion":[0,0,0,0]} 


Dans ce cas, pour l'autorisation de base, une paire de «cortel: money» est utilisée et l'agent utilisateur est réglé sur «USER AGENT». Pour l'autorisation de base des demandes ultérieures, login: mot de passe sera utilisé, que le serveur signalera.

Le serveur répond avec json comme ceci:

 { "login": "240797", "password": "tdzjIF?JgEG5NOofJO6YrEPQcw2TJ7y4xPxqcz?X", "updaterVersion": [0, 0, 0, 115], "updaterLink": "http:\/\/s44571fu.bget.ru\/CortelMoney\/version\/0-0-0-115-upd.7z", "workerVersion": [0, 0, 3, 0], "workerLink": "http:\/\/s44571fu.bget.ru\/CortelMoney\/version\/0-0-3-0-work.7z" } 


Comme vous pouvez le voir, la réponse du serveur contient des versions des principaux éléments du cheval de Troie. Si la version actuelle du programme de mise à jour sur le périphérique de l'utilisateur est plus ancienne que celle signalée par le serveur, le cheval de Troie télécharge le fichier à partir du lien spécifié et décompresse l'archive dans le répertoire "% WINDIR% \\ WinKit \\\\", où la valeur du paramètre updaterVersion de la réponse du serveur sera indiquée à la place. .

Le cheval de Troie décompresse le fichier de travail dans le répertoire% WINDIR% \\ WinKit \\ SystemNode \\, puis lance "% WINDIR% \\ WinKit \\ SystemNode \\ sysnode% WINDIR% \\ WinKit \\ SystemNode \\ main.js".

Le contenu de l'archive avec le travailleur:
  • node_modules;
  • 7za.exe;
  • codex;
  • main.js;
  • sysnode.exe.

Le cheval de Troie supprime ensuite le service Windows Node Guard, puis le crée à nouveau, en remplaçant le fichier exécutable par le fichier de service Windows Node. De la même manière, il recrée le service Windows Node, en remplaçant l'exécutable par daemon \\ service.exe.

Formulaire suivant service.xml avec paramètres:
 <service><id>service.exe</id><executable>C:\Windows\\WinKit\0.0.0.115\msnode.exe</executable><arguments>"C:\Windows\\WinKit\0.0.0.115\start.js"</arguments></service> 


Updater est installé dans le répertoire "C: \ Windows \ Reserve Service", enregistré par le service et lancé par le binaire Node.js. Il se compose également de plusieurs scripts js et de bibliothèques natives C ++. Le module principal est main.js.

Le contenu de l'archive avec le programme de mise à jour:
  • main.js;
  • start.js;
  • crypto.dll;
  • network.dll;
  • service.exe.

Tout d'abord, le cheval de Troie connaîtra la date du jour en envoyant une demande à google.com, yandex.ru ou www.i.ua. Il utilise les informations reçues un peu plus tard. Il déchiffre ensuite le contenu du fichier bootList.json à l'aide de la bibliothèque crypto.dll.

Algorithme de déchiffrement:
 key = '123' s = '' for i in range(len(d)): s += chr((ord(d[i]) - ord(key[i % len(key)])) & 0xff) 


Obtient une liste de serveurs de gestion à partir de là:
 [{"node":"http://cortel8x.beget.tech/reserve","weight":10},{"node":"http://reserve-system.ru/work","weight":10}] 


Le cheval de Troie lit ensuite les informations du registre:
 function getInfo() { var WindowsNodeInfo = new Object(); WindowsNodeInfo.mainId = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "mainId"); WindowsNodeInfo.login = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "log"); WindowsNodeInfo.password = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "pass"); WindowsNodeInfo.source = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "source"); WindowsNodeInfo.updaterVersion = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "updaterVersion"); WindowsNodeInfo.workerVersion = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Windows Node", "workerVersion"); var ReserveSystemInfo = new Object(); ReserveSystemInfo.workerVersion = windowsLib.getStringRegKey("HLM\\SOFTWARE\\Microsoft\\Reserve System", "updaterVersion"); var myInfo = new Object(); myInfo.windowsNode = WindowsNodeInfo; myInfo.reserveSystem = ReserveSystemInfo; return JSON.stringify(myInfo); } 

Il ajoute ensuite l'en-tête HTTP de l'autorisation de base correspondant à la paire «cortel: money», et l'envoie avec une requête POST au serveur de gestion précédemment décrypté.
En réponse, le serveur reçoit:

 { "data": { "updaterVersion": [0, 0, 0, 1], "updaterLink": "/upd.7z", "updaterVerify": "£ñß(\u0012Ä\ti¾$ë5ž»\u001c²\u001c\fÙ=±÷ö‚´èUnŽÐÂBÔ\n\u001dW6?u½\u0005Œn\u000fp:üÍ\u0019\u0000\u000bSý«\u00137÷\u0013”'ì¥û§s7F\u0016ó\\\u000f%6ñê\"7î<ýo䃃0Æ%t ñÅv‚S¡\r\u001e•ÅÆ¡¿N)v\\f8\u0004F\fUS¯‰³§ oIõŒiÆîGݪ\u0017êH/8Ö1-°™[P 5E7X‡Fø%S ŠXÕ6Oþ=Vô‰…ˆ:.3Œ‚i\u000eÁù9Ã&¾ŒM\u001eÛªé$\u0006#IèÞÛ\u0018À\u001b^è,ÁòÑCTXb\u001d$ç\u0004„ð¶0UVÕ»e\u001f\b\u001e¡Ä¼è+Fjúÿoâz\r !çô3xØs—_\u000b\u0017\u001fY]\u0001¥j^û\\W", "dateTime": 1534868028000, "bootList": [{ "node": "http://cortel8x.beget.tech/reserve/", "weight": 10 }, { "node": "http://reserve-system.ru/work/", "weight": 10 }] }, "dataInfo": "I`ù@ÀP'ÈcÊÛ´#iè Ò~\u0007<\u0001Ýìûl«ÔÆq\u0013àÛ\u0003\b\u0017ÑLÁ}ÿÚ˜DS']\u0003bf\u0003!¿Cð¸q¸ÖÜ'B¢CÄAMˆÀA¤d\u001c5¨d -\u0013‰\u0011ѼF'|SB[¬°(ܹÈÒÜ £L\u00071¾:`\u001bŒìýKõ\"²Ÿ¸$´3™UºÅ¨J†¨cƒf¿}r;Öeì¶x‰ØKt¥‹„47a\u001e¸Ô‡ˆy\u0006•\u001b\u0004‚‹„„•ó\u001a\u0019\nu>¨)bkæ…'\u00127@é‹7µæy3ÈNrS'Mð‡\u0018\u0019¾òÓ[Žå5H‡ƒ·¦k'¿ÉŠ&PÂÈîåÚ~M\u0010ðnáH擪xÃv cד\u0013…T…ïÑÝ\tœŽ\u0018†Æ\u00148$”Ôî" } 


Et voici la date actuelle, obtenue plus tôt. Le cheval de Troie le compare au paramètre dataTime transmis par le serveur. Si la différence entre les dates est supérieure à une semaine (en termes de millisecondes), le cheval de Troie n'exécutera pas les commandes. Le paramètre dataInfo contient également la signature de données (champ de données), il est vérifié à l'aide de la clé publique câblée dans main.js. Et le paramètre «bootList» contient une liste de serveurs, que le cheval de Troie crypte et stocke dans «bootList.json».

Après cela, le cheval de Troie vérifie sa version par rapport à celle spécifiée dans le paramètre updaterVersion. Si la version installée n'est pas inférieure à la dernière, le cheval de Troie lance «upd \\ upd.exe» en passant le paramètre «main.js». Si la version de la réponse du serveur est plus récente, le cheval de Troie télécharge l'archive de mise à jour en utilisant le lien du paramètre «updaterLink» upd.7z, vérifie sa signature et la décompresse. Ensuite, il écrit dans le registre la version de la mise à jour [HKLM \\ SOFTWARE \\ Microsoft \\ Reserve System] 'updaterVersion', après quoi il lance à nouveau "upd \\ upd.exe", en lui passant le paramètre "main.js".

Le cheval de Troie vérifie que l'un des composants a déjà été installé et décide s'il faut installer les applications. Tout d'abord, il crée le mutex MoonTitleWorker, puis déchiffre le fichier codeX avec un XOR avec la chaîne «xor» et l'exécute. Après cela, json forme des informations:
 {"userId": id, "starter": [], "worker": [], "source": [], "osInfo": {"isX64": True, "osString": "Windows 7 Enterprise"}} 

Envoie ces informations avec une requête POST à ​​http: // <malicious_site> [.] Xyz: 1001 / getApps (pour des raisons de décence, nous ne spécifions pas de nom de domaine, mais il peut être trouvé ici .) La réponse du serveur peut contenir des informations sur les applications qui doivent être installées.

Exemple de réponse:
 { "body": { "apps": [{ "hash": "452f8e156c5c3206b46ea0fe61a47b247251f24d60bdba31c41298cd5e8eba9a", "size": 8137466, "version": [2, 0, 0, 2], "link": "xmr-1-64.7z", "path": "%pf%\\Microsoft JDX\\64", "runComand": "%path%\\moonlight.exe start.js", "name": "xmr64" }] }, "head": "O~¨^Óå+ßzIçsG¬üS„ʶ$êL–LùθZ\f\u0019ÐÐ\u000e \u0004\u001cÀU¯\u0011š)áUÚ\u001flß²A\u001fôÝÔ숱y%\"DP» ^¯«FUâ\u001cÔû\u001dµ´Jï#¬ÌȹÎÚª?\r—]Yj·÷õ³—\u001e°ÖÒ\\鉤d'BT\u0019·¦FõVQ°Aç')\u001cõªµ¦ýûHlb͸þ}éŒ\u0000jvÔ%S;Ã×þA\u0011ß'I[´\u0004ýÚ\u0007Z:ZÂ\n–ñz#ÈBö›²2\u0007ÎJw±èTVoŸå\bÖR3½ù;ƒó\u0011ÉÌ€ÅÖàð06ÓeÕþˆ”7Ùš\u0011•»”˜¢5µgôÛc˜&L\u000fê.?!Çæ}¨\u001eÕ—J#A¼_Ì\u0015càñb" } 

Si le périphérique ne dispose pas d'une telle application, le cheval de Troie la télécharge en envoyant une demande POST à ​​l'URL http: // <malicious_site> [.] Xyz: 1001 /, où le paramètre de lien pour l'application correspondante de la réponse du serveur sera indiqué à la place. S'il existe une telle application, mais une version plus ancienne, elle est mise à jour vers la version actuelle.

Le cheval de Troie vérifie la taille et le hachage du fichier téléchargé avec les informations spécifiées par le serveur dans les paramètres de hachage et de taille. Si les données convergent, il déplace le fichier le long du chemin à partir du paramètre path et exécute la commande spécifiée dans le champ runCommand. Les informations sur l'application téléchargée sont stockées dans le registre [HKLM \\ SOFTWARE \\ Microsoft \\ MoonTitle \\ apps \\].

Pour le moment, le mineur xmrig est configuré à l'aide de la porte dérobée. Selon la capacité du système, le cheval de Troie télécharge une archive xmr-1.7z ou xmr-1-64.7z. Dans start.js, il charge la bibliothèque xmrig.dll et appelle mymain export, où il déploie ses variables d'environnement et tue les processus:
  • % sys32_86% \\ xmr;
  • % sys32_86% \\ xmr64;
  • % pf_86% \\ Microsoft JDX \\ 32 \\ windows-update.exe;
  • % pf_86% \\ Microsoft JDX \\ 64 \\ windows-update.exe.

Si le fichier xmrig.exe se trouve à proximité, le cheval de Troie le charge dans la mémoire du processus en cours, efface la signature MZ, la déchiffre à l'aide de XOR avec 0x39, puis enregistre son vidage dans le fichier de vidage. Si le cheval de Troie trouve le fichier «dump» dans le même répertoire, il le déchiffre de la même manière, lance windows-update.exe et y incorpore la charge utile déchiffrée.

Le cheval de Troie collecte et envoie par requête POST à ​​l'URL: cherry-pot [.] Top / RemoteApps / xmr / main.php les informations système suivantes: {"action": "enter", "architecture": "INTEL", "cpuAES" : true, "cpuCache": 8192, "cpuSpeed": 3392.0, "cpuThreads": 2, "cpuVendorString": "Intel® Core (TM) i5-4690S CPU @ 3.20GHz \ u0000", "hightPages": false, " connexion ":" null "," mot de passe ":" null "," ramPhysicalSize ": 3071," xmrigVersion ": [2,10,0]}

En réponse, le serveur envoie la configuration du mineur:
 {"maxCpuLoad":1000,"minCpuLoad ":0,"algo":"cryptonight-pico/trtl","av":0,"background":false,"donate-level":1,"max-cpu-usage":75,"retries":5,"retry-pause":5,"cpu-priority":1,"pools":[{"url":"185.224.133.91:5511","keepalive":true,"nicehash":true}]} 

Une fois que le cheval de Troie a enregistré la configuration dans config.json, il démarre et démarre automatiquement l'extraction.

MonsterInstall a d'autres modifications. Par exemple, en plus des astuces pour les jeux, le développeur Malvari les a distribués sous le couvert d'un programme d'installation de navigateur Chrome et d'un programme de vérification des fichiers. Dans les versions ultérieures du cheval de Troie, le développeur a pensé à la sécurité et au cryptage des chaînes, ainsi qu'à la nécessité de saisir un mot de passe pour certains fichiers. De plus, le chargeur de démarrage de l'une des versions du cheval de Troie a même un lien vers un contrat de licence hébergé sur le domaine du développeur du cheval de Troie.

(Les questions sur la force juridique de tels accords dépassent malheureusement le cadre de cet article, mais si vous êtes intéressé à lire des informations sur ce sujet, faites-le nous savoir dans les commentaires).

Conclusions

Node.js n'est pas la solution la plus pratique pour les auteurs de virus. Si la taille d'un tel cheval de Troie peut être petite, alors la liaison Node.js (fichier exécutable et bibliothèques) sera significativement «plus lourde» que le malvari standard. Qu'est-ce qui a dicté ce choix? En règle générale, les développeurs choisissent des outils qu'ils connaissent bien. Par conséquent, même dans le cas des éleveurs, le choix de la technologie est davantage une question de préférence personnelle. Cependant, Node.js a ses avantages, dont l'un est une signature valide. Dans le système, un tel processus sera signé en tant que Node.js, ce qui soulève rarement des soupçons.

En résumé, on peut noter que, malgré le choix intéressant des outils, cela n'a pas donné au développeur de porte dérobée un avantage significatif. Il est peu probable qu'à l'avenir, nous voyons plus de logiciels malveillants utiliser Node.js.

Comme d'habitude, nous partageons des indicateurs de compromis .

Source: https://habr.com/ru/post/fr460255/


All Articles