Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/nvisosecurity/pycobalthound
ペネトレーションテストフレームワーク特権昇格偵察エクスプロイトフレームワーク横移動情報収集ポストエクスプロイトレッドチーミング
GitHubnvisosecurity/pycobalthound

pyCobaltHound

pyCobaltHoundは、Cobalt StrikeとBloodhoundの間の深い統合を提供することを目的とした、Cobalt Strike用のAggressorスクリプト拡張です。

リポジトリを見る
1351954年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

クイックサマリー

pyCobaltHound は Cobalt Strike 用の Aggressor スクリプト拡張であり、Cobalt Strike と BloodHound の深い統合を提供することを目的としています。

pyCobaltHound は、以下の方法でレッドチームオペレーターを支援します。

  • 新たに収集された資格情報によって開かれた昇格パスを自動的に BloodHound データベースに問い合わせて発見する。
  • 侵害されたユーザーやコンピュータを自動的に「所有済み」としてマークする。
  • オペレーターがビーコンセッションやユーザーの昇格可能性を迅速かつ簡単に調査できるようにする。

これを実現するために、pyCobaltHound は一連の組み込みクエリを使用します。オペレーターは独自のクエリを追加/削除して、pyCobaltHound の監視機能を微調整することもできます。これにより、エンゲージメント中に特定のターゲット(ユーザー、ホストなど)に合わせて pyCobaltHound を柔軟に適応させることができます。

インストールと使用方法

pyCobaltHound をインストールするには、このリポジトリをクローンしてください。含まれているサブモジュールも忘れずにクローンしてください!

以下のコマンドを使用できます。

  • git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodules

依存関係

以下の依存関係が正しくインストールされていることを確認してください。

PyCobalt

PyCobalt は Cobalt Strike 用の Python API です。多くの Aggressor 関数を Python から直接使用できるようにします。

セットアップ

Python3+ がインストールされていることを確認してください。PyCobalt は macOS や Windows でも動作する可能性がありますが、Linux でのみ実際にテストしています。

PyCobalt Python ライブラリを使用する方法は 2 つあります。

  1. PYTHONPATH を使用してリポジトリから直接実行する。pyCobaltHound はこのアプローチを採用しており、Python プログラム内で sys.path 変数を使用して検索パスを設定しています。
  2. 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 のリロードは次のように行えます。

    root@kitploit:~
    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 (オプション)

notify2 は、Linux でデスクトップ通知を表示するためのパッケージです(現在はそうですが、過去形かもしれません)。後述するように、pyCobaltHound はオペレーターに通知するいくつかの方法をサポートしています。notify2 は Linux で D-Bus を介して通知デーモンに通知を送信するために使用されます。

これを有効にするには、次のコマンドで notify2 をインストールする必要があります。

pip install notify2

Cobalt Strike での使用

Cobalt Strike で pyCobaltHound を使用するには、pycobalthound.cna Aggressor スクリプトをクライアントにインポートするだけです。これが完了すると、Cobalt Strike のメニューバーに pyCobaltHound メニューが表示されるはずです。

使用方法

資格情報ストアの監視

pyCobaltHound の初期の目標は、Cobalt Strike の資格情報キャッシュ(View > Credentials)を新しいエントリについて監視することでした。これは、Cobalt Strike が資格情報ストアに変更があったときに発生させる on_credentials イベントに反応することで実現します。

このイベントが発生すると、pyCobaltHound は以下を実行します。

  1. Cobalt Strike から受信したデータを解析して検証する。
  2. キャッシュを確認し、これらのエンティティを既に調査済みかどうかをチェックする。
  3. エンティティをキャッシュに追加して将来の実行に備える。
  4. エンティティが BloodHound データベースに存在するか確認する。
  5. エンティティを所有済みとしてマークする。
  6. 組み込みクエリとカスタムクエリの両方を使用して、新しい各エンティティについて BloodHound データベースに問い合わせる。
  7. 返された結果を解析し、興味深い発見があればオペレーターに通知し、基本的な HTML レポートに書き込む。

これらはすべてメインの 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 は、整合性レベルをチェックせずにすべてのエンティティを調査します。
    • ユーザー: これが選択された場合、ビーコンコンテキストに関連付けられたユーザーが所有済みとしてマークされます。
    • コンピュータ: これが選択された場合、ビーコンコンテキストに関連付けられたコンピュータが、関連セッションの整合性レベルに関係なく所有済みとしてマークされます。
  • ドメイン
    • ビーコンのコンテキストにはドメインへの参照が含まれていないため、オペレーターは自分で指定する必要があります。
  • レポートを生成する
    • このオプションが選択された場合、基本的な HTML レポートが生成されます。

