
Дампинг памяти Lsass на основе PIC с использованием клонированных дескрипторов для обхода обнаружения, создающий обфусцированные дампы с минимальным объёмом памяти для операций красной команды.
Этот инструмент был реализован в рамках нашего выступления на конференции Brucon2021 и демонстрирует использование клонированных дескрипторов к Lsass для создания обфусцированного дампа памяти того же процесса.
Он компилируется в исполняемый файл, полностью находящийся в его текстовом сегменте. Таким образом, извлеченный .text сегмент PE-файла является полностью позиционно-независимым кодом (=PIC), что означает, что с ним можно обращаться как с любым shellcode.
Выполнение HandleKatz в памяти имеет очень малый след, так как сам он не выделяет дополнительную исполняемую память и поэтому может эффективно сочетаться с такими концепциями, как (Phantom)DLL-Hollowing, описанными @_ForrestOrr. Это отличается от загрузчиков PIC PE, таких как Donut, SRDI или Reflective Loaders, которые при загрузке PE выделяют больше исполняемой памяти. Кроме того, он использует модифицированную версию ReactOS MiniDumpWriteDump и обходит пользовательские перехваты (userland hooks) с помощью RecycledGate.
Для получения подробной информации обратитесь к PDF-файлу PICYourMalware.pdf в этом репозитории.
Обратите внимание, что разные компиляторы (версии) дают разные результаты. Это может привести к созданию PE-файла с перемещениями.
Все тесты проводились с использованием x86_64-w64-mingw32-gcc mingw-gcc version 11.2.0 (GCC). Полученный PIC был успешно протестирован на: Windows 10 Pro 10.0.17763. На других версиях Windows хэши API могут отличаться.
Чтобы использовать PIC, приведите указатель на shellcode в исполняемой памяти и вызовите его в соответствии с определением:
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
Для деобфускации файла дампа можно использовать скрипт Decoder.py.
Loader реализует пример загрузчика для HandleKatz:
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

Поскольку используются клонированные дескрипторы вместе с модифицированным кодом ReactOS, события ProcessAccess для Lsass не наблюдаются. Однако можно наблюдать события ProcessAccess для программ, которые содержат дескриптор к Lsass.
Защитники могут отслеживать маски ProcessAccess с установленным PROCESS_DUP_HANDLE (0x0040), чтобы идентифицировать использование этого инструмента.