
PIC-basierter Lsass-Speicher-Dumper unter Verwendung geklonter Handles zur Umgehung der Erkennung, der verschleierte Dumps mit minimalem Speicher-Fußabdruck für Red-Team-Operationen erzeugt.
Dieses Tool wurde im Rahmen unseres Brucon2021-Vortrags implementiert und demonstriert die Verwendung von geklonten Handles auf Lsass, um einen verschleierten Speicherabbild davon zu erstellen.
Es wird zu einer ausführbaren Datei kompiliert, die vollständig in ihrem Textsegment lebt. Daher ist das extrahierte .text-Segment der PE-Datei vollständig positionsunabhängiger Code (=PIC), was bedeutet, dass es wie jeder Shellcode behandelt werden kann.
Die Ausführung von HandleKatz im Speicher hat eine sehr kleine Speicherfußabdruck, da es selbst keinen weiteren ausführbaren Speicher allokiert und daher effizient mit Konzepten wie (Phantom)DLL-Hollowing kombiniert werden kann, wie von @_ForrestOrr beschrieben. Dies steht im Gegensatz zu PIC-PE-Ladern wie Donut, SRDI oder Reflective Loadern, die während des PE-Ladens mehr ausführbaren Speicher allokieren.
Zusätzlich verwendet es eine modifizierte Version von ReactOS MiniDumpWriteDumpA und umgeht Userlandhooks mittels RecycledGate.
Für detaillierte Informationen siehe die PDF-Datei PICYourMalware.pdf in diesem Repository.
Bitte beachten Sie, dass verschiedene Compiler(-Versionen) unterschiedliche Ergebnisse liefern. Dies könnte eine PE-Datei mit Relokationen erzeugen.
Alle Tests wurden mit x86_64-w64-mingw32-gcc mingw-gcc version 11.2.0 (GCC) durchgeführt. Der erzeugte PIC wurde erfolgreich getestet auf: Windows 10 Pro 10.0.17763. Bei anderen Windows-Versionen können sich die API-Hashes unterscheiden.
Um den PIC zu verwenden, wandeln Sie einen Zeiger auf den Shellcode in ausführbaren Speicher um und rufen Sie ihn gemäß der Definition auf:
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
Zur Entschleierung der Dump-Datei kann das Skript Decoder.py verwendet werden.
Loader implementiert einen Beispiel-Loader für HandleKatz:
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

Da geklonte Handles zusammen mit modifiziertem ReactOS-Code verwendet werden, können keine ProcessAccess-Ereignisse auf Lsass beobachtet werden. Allerdings können ProcessAccess-Ereignisse auf Programmen beobachtet werden, die ein Handle auf Lsass halten.
Verteidiger können nach ProcessAccess-Masken mit gesetztem PROCESS_DUP_HANDLE (0x0040) überwachen, um die Nutzung dieses Tools zu identifizieren.