
The Console Monitor Driver is a KMDF kernel-mode filter driver that captures certain Fast I/O operations (input and output) that is sent to or from the ConDrv. ConDrv is a device created by condrv.sys, which handles the traffic between the Console Application (cmd/powershell/etc) and the actual console (conhost.exe).
このプロジェクトは、mimikatz 検出技術のフェーズ 2 のために行われた調査に基づいています。 このソリューションには複数のプロジェクトが含まれています:
Console Monitor Driver は、ConDrv との間で送受信される特定の Fast I/O 操作(入力および出力)をキャプチャする KMDF カーネルモードフィルタードライバーです。ConDrv は condrv.sys によって作成されるデバイスであり、コンソールアプリケーション(cmd/powershell など)と実際のコンソール(conhost.exe)間のトラフィックを処理します。Console Monitor は、エンドユーザーにコンソールとの間で送受信されたすべてのキーストロークや行を表示する C# の GUI アプリケーションです。このアプリケーションの実用性はほぼありませんが、プレゼンテーションやデバッグには最適です。
Console Monitor GUI アプリケーションは名前付きパイプを作成し、着信接続を待ち受けます。名前付きパイプに送信されたすべてのデータは GUI に表示されます。ドライバーは名前付きパイプが存在するかどうかを確認し、存在しない場合はエラーを返してインストールされません。名前付きパイプが存在する場合(GUI が実行されている場合)、ドライバーはインストールされ、スニッフィングされたすべてのデータをパイプに送信します。
これを機能させるには、以下の手順に従う必要があります:
基盤となる技術は ConsoleMonitorDriver と同じですが、ここではすべてのデータをスニッフィングする代わりに、KMDF フィルタードライバーがドライバーを通過するデータに対して複数の文字列をマッチングしようとします。この特定のケースでは、コンソールアプリケーションのタイトルが静的文字列と照合され、さらにコンソール出力の内容が複数の静的文字列と照合されます。いずれかのマッチが発生した場合、Event Tracing for Windows (ETW) を通じてイベントログにイベントが送信されます。現時点では、ドライバーに 4 つの異なるイベントが定義されています:
システムがこれらのメッセージを正しく読み取れるようにするには、event.xml ファイルを (wevtutil.exe) でインストールする必要がありますが、これは install.ps1 スクリプトで対応されています。
ドライバーを動作させる手順:
当然ながら、タイトルと出力に対してマッチングされる文字列は変更可能なため、文字列を変更すれば他のマルウェアやツールをこのツールで検出することもできます。
install.ps1 の Uninstall-Driver 関数を使用するだけです。
ファイルへのリダイレクトは、出力が ConDrv デバイスに送信されないため、検出されません。