Une nouvelle technique d’injection de processus appelée « Mockingjay » pourrait permettre aux pirates de contourner EDR (Endpoint Detection and Response) et d’autres produits de sécurité pour exécuter furtivement du code malveillant sur des systèmes compromis.
Les chercheurs de la société de cybersécurité Security Joes ont découvert la méthode, qui utilise des DLL légitimes avec des sections RWX (lecture, écriture, exécution) pour éviter les crochets EDR et injecter du code dans des processus distants.
L’injection de processus est une méthode d’exécution de code arbitraire dans l’espace d’adressage d’un autre processus en cours d’exécution auquel le système d’exploitation fait confiance, donnant ainsi aux pirates la possibilité d’exécuter du code malveillant sans être détectés.
Des exemples de techniques d’injection de processus comprennent l’injection de DLL, l’injection de PE (exécutable portable), l’injection de DLL réfléchissante, le détournement d’exécution de thread, l’évidement de processus, l’injection de mappage, l’injection d’APC (appel de procédure asynchrone), etc.
Dans toutes ces techniques, les attaquants doivent utiliser des API Windows et divers appels système, créer des processus/threads, écrire de la mémoire de processus, etc. Ainsi, les outils de sécurité surveillant des actions spécifiques liées à ce qui précède peuvent détecter des incidents suspects et intervenir au besoin.
Security Joes dit que Mockingjay se démarque des autres approches car il n’utilise pas les appels d’API Windows couramment abusés, ne définit pas d’autorisations spéciales, n’effectue pas d’allocation de mémoire ou même ne démarre pas de thread, éliminant ainsi de nombreuses opportunités de détection possibles.
Concevoir le geai moqueur
Le premier objectif des chercheurs était de trouver une DLL vulnérable avec une section RWX par défaut, afin qu’ils puissent modifier son contenu pour charger du code malveillant sans effectuer d’étapes supplémentaires comme l’obtention d’autorisations supplémentaires, ce qui pourrait déclencher des drapeaux rouges sur les logiciels de sécurité.
Dans leur quête d’une DLL appropriée, les analystes de Security Joes ont découvert la DLL msys-2.0.dll dans Visual Studio 2022 Community, qui avait une section RWX par défaut de 16 Ko.
« En tirant parti de cette section RWX préexistante, nous pouvons tirer parti des protections de mémoire inhérentes qu’elle offre, en contournant efficacement toutes les fonctions qui peuvent déjà avoir été accrochées par les EDR », lit-on dans le rapport.
« Cette approche contourne non seulement les limitations imposées par les crochets userland, mais établit également un environnement robuste et fiable pour notre technique d’injection. »
Ensuite, l’équipe a développé deux méthodes d’injection, une pour l’auto-injection et une pour l’injection de processus à distance.
Dans le premier cas, une application personnalisée (« nightmare.exe ») charge la DLL vulnérable directement dans son espace mémoire à l’aide de deux appels d’API Windows, lui accordant un accès direct à la section RWX sans effectuer d’allocation de mémoire ni définir les autorisations.
Ensuite, un module système propre, NTDLL.DLL, est abusé pour extraire les numéros d’appel système qui sont ensuite utilisés pour contourner les crochets EDR en utilisant la technique « Hell’s Gate EDR unhooking », laissant le shellcode injecté s’exécuter sans être détecté.
La deuxième méthode consiste à exploiter la section TWX de msys-2.0.dll pour injecter une charge utile dans un processus distant, en particulier le processus « ssh.exe ».
L’application personnalisée lance ssh.exe en tant que processus enfant, ouvre un handle vers le processus cible et injecte le code malveillant dans l’espace mémoire RWX de la DLL vulnérable.
Enfin, le shellcode injecté charge le fichier DLL « MyLibrary.dll », établissant un reverse shell avec la machine de l’attaquant comme exemple d’attaque.
Les tests ont montré que cette attaque par injection à distance, qui ne nécessite pas la création d’un nouveau thread dans le processus cible, l’allocation de mémoire ou la définition d’autorisations, échappe avec succès aux solutions EDR.
Les deux méthodes proposées dans Mockingjay utilisent des API Windows telles que « LoadLibraryW », « CreateProcessW » et « GetModuleInformation » pour charger une DLL mal configurée et trouver l’adresse de la section RWX de la DLL.
Cependant, les EDR surveillent généralement les API telles que « WriteProcessMemory », « NtWriteVirtualMemory », « CreateRemoteThread » ou « NtCreateThreadEx », qui sont plus souvent invoquées dans les attaques par injection de processus traditionnelles. Par conséquent, Mockingjay est moins susceptible de déclencher des alarmes.
Le développement de « Mockingjay » par Joes Security est une autre indication de la raison pour laquelle les organisations doivent adopter une approche de sécurité holistique au lieu de se fier uniquement aux solutions EDR actuelles.