
Dumper della memoria di Lsass basato su PIC che utilizza handle clonati per eludere il rilevamento, producendo dump offuscati con un impatto minimo sulla memoria per le operazioni del red team.
Questo strumento è stato implementato come parte del nostro talk alla Brucon2021 e dimostra l'uso di handle clonati a Lsass per creare un dump di memoria offuscato dello stesso.
Viene compilato in un eseguibile che vive interamente nel suo segmento di testo. Quindi, il segmento .text estratto del file PE è interamente codice indipendente dalla posizione (=PIC), il che significa che può essere trattato come qualsiasi shellcode.
L'esecuzione di HandleKatz in memoria ha un'impronta molto ridotta, poiché di per sé non alloca altra memoria eseguibile e può quindi essere efficacemente combinato con concetti come (Phantom)DLL-Hollowing come descritto da @_ForrestOrr. Questo è in contrasto con i loader PIC PE, come Donut, SRDI o Reflective Loaders che, durante il caricamento del PE, allocano più memoria eseguibile. Inoltre, utilizza una versione modificata di ReactOS MiniDumpWriteDump e bypassa gli userlandhooks usando RecycledGate.
Per informazioni dettagliate, fare riferimento al file PDF PICYourMalware.pdf in questo repository.
Nota bene che diversi compilatori (versioni) producono risultati diversi. Questo potrebbe generare un file PE con rilocazioni.
Tutti i test sono stati eseguiti utilizzando x86_64-w64-mingw32-gcc mingw-gcc versione 11.2.0 (GCC). Il PIC prodotto è stato testato con successo su: Windows 10 Pro 10.0.17763. Su altre versioni di Windows, gli hash delle API potrebbero differire.
Per utilizzare il PIC, creare un puntatore allo shellcode in memoria eseguibile e chiamarlo secondo la definizione:
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
Per la deoffuscazione del file di dump, è possibile utilizzare lo script Decoder.py.
Loader implementa un loader di esempio per HandleKatz:
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

Poiché vengono utilizzati handle clonati insieme al codice ReactOS modificato, non è possibile osservare eventi ProcessAccess su Lsass. Tuttavia, è possibile osservare eventi ProcessAccess su programmi che possiedono un handle a Lsass.
I difensori possono monitorare le maschere ProcessAccess con PROCESS_DUP_HANDLE (0x0040) impostato per identificare l'uso di questo strumento.