
ブルーチーム向けの自動BloodHoundグラフ更新ツール。SIEMからのリアルタイムなセッション、グループ、CVEデータを用いてAD攻撃パスを強化し、継続的な監視とアラートを可能にします。

BloodHound CE 7.0リリース以降、デフォルトデータベースはPostgresに切り替わりました。このバージョンのFalconHoundは、依然としてNeo4jをデフォルトデータベースとして使用しています。最新のBloodHoundバージョンでFalconHoundを引き続き使用するには、bloodhound.config.jsonファイルに次の行を追加してください。```json "graph_driver": "neo4j",
BloodHoundチームは、少なくとも1年間はNeo4jのサポートを継続します。この期間内に、大規模なAPI改善が行われるか、FalconHoundにPGSQLサポートが実装されることを期待しています。
---
FalconHoundは、ブルーチーム向けのマルチツールです。BloodHoundのパワーをより自動化された方法で活用・強化することができます。SIEMやその他のログ集約ツールと組み合わせて使用するように設計されています。
BloodHoundの課題の一つは、スナップショット時点の情報しか提供しないことです。FalconHoundには、環境のグラフを最新の状態に保つための機能が含まれています。これにより、環境を**現在**の状態で確認できます。これは、常に変化する環境において特に有用です。
BloodHoundで収集が最も難しい関係の一つは、ローカルグループのメンバーシップとセッション情報です。ブルーチームとしては、この情報はログですぐに利用可能です。FalconHoundを使用すると、この情報を収集してグラフに追加し、BloodHoundで利用できるようになります。
これはFalconHoundの使い方の一例にすぎません。ログやセキュリティツールにあるあらゆる情報を収集し、BloodHoundグラフに追加するために使用できます。
さらに、グラフはアラートをトリガーしたり、エンリッチメントリストを生成したりするためにも使用できます。
例えば、ユーザーが特定のグループに追加された場合、FalconHoundを使用してグラフデータベースに問い合わせ、機密または高権限グループへの最短経路を特定できます。経路が存在する場合、これをSIEMに記録したり、アラートをトリガーしたりできます。
その他のFalconHoundの使用例:
- ログオン/ログオフイベントに基づいて、グラフ内のセッションを追加、削除、またはタイムアウトさせる。
- SentinelやMDEでインシデントが発生したコンピューターやユーザーを、グラフ内で侵害済みとしてマークする。
- CVE情報や公開エクスプロイトの有無をグラフに追加する。
- あらゆる種類のAzureアクティビティ。
- ユーザーがグループに追加されたり、新しいロールを取得した場合に、機密グループへの最短経路を再計算する。
- 新しいユーザー、グループ、コンピューターをグラフに追加する。
- SentinelやSplunk向けに、例えばKerberoastableなユーザーや特定のエンティティの所有権を持つユーザーのエンリッチメントリストを生成する。
可能性は無限です。追加のアイデアはIssueトラッカーに投稿するか、PRを送信してください。
なぜこれを開発したのか、またいくつかのユースケース例について詳しく説明したブログは[こちら](https://medium.com/falconforce/falconhound-attack-path-management-for-blue-teams-42adedc9cae5?source=friends_link&sk=9f64b6b3028c5a2a6087d63b4fd2c82f)にあります。
目次:
- [サポートされているデータソースとターゲット](#supported-data-sources-and-targets)
- [インストール](#installation)
- [使用方法](#usage)
- [アクション](#actions)
- [グラフへの拡張](#extensions-to-the-graph)
- [資格情報管理](#credential-management)
- [デプロイ](#deployment)
- [ライセンス](#license)
## サポートされているデータソースとターゲット
FalconHoundはBloodHoundと共に使用するように設計されています。BloodHoundの代替品ではありません。BloodHoundとその他のサポートするすべてのデータプラットフォームのパワーを自動化された方法で活用するためのものです。
現在、FalconHoundは以下のデータソースおよび/またはターゲットをサポートしています。
- Azure Sentinel
- Azure Sentinel Watchlists
- Splunk
- Microsoft Defender for Endpoint
- Neo4j
- MS Graph API (初期段階)
- CSVファイル
- Azure Data Explorer (ADX) - ベータ版
- LogScale
- BloodHound CE and BHE (初期段階)
- MarkDownファイル
- Elastic (初期段階)
今後、さらにデータソースとターゲットを追加する予定です。
現時点では、FalconHoundはBloodHound用のNeo4jデータベースのみをサポートしています。BH CEおよびBHEのAPIサポートは活発に開発中です。
---
## インストール
FalconHoundはGoで書かれているため、インストールは不要です。リリースセクションからバイナリをダウンロードして実行するだけです。
Windows、Linux、MacOS用のコンパイル済みバイナリがあります。[リリース](https://github.com/FalconForceTeam/FalconHound/releases)セクションで入手できます。
実行する前に、設定ファイルを作成する必要があります。ルートフォルダにサンプル設定ファイルがあります。すべての資格情報を作成する手順は[こちら](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)にあります。
FalconHoundを実行する推奨方法は、スケジュールタスクまたはcronジョブとして実行することです。これにより、定期的に実行し、グラフ、アラート、エンリッチメントを最新の状態に保つことができます。
### 必要条件
- BloodHound、または少なくとも現時点ではNeo4jデータベースが必要です。
- SIEMまたはその他のログ集約ツール。現在はAzure SentinelとSplunkがサポートされています。
- 各エンドポイントと通信するための資格情報([必要な権限](https://github.com/falconforceteam/falconhound/blob/main/docs/required_permissions.md)を持っていること)。
### 設定
FalconHoundはYAMLファイルを使用して設定します。ルートフォルダにサンプル設定ファイルがあります。
設定ファイルの各セクションについては以下で説明します。
---
## 使用方法
#### デフォルト実行
FalconHoundを実行するには、バイナリを実行し、`-go`パラメータを追加して、アクションフォルダ内のすべてのクエリを実行させます。```bash
./falconhound -go
有効なアクションをすべて一覧表示するには、-actionlist パラメータを使用します。これにより、actions フォルダ内の設定ファイルで有効になっているすべてのアクションが一覧表示されます。これは -go パラメータと組み合わせて使用する必要があります。```bash
./falconhound -actionlist -go
### 選択したアクションセットで実行する
選択したアクションセットを実行するには、`-ids`パラメータを使用し、その後に1つまたはカンマ区切りのアクションIDのリストを指定します。これにより、パラメータで指定されたアクションが実行され、テストやトラブルシューティング、特定のより頻繁な更新が必要な場合に非常に便利です。これは`-go`パラメータと組み合わせて使用する必要があります。```bash
./falconhound -ids action1,action2,action3 -go
デフォルトでは、FalconHoundはカレントディレクトリ内の設定ファイルを探します。-config フラグを使用して設定ファイルを指定することもできます。これにより、異なる設定で複数のFalconHoundインスタンスを実行し、異なる環境に対して操作できます。```bash
./falconhound -go -config /path/to/config.yml
#### 別のアクションフォルダで実行する
デフォルトでは、FalconHoundはカレントディレクトリ内のactionsフォルダを探します。`-actions-dir`フラグを使用すると、別のフォルダを指定することもできます。これにより、テストやトラブルシューティングが容易になるだけでなく、異なる設定、異なる環境、または異なる時間間隔でFalconHoundの複数のインスタンスを実行することも可能になります。```bash
./falconhound -go -actions-dir /path/to/actions
デフォルトでは、FalconHound は config.yml(またはカスタムで読み込まれたもの)の資格情報を使用します。-keyvault フラグを設定することで、FalconHound は設定からキーボルトを取得し、そこからすべてのシークレットを取得します。キーボルトに不足している項目がある場合は、設定ファイルにフォールバックします。マネージド ID を使用して Azure キーボルトからシークレットを取得したい場合は、authtype 変数を msi として定義します。```bash
./falconhound -go -keyvault
---
## アクション
アクションはFalconHoundの中核です。これらはFalconHoundが実行するクエリです。それらはソースおよびターゲットのネイティブ言語で記述され、actionsフォルダに格納されます。各アクションは個別のファイルであり、情報のソース(クエリターゲット)のディレクトリに格納されます。ファイル名がアクションの名前として使用されます。
### アクションフォルダ構造
アクションフォルダはクエリソースごとにサブディレクトリに分かれています。すべてのフォルダは再帰的に処理され、すべてのYAMLファイルはアルファベット順に実行されます。
Neo4jアクションは**必ず**最後に処理する必要があります。その出力は、最新の結果を得るために、他のデータソースが最初にグラフデータベースを更新することに依存しているためです。
### アクションファイル
すべてのファイルはYAMLファイルです。YAMLファイルには、クエリ、いくつかのメタデータ、およびクエリ対象の情報のターゲットが含まれています。
ルートフォルダにテンプレートファイルがあります。これを使用して独自のアクションを作成できます。より多くの例については、actionsフォルダ内のアクションを参照してください。
ほとんどの項目はかなり自明ですが、アクションに関していくつか重要な注意点があります。
#### 有効
名前が示すように、これはアクションを有効または無効にするために使用されます。falseに設定されている場合、そのアクションは実行されません。```yaml
Enabled: true
アクションのデバッグモードを有効または無効にするために使用されます。これがtrueに設定されている場合、アクションはデバッグモードで実行され、クエリ結果がコンソールに出力されます。これはテストやトラブルシューティングに便利ですが、本番環境での使用は推奨されません。結果の数によっては、アクションの処理が遅くなることがあります。```yaml Debug: false
#### Query
`Query` フィールドは、ソースに対して実行されるクエリです。これは、`SourcePlatform` に応じて、KQL クエリ、SPL クエリ、または Cypher クエリになります。
重要: クエリは可能な限り正確にし、必要なフィールドのみを返すようにしてください。これにより、結果の処理がより速く、効率的になります。
さらに、Cypher クエリを実行する際は、結果として JSON オブジェクトを返すようにしてください。そうしないと、処理が失敗します。
例えば、以下のクエリは Azure サブスクリプションの Name、Count、Role、Owners を返します:```cypher
MATCH p = (n)-[r:AZOwns|AZUserAccessAdministrator]->(g:AZSubscription)
RETURN {Name:g.name , Count:COUNT(g.name), Role:type(r), Owners:COLLECT(n.name)}
各ターゲットには、設定可能ないくつかのオプションがあります。ターゲットによっては、他のものより多くの設定が必要な場合があります。
すべてのターゲットには Name フィールドと Enabled フィールドがあります。Name フィールドはターゲットを識別するために使用されます。Enabled フィールドはターゲットを有効または無効にするために使用されます。これが false に設定されている場合、ターゲットは無視されます。
CSV は {{date}} 変数をサポートしており、これは YYYY-MM-DD 形式の現在の日付に置き換えられます。これは日次レポートを作成するために使用できます。
これはフォルダ名やファイル名(例:path/to/filename-{{date}}.csv)またはフォルダ名自体で使用できます。```yaml
#### Markdown
Markdownは{{date}}変数をサポートしており、これは現在の日付で置き換えられ、形式は`YYYY-MM-DD`です。これを使用して日次レポートを作成できます。
これはフォルダ名やファイル名(例:`path/to/filename-{{date}}.md`)またはフォルダ名自体に使用できます。```yaml
- Name: Markdown
Enabled: true
Path: path/to/filename.md
出力例:```markdown
Description: Get a list of Domain Admins. Date: 2024-02-19
| Name | ObjectID |
|---|---|
| [email protected] | S-1-5-21-1122334455-112233445-1112223334-11223344 |
#### Neo4j