
PIC 기반 Lsass 메모리 덤퍼: 복제된 핸들을 사용하여 탐지를 우회하고, 최소 메모리 공간으로 난독화된 덤프를 생성하여 레드팀 작전에 사용됩니다.
이 도구는 Brucon2021 컨퍼런스 발표의 일환으로 구현되었으며, Lsass에 대한 복제된 핸들을 사용하여 동일한 프로세스의 난독화된 메모리 덤프를 생성하는 방법을 보여줍니다.
이 도구는 전적으로 텍스트 세그먼트에 상주하는 실행 파일로 컴파일됩니다. 따라서 PE 파일에서 추출된 .text 세그먼트는 완전한 위치 독립 코드(PIC)이므로, 일반적인 셸코드처럼 취급될 수 있습니다.
메모리에서 HandleKatz를 실행할 때 풋프린트가 매우 작습니다. 자체적으로 더 이상 실행 가능한 메모리를 할당하지 않기 때문에 @_ForrestOrr가 설명한 (Phantom)DLL-Hollowing과 같은 개념과 효율적으로 결합될 수 있습니다. 이는 PE 로딩 중에 더 많은 실행 가능 메모리를 할당하는 Donut, SRDI 또는 Reflective Loader와 같은 PIC PE 로더와 대조적입니다.
또한 수정된 버전의 ReactOS MiniDumpWriteDump를 사용하며, 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를 사용하려면 실행 가능한 메모리에서 셸코드에 대한 포인터를 캐스팅하고 다음 정의에 따라 호출합니다:
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 코드와 함께 사용되므로 Lsass에 대한 ProcessAccess 이벤트는 관찰되지 않습니다. 그러나 Lsass에 대한 핸들을 보유한 프로그램에서 ProcessAccess 이벤트는 관찰될 수 있습니다.
방어자는 **PROCESS_DUP_HANDLE (0x0040)**이 설정된 ProcessAccess 마스크를 모니터링하여 이 도구의 사용을 식별할 수 있습니다.