エンティティ調査

pyCobaltHound には、エンティティを自由に調査する機能が含まれています。これはメインメニュー(Cobalt Strike > pyCobaltHound > Investigate)にあります。

この機能は、資格情報が侵害されておらず、制御下にもないユーザーやコンピュータを扱う場合に特に便利です。

このダイアログでは、オペレーターに以下の情報を求めます。

  • ターゲット
    • オペレーターが調査したいエンティティの CSV 形式の文字列。これは単なるユーザー/コンピュータ名(例: user1)または FQDN([email protected])です。
    • 注意: 表記を混在させないでください。ユーザー/コンピュータ名 または FQDN のいずれかに統一してください。
  • ドメインを含む
    • このパラメータは、指定されたターゲット文字列が単なるユーザー/コンピュータ名なのか、FQDN なのかを指定します。
  • ドメイン
    • ターゲット文字列に FQDN が含まれていない場合、オペレーターは調査するエンティティが属するドメインを指定する必要があります。
  • レポートを生成する
    • このオプションが選択された場合、基本的な HTML レポートが生成されます。

設定

pyCobaltHound の設定メニューは、Cobalt Strike > pyCobaltHound > Settings にあります。

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

pyCobaltHound はチームサーバーごとに設定ファイルを保存するため、異なるチームサーバーで異なる設定を持つことが可能です。

Neo4j

BloodHound データベースに認証するために、pyCobaltHound は以下の情報を必要とします。

  • Neo4j ユーザー名
  • Neo4j パスワード
  • Neo4j URL

注意: 設定を永続的に保存する(クライアント/ホストの再起動をまたいで保持する)ことを選択した場合、pyCobaltHound はこれらの資格情報をデシリアライズしてディスクに保存します。

キャッシュ

前述のとおり、pyCobaltHound はキャッシュを使用して不要な作業を防ぎます。このキャッシュは設定で無効にできます。これは主に新しいクエリを開発する場合に便利で、キャッシュを常に管理/ワイプする必要がなくなります。

通知

pyCobaltHound は、興味深いエンティティを特定した際にオペレーターに通知するためのいくつかの方法をサポートしています。これらの通知を無効にすることも可能です。

ネイティブ通知

デフォルトでは、pyCobaltHound はデフォルトの Aggressor メッセージボックスを使用してオペレーターに通知します。このオプションはオペレーターのワークフローに影響を与える可能性があります。ただし、Cobalt Strike クライアントを実行できるすべてのプラットフォームでサポートされているため、デフォルトの方法となっています。

Notify2 通知

pyCobaltHound は、Linux でのデスクトップ通知表示もサポートしています。これは、オペレーターのワークフローを中断しないため、私たちが好むオプションです。

レポート

一部のワークフロー中、pyCobaltHound は HTML レポートを生成します。この設計選択は、多くのエンティティが調査された場合にオペレーターに巨大な通知が殺到するのを避けるために行われました。これらのレポートは reports フォルダに生成されます。レポート生成を無効にすることも可能です。

クエリ同期

デフォルトでは、pyCobaltHound はすべてのクエリ関連設定に中央ファイルを使用して、チームサーバー間でクエリを同期します。つまり、あるチームサーバーで有効化、追加、削除されたクエリは、他のチームサーバーでも有効化、追加、削除されます。これは主に利便性のためのオプションであり、無効にすることもできます。これは、接続しているすべてのチームサーバーには適用されないエンゲージメント固有のクエリを実行している場合などに便利です。

無効化

クエリ同期が無効の場合、pyCobaltHound は固有のクエリファイルの存在を確認します。存在する場合は、それらを読み込んでワークフロー中に使用します。ファイルが存在しない場合は、作成して読み込みます。この設定はリロード後も維持されます。

有効化

クエリ同期が有効の場合、pyCobaltHound は固有のクエリファイルの存在を確認します。存在する場合、オペレーターに選択を促します。

オペレーターには以下の選択肢があります。

  • 削除
    • 選択された場合、pyCobaltHound は固有のクエリファイルを単に削除します。すべてのカスタムクエリは失われます。
  • マージ
    • 選択された場合、pyCobaltHound は固有のクエリファイルを一般クエリファイルにマージしようとします。クエリをマージする前に、一般ファイルに同じ名前または同じ Cypher ステートメントを持つクエリがないか確認します。マージ競合が発生した場合、オペレーターはマージされなかったクエリを保持するかどうかを尋ねられます。それらは別のファイルに保存されます。その後、固有のクエリファイルは削除されます。
  • 保持
    • 選択された場合、pyCobaltHound は固有のクエリファイルをそのまま残します。すべてのカスタムクエリは保持され、クエリ同期が再び無効にされた場合に再度読み込まれます。

