
Cobalt Strike用HVNC
Hidden Desktop(しばしばHVNCと呼ばれる)は、オペレータがユーザーに知られることなくリモートデスクトップセッションと対話できるツールです。VNCプロトコルは関与しませんが、結果として同様の体験を提供します。このCobalt Strike BOF実装は、C++で書かれたTinyNuke/そのフォークに代わるものとして作成されました。
Hidden Desktopには4つのコンポーネントがあります:
BOF初期化子: HVNCコードをBeaconプロセスに注入する小さなプログラム。
HVNCシェルコード: TinyNuke HVNCのPIC実装。
サーバーとオペレータUI: HVNCシェルコードからの接続を待ち受けるサーバーと、オペレータがリモートデスクトップと対話できるUI。現在はWindowsのみ対応。
アプリケーションランチャーBOF: 新しいデスクトップでアプリケーションを実行するBeacon Object Filesのセット。
最新のリリースをダウンロードするか、makeを使用して自分でコンパイルしてください。チームサーバーからアクセス可能なWindowsマシンでHVNCサーバーを起動します。その後、以下のコマンドでクライアントを実行します:
HiddenDesktop <server> <port>
サーバーマシンに新しい空白のウィンドウが表示されるはずです。BOFはデフォルトではアプリケーションを実行しません。アプリケーションランチャーBOFを使用して、新しいデスクトップで一般的なプログラムを実行できます:
hd-launch-edge
hd-launch-explorer
hd-launch-run
hd-launch-cmd
hd-launch-chrome
マウスとキーボードを使用して、エクスプローラーからプログラムを起動することもできます。その他のアプリケーションは以下のコマンドで実行できます:
hd-launch <command> [args]
https://github.com/WKL-Sec/HiddenDesktop/assets/9327972/82f73393-ba44-42b4-8eae-b36b7181fac0
rportfwdを使用してチームサーバーに転送されます。ステータス更新は名前付きパイプを介してBeaconに送り返されます。InputHandler関数に渡されます。BeaconInjectProcessを使用してシェルコードを実行するため、Malleable C2プロファイルまたはプロセスインジェクションBOFで動作をカスタマイズできます。Hidden Desktopを変更してリモートプロセスをターゲットにすることも可能ですが、現在はサポートされていません。これにより、BOFが終了してもHVNCシェルコードが実行を継続できます。InputHandlerは、Beaconが接続するための新しい名前付きパイプを作成します。接続が確立されると、指定されたデスクトップが開かれる(OpenDesktopA)か作成されます(CreateDesktopA)。リバースポートフォワード(rportfwd)を介してHVNCサーバーへの新しいソケットが確立されます。入力ハンドラーは、後述するDesktopHandler関数用の新しいスレッドを作成します。このスレッドは、HVNCサーバーからマウスとキーボードの入力を取得し、それをデスクトップに転送します。DesktopHandlerは、リバースポートフォワードを介してHVNCサーバーへの追加のソケット接続を確立します。このスレッドはウィンドウの変更を監視し、それらをHVNCサーバーに転送します。HiddenDesktop BOFは、以下のWindowsバージョン/アーキテクチャでexample.profileを使用してテストされました: