
pyCobaltHoundは、Cobalt StrikeとBloodhoundの間の深い統合を提供することを目的とした、Cobalt Strike用のAggressorスクリプト拡張です。
pyCobaltHound は Cobalt Strike 用の Aggressor スクリプト拡張であり、Cobalt Strike と BloodHound の深い統合を提供することを目的としています。
pyCobaltHound は、以下の方法でレッドチームオペレーターを支援します。
BloodHound データベースに問い合わせて発見する。これを実現するために、pyCobaltHound は一連の組み込みクエリを使用します。オペレーターは独自のクエリを追加/削除して、pyCobaltHound の監視機能を微調整することもできます。これにより、エンゲージメント中に特定のターゲット(ユーザー、ホストなど)に合わせて pyCobaltHound を柔軟に適応させることができます。
pyCobaltHound をインストールするには、このリポジトリをクローンしてください。含まれているサブモジュールも忘れずにクローンしてください!
以下のコマンドを使用できます。
git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodules以下の依存関係が正しくインストールされていることを確認してください。
PyCobalt は Cobalt Strike 用の Python API です。多くの Aggressor 関数を Python から直接使用できるようにします。
Python3+ がインストールされていることを確認してください。PyCobalt は macOS や Windows でも動作する可能性がありますが、Linux でのみ実際にテストしています。
PyCobalt Python ライブラリを使用する方法は 2 つあります。
pyCobaltHound はこのアプローチを採用しており、Python プログラム内で sys.path 変数を使用して検索パスを設定しています。PyCobalt Python ライブラリをインストールする。そのためには、python3 setup.py install を実行します。インストールされたライブラリを使用するように pycobalthound.py を変更する必要があります(リポジトリに含まれているものではなく)。PyCobalt プロジェクトが将来もメンテナンスされる保証はないことに注意してください。実際、最新のアップデートは Cobalt Strike 4.2 の変更に対応するためのものでした。ただし、pyCobaltHound は Cobalt Strike とそのオペレーターとのインターフェースに基本的な Aggressor 関数しか使用していないため、pyCobaltHound にとってこれは大きな問題ではありません。PyCobalt サブモジュールは、私たちがフォークしたものです。ただし、PyCobalt リポジトリを管理しているわけではありません。PyCobalt には、実行中の Python スクリプトを管理するための Script Console コマンドがいくつか付属しています。Aggressor スクリプトをリロードするときは、最初に明示的に Python スクリプトを停止する必要があります。そうしないと、何もせずに永遠に実行され続けます。pyCobaltHound の開発中、これが未定義の動作を引き起こす可能性があることに気付きました。
pyCobaltHound のリロードは次のように行えます。
aggressor> python-stop-all`
[pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
[pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
aggressor> reload example.cna`
[pycobalt] Executing script /root/pycobalthound/pycobalthound.py
PyCobalt を正しく動作させるには、1 つの Aggressor スクリプトでのみ PyCobalt を呼び出す必要があります。pyCobaltHound を他の PyCobalt を使用する Aggressor スクリプトと一緒に使用する場合は、この点に注意してください。私たちのアプローチは、PyCobalt ベースのツールごとに python() と include() の呼び出しを含む Aggressor スクリプトを用意することです。
notify2 は、Linux でデスクトップ通知を表示するためのパッケージです(現在はそうですが、過去形かもしれません)。後述するように、pyCobaltHound はオペレーターに通知するいくつかの方法をサポートしています。notify2 は Linux で D-Bus を介して通知デーモンに通知を送信するために使用されます。
これを有効にするには、次のコマンドで notify2 をインストールする必要があります。
pip install notify2
Cobalt Strike で pyCobaltHound を使用するには、pycobalthound.cna Aggressor スクリプトをクライアントにインポートするだけです。これが完了すると、Cobalt Strike のメニューバーに pyCobaltHound メニューが表示されるはずです。

