
Esegui il dump di lsass utilizzando solo funzioni NTAPI, creando manualmente file Minidump (senza MiniDumpWriteDump!!!)
NativeDump consente di dumpare il processo lsass utilizzando solo NTAPI, generando un file Minidump con solo gli stream necessari per essere analizzati da strumenti come Mimikatz o Pypykatz (Stream SystemInfo, ModuleList e Memory64List).

Il programma ha un argomento opzionale per il file di output, il nome predefinito è "proc_<PID>.dmp":
NativeDump.exe [DUMP_FILE]

Lo strumento è stato testato sulle ultime versioni di Windows con le soluzioni di sicurezza più comuni (Microsoft Defender for Endpoints, CrowdStrike...) e funziona bene, ma la furtività dipenderà dalla "versione" scelta: usa linguaggi poco comuni e personalizza i binari per ottenere i migliori risultati! Tuttavia, non funziona se PPL è abilitato o la struttura PEB non è leggibile. Aggiornamento: Ora è possibile eseguire i programmi senza leggere il PEB, controlla il branch peb-unreadable :)
Alcuni vantaggi di questa tecnica sono:
Puoi trovare il progetto in diverse "versioni" (o linguaggi):
main - Implementazione base .NET (questo branch)
python-flavour - Implementazione Python con 3 metodi di sovrascrittura di ntdll.dll + Esfiltrazione su macchina remota
golang-flavour - Implementazione Golang con 3 metodi di sovrascrittura di ntdll.dll + Esfiltrazione su macchina remota
c-flavour - Implementazione C/C++ con 3 metodi di sovrascrittura di ntdll.dll
bof-flavour - File BOF con 3 metodi di sovrascrittura di ntdll.dll
rust-flavour - Implementazione Rust di @safedv
crystal-flavour - Implementazione Crystal con capacità di sovrascrittura di ntdll.dll
nim-flavour - Implementazione Nim con capacità di sovrascrittura di ntdll.dll
Altri branch interessanti che usano .NET:
remote - Esfiltrazione su macchina remota + 3 metodi di sovrascrittura di ntdll.dll + Risoluzione dinamica delle funzioni + Crittografia AES delle stringhe + Codifica XOR del contenuto del Minidump
all-modules - Ottiene le informazioni per tutti i moduli (non solo lsasrv.dll)
peb-unreadable - Implementazione senza leggere la struttura PEB di lsass + 3 metodi di sovrascrittura di ntdll.dll
Dopo aver letto le strutture non documentate del Minidump, la sua struttura può essere riassunta in:

Ho creato uno strumento di parsing che può essere utile: MinidumpParser. Ci concentreremo sulla creazione di un file valido con solo i valori necessari per l'intestazione, la directory degli stream e i soli 3 stream necessari affinché un file Minidump possa essere analizzato da Mimikatz/Pypykatz: Stream SystemInfo, ModuleList e Memory64List.
L'intestazione è una struttura di 32 byte che può essere definita in C# come:
public struct MinidumpHeader
{
public uint Signature;
public ushort Version;
public ushort ImplementationVersion;
public ushort NumberOfStreams;
public uint StreamDirectoryRva;
public uint CheckSum;
public IntPtr TimeDateStamp;
}
I valori richiesti sono:
Ogni elemento nella Directory degli Stream è una struttura di 12 byte, quindi con 3 elementi la dimensione è di 36 byte. La definizione della struct in C# per un elemento è:
public struct MinidumpStreamDirectoryEntry
{
public uint StreamType;
public uint Size;
public uint Location;
}
Il campo "StreamType" rappresenta il tipo di stream come intero o ID, alcuni dei più rilevanti sono:
| ID | Tipo di Stream |
|---|---|
| 0x00 | UnusedStream |
| 0x01 | ReservedStream0 |
| 0x02 | ReservedStream1 |
| 0x03 | ThreadListStream |
| 0x04 | ModuleListStream |
| 0x05 | MemoryListStream |
| 0x06 | ExceptionStream |
| 0x07 | SystemInfoStream |
| 0x08 | ThreadExListStream |
| 0x09 | Memory64ListStream |
| 0x0A | CommentStreamA |
| 0x0B | CommentStreamW |
| 0x0C | HandleDataStream |
| 0x0D | FunctionTableStream |
| 0x0E | UnloadedModuleListStream |
| 0x0F | MiscInfoStream |
| 0x10 | MemoryInfoListStream |
| 0x11 | ThreadInfoListStream |
| 0x12 | HandleOperationListStream |
| 0x13 | TokenStream |
| 0x16 | HandleOperationListStream |
Il primo stream è uno stream SystemInformation, con ID 7. La dimensione è di 56 byte e si trova all'offset 68 (0x44), dopo la Directory degli Stream. La sua definizione in C# è: