
Un utilitaire permettant d’utiliser le shellcode en mode utilisateur de la charge utile DOUBLEPULSAR pour charger de manière réflexive une DLL arbitraire dans un autre processus, afin de tester des techniques de détection ou d’autres recherches en sécurité.
Un utilitaire qui utilise le shellcode en mode utilisateur de la charge utile DOUBLEPULSAR pour charger de manière réflexive une DLL arbitraire dans un autre processus, afin de tester des techniques de détection ou d'autres recherches en sécurité.
La charge utile DOUBLEPULSAR publiée par Shadow Brokers s'exécute initialement en mode noyau et charge de manière réflexive une DLL dans un processus en mode utilisateur via un appel de procédure asynchrone (APC). Le chargement réel de la DLL se produit en mode utilisateur, et cet utilitaire exploite ce shellcode en mode utilisateur pour charger une DLL dans un processus spécifié et exécuter un ordinal donné. Cela permet de tester les techniques de détection d'attaques et de réponse aux incidents de forensic numérique contre la charge utile.
Le chargeur est intéressant car il fonctionne avec n'importe quelle DLL arbitraire sans utiliser l'appel standard LoadLibrary. Éviter LoadLibrary peut rendre le chargement plus furtif, car cela évite d'écrire la DLL sur le disque, peut contourner tout outil surveillant les appels LoadLibrary, et peut également éviter d'avoir une entrée dans le bloc d'environnement de processus (PEB), qui est généralement utilisé pour obtenir la liste des modules chargés. Ces techniques sont désormais assez courantes, mais jusqu'à présent, nous n'avions connaissance d'aucun code public capable de charger une DLL arbitraire de cette manière - le code existant exige que la DLL soit spécialement conçue pour prendre en charge le chargement. DOUBLEPULSAR est différent en ce sens qu'il implémente un chargeur plus complet capable de charger presque n'importe quelle DLL. Ce chargeur fonctionne sur presque toutes les versions de Windows telles quelles.
Bien que DOUBLEPULSAR lui-même utilise un appel APC depuis le mode noyau mis en file d'attente contre un processus en mode utilisateur, cet utilitaire met en file d'attente l'APC depuis le mode utilisateur ; cela fait peu de différence pratique. De plus, cet utilitaire peut déclencher le shellcode en utilisant CreateRemoteThread à la place.
C:\>DOUBLEPULSAR-usermode-injector.exe
USAGE : <pid> <shellcode_file> <dll_to_inject> <ordinal_to_execute> [use_CreateRemoteProcess]
Le dernier argument est facultatif ; s'il est spécifié comme 'true', CreateRemoteProcess sera utilisé à la place d'un appel APC,
qui est la méthode par défaut de Doublepulsar. Cela permet aux utilisateurs de tester de différentes manières.
La méthode par défaut est l'utilisation d'APC. Cela injectera dans TOUS les threads de la cible, ce qui augmente la probabilité que l'un d'eux
se déclenche rapidement. Cela ne convient qu'aux tests, car il peut être indésirable d'appeler la charge utile plus d'une fois.
Par exemple, injectez somelibrary.dll dans le processus 1234 en utilisant un appel de procédure asynchrone (APC) et appelez l'ordinal 1 :
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Using thread: 2456
Using thread: 2032
Using thread: 3876
Ou comme ci-dessus, mais en utilisant CreateRemoteThread au lieu d'APC :
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
Une analyse complète du shellcode en mode utilisateur de DOUBLEPULSAR :
Travaux antérieurs sur le composant noyau de DOUBLEPULSAR :