pyCobaltHound の初期の目標は、Cobalt Strike の資格情報キャッシュ(View > Credentials)を新しいエントリについて監視することでした。これは、Cobalt Strike が資格情報ストアに変更があったときに発生させる on_credentials イベントに反応することで実現します。
このイベントが発生すると、pyCobaltHound は以下を実行します。
Cobalt Strike から受信したデータを解析して検証する。BloodHound データベースに存在するか確認する。BloodHound データベースに問い合わせる。これらはすべてメインの Cobalt Strike クライアントから非同期的に行われるため、UI がブロックされることはなく、pyCobaltHound がバックグラウンドで調査している間も作業を続けられます。
pyCobaltHound は、複数のチームサーバーを使用する際の問題を防ぐために、チームサーバーごとに別々のキャッシュを使用します。
特定のユーザー(または資格情報ストア全体)を再調査したい場合があります。これは、BloodHound データベースに新しいデータをアップロードした場合などに該当します。
pyCobaltHound は資格情報ストア内のすべてのエンティティを既に調査(したがってキャッシュ)しているはずなので、オペレーターの介入なしに新しいデータに対してそれらを評価することはありません。
オペレーターは、キャッシュされるエンティティを制御するために 2 つの方法を利用できます。
特定のエンティティ(または複数)をキャッシュから削除したい場合は、資格情報ビューア(View > Credentials)で行えます。対象を選択し、pyCobaltHound メニューエントリの下にある remove from cache オプションをクリックするだけです。

キャッシュからすべてのエンティティを削除したい場合は、pyCobaltHound のメインメニュー(Cobalt Strike > pyCobaltHound > Wipe cache)で行えます。これは、資格情報ストア全体を再評価したい場合に最も役立ちます。

ターゲットをキャッシュから削除した後、pyCobaltHound に資格情報ストアの内容を再調査するよう手動で促すことができます。これは上記と同じプロセスに従います。
pyCobaltHound には、既存のビーンセッションと対話する機能が含まれています。これはビーコンのコンテキストメニューにあります。これらのコマンドは、単一のビーコンまたは選択したビーコンに対して実行できることに注意してください。

この機能は、資格情報がまだ侵害されていないが、実質的に制御下にある(例えば、そのセッショントークンでビーコンが実行されている)ユーザーやコンピュータを扱う場合に特に便利です。
Mark as owned 機能(pyCobaltHound > Mark as owned)は、ビーコン(またはビーコンコレクション)を BloodHound データベースで所有済みとしてマークするために使用できます。

このダイアログでは、オペレーターに以下の情報を求めます。
pyCobaltHound は、ビーンセッションがローカル管理者、SYSTEM、または別のユーザーとしての高整合性セッションとして実行されている場合にのみ、コンピュータを所有済みとしてマークします。Investigate 機能(pyCobaltHound > Investigate)は、ビーコン(またはビーコンコレクション)に関連するユーザーとホストを調査するために使用できます。

このダイアログでは、オペレーターに以下の情報を求めます。
pyCobaltHound は、ビーンセッションがローカル管理者、SYSTEM、または別のユーザーとしての高整合性セッションとして実行されている場合にのみ、コンピュータを調査します。pyCobaltHound は、整合性レベルをチェックせずにすべてのエンティティを調査します。pyCobaltHound には、エンティティを自由に調査する機能が含まれています。これはメインメニュー(Cobalt Strike > pyCobaltHound > Investigate)にあります。
この機能は、資格情報が侵害されておらず、制御下にもないユーザーやコンピュータを扱う場合に特に便利です。

このダイアログでは、オペレーターに以下の情報を求めます。
pyCobaltHound の設定メニューは、Cobalt Strike > pyCobaltHound > Settings にあります。

pyCobaltHound は設定をディスクに保存します。pyCobaltHound がリロードされるたびに、設定ファイルの存在を確認し、見つかった場合は保存された設定を読み込みます。