
PPL で保護されたプロセスを含む ALPC ポートを列挙・分類する Windows ユーザーランドツール。
標準のハンドル複製が失敗するPPL(Protected Process Light)プロセスが所有するポートも含め、Advanced Local Procedure Call(ALPC)ポートを列挙・分類するWindowsユーザーランドツールです。
標準的な列挙ツールは、保護されたポートやアクセスが拒否されたポートを完全にスキップすることが多く、盲点が生じます。このツールは、ALPCポートのオブジェクト型インデックスを動的に解決し、標準の複製リクエストを拒否するポートを正確に分類するためにNtQueryInformationProcessにフォールバックします。
このツールは、標準的なWindows IPC列挙における盲点を、次の2つの主要な対象者向けに解消します:
PROCESS_DUP_HANDLEアクセスをフックまたは拒否する可能性があります。標準ツールはこれらのポートを黙って除外します。このツールは失敗を検出し、代わりにPS_PROTECTION構造を照会します。プロセスがアクセスを拒否したにもかかわらず、TypeとSignerが0(None)を返す場合、それは正規のWindows PPLプロセスではありません。これは極めて異常であり、直ちに調査対象としてフラグを立てるべきです。稼働中のWindowsシステムでのテスト中、このツールは58,916個のオープンハンドルを走査し、2,618個のALPCポートを特定しました:
生出力: この実行の完全でフィルタリングされていない出力は、
alpc_enumerator_output.txtで入手できます。
匿名ポートに関する注記: 匿名ポートのコンソール出力は、ターミナル出力が数千のエントリで肥大化するのを防ぐため、
main.cppではデフォルトで無効になっています。匿名ポートのリアルタイム出力が必要な場合は、コンパイル前に約451行目のcheckEntriesVectorForPrint(anonEntries, "Anonymous");のコメントを解除してください。
ユーザーランド列挙が正確であることを証明するため、このツールの出力はWindowsカーネルデバッガー(WinDbg)と手動で照合されています。オブジェクトアドレスとPPL Signerレベルは、カーネルの実際と正確に一致します。
main.cppを開くか、MSVCでコンパイルします。Releaseモード(x64)でビルドします。SeDebugPrivilegeが必要です)。ALPCオブジェクト型インデックスをハードコーディングする代わりに(Windowsビルド間で壊れるため)、このツールは使い捨てのALPCポートを作成し、その型を動的に照会して、ホストシステムの正しいインデックス(例:インデックス46)を特定します。標準のハンドル複製が失敗した場合、PS_PROTECTIONをデコードして、アクセス権に依存せずにポートを分類するために必要な正確なTypeとSignerを抽出します。
完全な技術的詳細については、Mediumの記事リンクをご覧ください: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
このツールは、ALPC/RPCとWindows内部構造に関する継続的な研究の一部です。近い将来、さらなる調査結果を公開し、関連ツールをリリースする予定です。これが役に立ったと思われた場合は、GitHubまたは以下のSNSでフォローして、今後の公開情報の通知を受け取ることを検討してください。