
Dumper de memória Lsass baseado em PIC usando handles clonados para evitar detecção, produzindo dumps ofuscados com pegada mínima de memória para operações de red team.
Esta ferramenta foi implementada como parte da nossa palestra no Brucon2021 e demonstra o uso de manipuladores clonados para o Lsass para criar um dump de memória ofuscado do mesmo.
Ela compila para um executável vivendo totalmente em seu segmento de texto. Assim, o segmento .text extraído do arquivo PE é código totalmente independente de posição (=PIC), o que significa que pode ser tratado como qualquer shellcode.
A execução do HandleKatz na memória tem uma pegada muito pequena, pois ele mesmo não aloca mais memória executável e, portanto, pode ser eficientemente combinado com conceitos como (Phantom)DLL-Hollowing, conforme descrito por @_ForrestOrr. Isso contrasta com carregadores PE PIC, como Donut, SRDI ou Carregadores Reflexivos, que, durante o carregamento do PE, alocam mais memória executável. Além disso, ele faz uso de uma versão modificada do ReactOS MiniDumpWriteDump e contorna hooks em userland usando RecycledGate.
Para informações detalhadas, consulte o arquivo PDF PICYourMalware.pdf neste repositório.
Observe que diferentes compiladores (versões) produzem resultados diferentes. Isso pode produzir um arquivo PE com realocações.
Todos os testes foram realizados usando x86_64-w64-mingw32-gcc mingw-gcc version 11.2.0 (GCC). O PIC produzido foi testado com sucesso no: Windows 10 Pro 10.0.17763. Em outras versões do Windows, os hashes de API podem diferir.
Para usar o PIC, converta um ponteiro para o shellcode em memória executável e chame-o de acordo com a definição:
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
Para desofuscação do arquivo de dump, o script Decoder.py pode ser usado.
Loader implementa um carregador de exemplo para o HandleKatz:
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

Como manipuladores clonados são usados juntamente com código ReactOS modificado, nenhum evento de ProcessAccess pode ser observado no Lsass. No entanto, eventos de ProcessAccess em programas que possuem um manipulador para o Lsass podem ser observados.
Defensores podem monitorar máscaras de ProcessAccess com o conjunto PROCESS_DUP_HANDLE (0x0040) para identificar o uso desta ferramenta.