Opération RESURGE

Analyse technique approfondie de la compromission d’Ivanti Connect Secure

Le 28 mars 2025, la CISA a publié le rapport MAR-25993211-r1.v1, relatif à une compromission sophistiquée d’un dispositif Ivanti Connect Secure au sein d’une infrastructure critique.

Je vous propose mon analyse sur ce rapport de la CISA.

L’accès initial a été obtenu via l’exploitation de la vulnérabilité CVE-2025-0282. Cette attaque a permis le déploiement de plusieurs composants malveillants, identifiés par la CISA sous les noms de RESURGE, SPAWNSLOTH et un binaire utilitaire nommé dsmain.

L’ensemble forme une chaîne d’attaque avancée alliant persistance système, falsification de journaux, exécution à distance et manipulation du noyau.

Le fichier principal, nommé libdsupgrade.so et désigné sous le nom RESURGE, est un binaire ELF 32 bits compilé pour GNU/Linux. Il contient des fonctions de type rootkit, bootkit, dropper et backdoor.

Lorsqu’il est injecté dans un processus nommé web, il détourne les fonctions réseau standard telles que accept et strncpy afin d’établir un tunnel proxy contrôlé par l’attaquant.

Ce tunnel n’utilise pas de chiffrement, mais repose sur une clé privée XOR intégrée au binaire. Il redirige les flux vers un fichier nommé .logsrv, servant de point d’entrée pour une session shell distante.

Lorsque le malware détecte qu’il est injecté dans un processus nommé dsmdm, il établit un accès SSH local en se liant au fichier .logsrv et ouvre un shell sans passer par le réseau. Dans les deux cas, l’attaquant bénéficie d’un canal de contrôle durable et discret.

Un second thread dépose alors un autre composant malveillant, liblogblock.so, conçu pour modifier dynamiquement les journaux système et interagir avec le processus dslogserver.

La persistance est assurée par l’insertion du binaire dans le fichier ld.so.preload. Cette opération garantit que la bibliothèque malveillante est chargée automatiquement par le linker à chaque exécution de programme.

Le malware modifie également plusieurs fichiers critiques, notamment compcheckresult.cgi, dans lequel il injecte un mécanisme de web shell basé sur un paramètre HTTP spécifique.

Il falsifie les scripts de contrôle d’intégrité, tels que check_integrity.sh, et met à jour les fichiers de manifeste via recalculs de hachage SHA-256 afin de camoufler ses altérations.

La charge utile est renforcée par un troisième composant, dsmain. Ce binaire statique 64 bits contient une collection d’outils dérivés de BusyBox ainsi qu’un script appelé extract_vmlinux.sh.

Son objectif est de modifier l’image coreboot embarquée du système. Il extrait une copie du noyau compressé, identifie une clé AES à l’aide d’offsets calculés sur la chaîne Linux version, puis procède au déchiffrement, à la modification, au reconditionnement et au rechiffrement du noyau.

Il va ensuite injecter dans ce nouveau noyau les fichiers malveillants, assure leur exécution lors du démarrage, et reconstruit l’image sous forme d’un coreboot.img compressé et signé.

Le processus de falsification va encore plus loin avec la désactivation délibérée des scripts de supervision. Les fichiers scanner.py et scanner_legacy.py sont modifiés via des commandes automatisées afin de neutraliser toutes les lignes détectant les anomalies de fichiers, les nouveaux éléments ou les différences d’empreinte.

Cette opération empêche les mécanismes internes de remonter des alertes, même lorsque des fichiers critiques sont altérés.

Le composant liblogblock.so est une variante du malware SPAWNSLOTH. Il interagit avec le processus dslogserver, et modifie en mémoire partagée les fonctions de journalisation via la librairie open source Funchook.

En ciblant des symboles tels que _ZN5DSLog4File3addEPKci, il détourne les appels système pour empêcher l’enregistrement des événements relatifs à l’attaque. Il s’agit d’un mécanisme avancé de log tampering, entièrement résidant en mémoire.

L’analyse de CISA fournit également des règles YARA de détection précises, notamment CISA_25993211_01 pour RESURGE et CISA_25993211_02 pour SPAWNSLOTH.

Ces règles reposent sur des chaînes spécifiques telles que snprintf, CGI::param, coreboot.img ou encore funchook_create. Les identifiants cryptographiques SHA-256 des artefacts sont fournis, incluant notamment les empreintes de libdsupgrade.so, liblogblock.so et dsmain.

Les fichiers modifiés ou créés par le malware incluent entre autres : ld.so.preload, compcheckresult.cgi, check_integrity.sh, DSUpgrade.pm, ainsi que plusieurs emplacements temporaires dans /tmp et /me/runtime/tmp/.logsrv. Le binaire utilise également OpenSSL pour générer des clés RSA de 2048 bits et signer les manifestes falsifiés, ce qui permet de contourner les vérifications de conformité internes.

L’ensemble démontre une opération offensive hautement structurée, dotée d’un fort niveau de persistance et de furtivité.

L’attaquant a maîtrisé non seulement les points d’entrée, mais aussi les mécanismes de défense locaux, les processus de démarrage, les systèmes de détection embarqués et l’intégrité du noyau.

Chaque composant a été conçu pour maintenir un accès durable, dissimuler les traces, et compromettre en profondeur la confiance dans le système.

Le rapport publié par la CISA constitue un modèle d’analyse technique avancée, à la fois complet et précis.

L’opération RESURGE illustre les nouvelles dimensions de la compromission d’appliances réseau, où l’attaquant ne se contente plus de maintenir une backdoor, mais construit un environnement persistant dans l’empreinte même du système.

Un rapport passionnant à lire, étudier et une grande inspiration pour l’analyse de ce type de menace.

Sources