
Dump mémoire de Lsass basé sur PIC utilisant des handles clonés pour échapper à la détection, produisant des dumps obfusqués avec une empreinte mémoire minimale pour les opérations d'équipe rouge.
Cet outil a été implémenté dans le cadre de notre conférence Brucon2021 et démontre l'utilisation de handles clonés vers Lsass afin de créer un dump mémoire obfusqué de celui-ci.
Il se compile en un exécutable résidant entièrement dans son segment texte. Ainsi, le segment .text extrait du fichier PE est un code totalement indépendant de la position (=PIC), ce qui signifie qu'il peut être traité comme n'importe quel shellcode.
L'exécution de HandleKatz en mémoire a une très faible empreinte, car il n'alloue pas de mémoire exécutable supplémentaire et peut donc être efficacement combiné avec des concepts tels que (Phantom)DLL-Hollowing comme décrit par @_ForrestOrr. Cela contraste avec les chargeurs PE PIC, tels que Donut, SRDI ou les chargeurs réflexifs qui, lors du chargement du PE, allouent plus de mémoire exécutable.
De plus, il utilise une version modifiée de ReactOS MiniDumpWriteDumpA et contourne les hooks en espace utilisateur grâce à RecycledGate.
Pour des informations détaillées, veuillez vous référer au fichier PDF PICYourMalware.pdf dans ce dépôt.
Veuillez noter que différents compilateurs (versions) produisent des résultats différents. Cela peut générer un fichier PE avec des relocalisations.
Tous les tests ont été effectués avec x86_64-w64-mingw32-gcc mingw-gcc version 11.2.0 (GCC). Le PIC produit a été testé avec succès sur : Windows 10 Pro 10.0.17763. Sur d'autres versions de Windows, les hachages d'API peuvent différer.
Pour utiliser le PIC, créez un pointeur vers le shellcode dans une mémoire exécutable et appelez-le selon la définition :
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
Pour la dés-obsufcation du fichier de dump, le script Decoder.py peut être utilisé.
Loader implémente un chargeur d'exemple pour HandleKatz :
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

Comme des handles clonés sont utilisés avec du code ReactOS modifié, aucun événement ProcessAccess ne peut être observé sur Lsass. Cependant, des événements ProcessAccess sur les programmes qui détiennent un handle vers Lsass peuvent être observés.
Les défenseurs peuvent surveiller les masques ProcessAccess avec l'ensemble PROCESS_DUP_HANDLE (0x0040) pour identifier l'utilisation de cet outil.