Avec le déploiement croissant de solutions de sécurité sur les infrastructures cloud, les pirates ont commencé à adopter des tactiques innovantes pour cibler ces environnements. L'une d’elles consiste à utiliser des charges utiles fileless qui ne créent jamais de fichiers sur le disque et sont chargées directement dans la mémoire du système. Une technique capable d’échapper à la surveillance des outils de sécurité.

« Nous avons récemment détecté une attaque fileless ciblant des workload dans le cloud », ont déclaré dans leur rapport des chercheurs de Wiz, une entreprise spécialisée dans la sécurité du cloud. « L'attaque s’appuie sur un code Python qui charge un mineur XMRig directement dans la mémoire à l'aide de memfd, une technique sans fichier connue de Linux. À notre connaissance, c’est la première attaque fileless basée sur Python documentée publiquement et ciblant des charges de travail dans le cloud, et d’après nos preuves, cette attaque a été utilisée dans près de 200 cas pour le cryptominage », ont-ils ajouté.

Le malware PyLoose

En se basant sur les chaînes de caractères de l'URL à partir de laquelle les attaquants l'ont déployée, les experts ont baptisé cette charge utile du malware PyLoose. Elle a été trouvée sur des instances non protégées de Jupyter Notebook, une plateforme interactive basée sur le web qui peut être déployée sur des serveurs cloud et qui prend en charge plus de 40 langages de programmation, dont Python. Outre qu’elles sont accessibles au public, ces instances ne limitaient pas l'accès à certains modules Python comme os et subprocess, lesquels peuvent entraîner l'exécution de commandes système. Les attaquants ont utilisé le code Python pour télécharger et exécuter un script créé à l'aide d'un outil open source appelé fileless-elf-exec. Le script a importé des bibliothèques pour l'invocation directe de syscall, l'exécution de commandes os, les opérations base64 et la décompression zlib. Il a ensuite procédé au décodage et à la décompression d'une charge utile et a utilisé memfd pour créer une mémoire tampon, y écrire le contenu de la charge utile et l'invoquer directement depuis la mémoire.

La fonctionnalité memfd de Linux - abréviation de « memory file descriptors » (descripteurs de fichiers en mémoire) - stocke des objets de fichiers en mémoire pour les utiliser dans la communication inter-processus ou comme stockage temporaire. « Les cybercriminels abusent parfois de cette fonction de Linux pour exécuter des charges utiles sans les écrire sur le disque, et éviter ainsi les outils de sécurité traditionnels qui reposent sur des scans binaires », ont déclaré les chercheurs de Wiz. « Une fois que le payload est placé dans une section de mémoire créée par memfd, les attaquants peuvent invoquer l'un des syscalls exec sur ce contenu de mémoire, en le traitant comme s'il s'agissait d'un fichier normal sur le disque, et lancer ainsi un nouveau processus ». S'ils sont recherchés, les processus créés à partir de contenus memfd peuvent être assez facilement identifiés car les liens symboliques vers lesquels ils pointent ne sont pas des chemins de fichiers sur le disque, mais des entrées du type /memfd. Dans le cas présent, la charge utile exécutée à partir de la mémoire était une version précompilée de XMRig, un programme open-source pour le minage de crypto-monnaie couramment utilisé dans les attaques de cryptojacking qui consistent à détourner les ressources informatiques pour miner de la crypto-monnaie à l’insu du propriétaire.

Les attaques fileless sur Linux, plutôt rares

Les attaques sans fichier sur les serveurs Linux ne sont pas nouvelles, mais elles sont relativement rares pour les workload dans le cloud. L'avantage pour les attaquants est qu'elles sont plus difficiles à détecter sans solutions de sécurité basées sur le comportement et la surveillance de la mémoire. Ces attaques compliquent, par ailleurs, les enquêtes post-mortem après la compromission, car les charges utiles disparaissent de la mémoire quand les workload s'arrêtent et que les équipes de sécurité ne sont pas encore familiarisées avec ces techniques. L'un des rares cas documentés d'attaques sans fichier contre des serveurs Linux date de 2021 : un groupe de pirates connu sous le nom de TeamTNT avait déployé un malware écrit en langage Go en exploitant un outil de chargement de mémoire appelé Ezuri.

Avec PyLoose, « l'attaquant s'est donné beaucoup de mal pour se rendre intraçable : il a utilisé un service de partage de données ouvert pour héberger la charge utile Python, il a adapté la technique d'exécution sans fichier à Python et il a compilé un mineur XMRig pour intégrer sa configuration afin d'éviter de toucher le disque ou d'utiliser une ligne de commande pouvant révéler sa présence », ont déclaré les chercheurs de Wiz. « Toutes ces étapes suggèrent que l'adversaire dispose d’un niveau de sophistication rarement observé dans la plupart des attaques de charges de travail dans le cloud, documentées publiquement ». Les chercheurs conseillent aux entreprises d'éviter d'exposer publiquement des services comme Jupyter Notebook, d'utiliser l'authentification multifactorielle ou d'autres plateformes d'identité forte pour accéder à ces services, et de restreindre les fonctionnalités pouvant conduire à l'exécution de commandes système.