
Outil automatisé de chargement latéral de DLL avec capacités d'évasion d'EDR

Bien que le DLL sideloading puisse être utilisé à des fins légitimes, comme le chargement de bibliothèques nécessaires au fonctionnement d'un programme, il peut également être utilisé à des fins malveillantes. Les attaquants peuvent utiliser le DLL sideloading pour exécuter du code arbitraire sur un système cible, souvent en exploitant des vulnérabilités dans des applications légitimes utilisées pour charger des DLL.
Pour automatiser le processus de DLL sideloading et le rendre plus efficace, Chimera a été créé, un outil qui inclut des méthodes d'évasion pour contourner les produits EDR/AV. Cet outil peut automatiquement chiffrer un shellcode via XOR avec une clé aléatoire et créer des images template pouvant être importées dans Visual Studio pour créer une DLL malveillante.
De plus, les appels système dynamiques de SysWhispers3 sont utilisés, ainsi qu'une version assembleur modifiée pour échapper au motif recherché par l'EDR, des NOP sled aléatoires sont ajoutés et les registres sont déplacés. En outre, l'injection Early Bird est également utilisée pour injecter le shellcode dans un autre processus que l'utilisateur peut spécifier, avec des mécanismes d'évasion de sandbox comme la vérification du disque dur et si le processus est débogué. Enfin, une attaque temporelle est placée dans le chargeur qui utilise des minuteurs d'attente pour retarder l'exécution du shellcode.
Cet outil a été testé et s'est avéré efficace pour contourner les produits EDR/AV et exécuter du code arbitraire sur un système cible.
La version mise à jour de Chimera Unleashed a démontré des avancées significatives dans l'évasion des analyses statiques et dynamiques, en particulier dans le contexte du système Endpoint Detection and Response (EDR) de Microsoft 365. Les techniques de sideloading de l'outil, même appliquées à des binaires bien connus comme OneDrive, ont réussi à échapper à la détection. Cependant, il est à noter que si l'aspect sideloading est resté non détecté, le processus d'injection Early Bird employé par l'outil a été identifié par le système EDR. Cela souligne un domaine à améliorer pour renforcer les capacités globales de furtivité de l'outil.
Principales mises à jour et fonctionnalités :
Chimera est écrit en python3 et il n'est pas nécessaire d'installer de dépendances supplémentaires.
Chimera prend actuellement en charge deux options de DLL : Microsoft Teams ou Microsoft OneDrive.
On peut créer userenv.dll, une DLL manquante de Microsoft Teams, et l'insérer dans le dossier spécifique :
%USERPROFILE%/Appdata/local/Microsoft/Teams/current
Pour Microsoft OneDrive, le script utilise version.dll, courante car elle est manquante dans le binaire, par exemple onedriveupdater.exe.
Chimera Unleashed utilise argparser pour l'analyse des arguments en ligne de commande. Les arguments suivants sont disponibles :
--raw ou -r : Chemin vers le fichier contenant le shellcode. Requis.--path ou -p : Chemin de sortie pour le fichier template C. Requis.--pname ou -n : Nom du processus dans lequel injecter le shellcode. Requis.--dexports ou -d : Spécifier les exports DLL à utiliser ('teams' ou 'onedrive'). Requis.--enc ou -e : Spécifier le chiffrement préféré (XOR / AES). Requis.--inj ou -i : Spécifier la technique d'injection préférée (EB / MS). Requis.--rshell ou -s : [Optionnel] Remplacer le nom de la variable shellcode par un nom unique. Par défaut : 'encoded_shell'.Exemple d'utilisation : python Chimera.py --raw <chemin_vers_shellcode> --path <chemin_sortie> --pname <nom_processus> --dexports <fichier_exports> --enc AES --inj EB --rshell mon_shellcode
Une fois le processus de compilation terminé, une DLL sera générée, qui doit inclure soit "version.dll" pour OneDrive, soit "userenv.dll" pour Microsoft Teams. Ensuite, il est nécessaire de renommer les DLL d'origine.
Par exemple, la DLL d'origine "userenv.dll" doit être renommée "tmpB0F7.dll", tandis que la DLL d'origine "version.dll" doit être renommée "tmp44BC.dll". De plus, vous avez la possibilité de modifier le nom de la DLL proxy comme vous le souhaitez en modifiant le code source des exports DLL au lieu d'utiliser les noms par défaut du script.
Le fichier code.h contient le shellcode.
Étape 1 : Création d'un nouveau projet Visual Studio avec le template DLL


Étape 2 : Importation des fichiers dans le projet Visual Studio
Étape 3 : Personnalisation de la build
Étape 4 : Activation de MASM

Étape 5 :


Étape 1 : Modification des optimisations

Étape 2 : Suppression des informations de débogage

Contributeur original :
Contributeur :
Dans toute la mesure permise par la loi applicable, moi-même (George Sotiriadis) et/ou les affiliés qui ont soumis du contenu à mon dépôt, ne pourront être tenus responsables de tout dommage indirect, accessoire, spécial, consécutif ou punitif, ni de toute perte de profits ou de revenus, qu'elle soit directe ou indirecte, ni de toute perte de données, d'utilisation, de clientèle ou d'autres pertes immatérielles, résultant (i) de votre accès à cette ressource et/ou de votre incapacité à y accéder ; (ii) de tout comportement ou contenu d'un tiers référencé par cette ressource, y compris, sans limitation, tout comportement diffamatoire, offensant ou illégal d'autres utilisateurs ou tiers ; (iii) de tout contenu obtenu à partir de cette ressource.
https://evasions.checkpoint.com/
https://github.com/Flangvik/SharpDllProxy
--rxor ou -x : [Optionnel] Remplacer le nom du chiffrement xor par un nom unique. Par défaut : 'do_xor'.--rkey ou -k : [Optionnel] Remplacer le nom de la variable clé par un nom unique. Par défaut : 'key'.--rsleep ou -z : [Optionnel] Temps de pause total à inclure pendant l'exécution (en secondes). Par défaut : 4000.--size ou -f : [Optionnel] Taille du fichier de données factices en Ko. Zéro (0) désactive, un (1) donne une taille aléatoire. Par défaut : 0.