クエリ

組み込みクエリ

pyCobaltHound は現在、以下の組み込みクエリをサポートしています。

  • ユーザー (user-queries.json)
    • ドメイン管理者へのパス
    • 高価値ターゲットへのパス
  • コンピュータ (computer-queries.json)
    • 高価値ターゲットへのパス

クエリの管理

pyCobaltHound が使用するさまざまなクエリの管理は、メインメニュー(Cobalt Strike > pyCobaltHound > Queries)から行えます。

クエリの有効化/無効化

Update queries ダイアログを使用すると、オペレーターは特定のクエリを有効/無効にできます。このダイアログを使用する際、オペレーターは最初に更新するクエリのタイプを尋ねられます。これは、このワークフロー中に正しいクエリを動的にレンダリング/読み込むためです。

最初のダイアログに回答すると、オペレーターにはそのタイプの利用可能なすべてのクエリのリストが表示されます。ここで、有効/無効にしたいクエリを選択できます。

aggressor_query_update

クエリタイプオプションは、クエリタイプをワークフローの次の関数に渡すための醜い回避策であり、オペレーターにとっては気にする必要はありません。

カスタムクエリの追加

Add query 機能を使用すると、オペレーターは独自のクエリを追加/削除して、pyCobaltHound の調査機能を微調整できます。これにより、エンゲージメント中に特定のターゲット(ユーザー、ホストなど)に合わせて pyCobaltHound を柔軟に適応させることができます。

このダイアログでは、オペレーターに以下の情報を求めます。

  • 名前
    • カスタムクエリの名前。これは pyCobaltHound のワークフロー中のさまざまなメニューやレポートで使用されます。
  • Cypher クエリ
    • pyCobaltHound が実行する必要がある Cypher クエリ。オペレーターはクエリを自由に定義できます。唯一の要件は以下の通りです。
      • pyCobaltHound は、調査しているエンティティ名に基づいて以下の Cypher 文字列を動的に生成します。
        • WITH [account names here] AS samAccountNames UNWIND samAccountNames AS names
        • {statement} プレースホルダーはこの文字列で置き換えられます。
        • この Cypher 文字列は、ターゲットの samAccountNames を取得し、それらを "names" 変数に割り当てます。
        • クエリを動作させるには、次のステートメントで始まることを確認する必要があります。
          • MATCH (x) WHERE x.name STARTS WITH names
          • 追加するクエリのタイプに応じて、フィルタリング(例: (x:User))をお勧めします。
      • pyCobaltHound は、クエリがユーザー名の重複のない集合を返すことを期待します。
        • そのためには、クエリを RETURN DISTINCT (x.name) で終了させてください。
      • いくつかの例については、組み込みクエリを参照してください。
  • レポートヘッドライン
    • pyCobaltHound がカスタムクエリに使用する見出し。これは pyCobaltHound のワークフロー中の通知やレポートで使用されます。
      • 唯一の要件は、{number} プレースホルダーを含むことです。これは pyCobaltHound がこのクエリの結果数で置き換えます。
  • ステータス
    • このパラメータは、クエリが有効状態で作成されるか無効状態で作成されるかを決定します。
  • クエリタイプ
    • 追加するクエリのタイプ。これにより、編集されるクエリのセットが決まります。

カスタムクエリの削除

Delete query ダイアログを使用すると、オペレーターは pyCobaltHound から特定のカスタムクエリを削除できます。このダイアログを使用する際、オペレーターは最初に削除するクエリのタイプを尋ねられます。これは、このワークフロー中に正しいクエリを動的にレンダリング/読み込むためです。

最初のダイアログに回答すると、オペレーターにはそのタイプの利用可能なすべてのクエリのリストが表示されます。ここで、削除したいクエリを選択できます。

aggressor_query_remove

クエリタイプオプションは、クエリタイプをワークフローの次の関数に渡すための醜い回避策であり、オペレーターにとっては気にする必要はありません。

参考文献

pyCobaltHound は以下のものを使用/参考にしています。

  • pycobalt by dcsync
  • Vampire by Coalfire-Research
  • ANGRYPUPPY by vysecurity
  • Max by knavesec
  • BloodHound by SpecterOps
ツールをダウンロード