
PICベースのLsassメモリダンパーは、クローンハンドルを使用して検出を回避し、最小限のメモリフットプリントで難読化されたダンプを生成します。レッドチーム運用向け。
このツールは、Brucon2021カンファレンスのトークの一部として実装され、Lsassへのクローンハンドルを使用して、その難読化されたメモリダンプを作成する方法を示しています。
コンパイルすると、完全にテキストセグメント内に存在する実行可能ファイルになります。したがって、抽出されたPEファイルの.textセグメントは完全に位置独立コード(=PIC)であり、任意のシェルコードと同様に扱うことができます。
メモリ内でのHandleKatzの実行はフットプリントが非常に小さく、それ自体がそれ以上実行可能メモリを割り当てないため、@_ForrestOrr によって説明されている (Phantom)DLL-Hollowing などのコンセプトと効率的に組み合わせることができます。これは、Donut、SRDI、リフレクティブローダーなどのPIC PEローダーとは対照的であり、これらは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イベントは観測可能です。
防御側は、ProcessAccessマスクに設定された PROCESS_DUP_HANDLE (0x0040) を監視することで、このツールの使用を識別できます。