BloodHound Community Editionの利用方法

Kali Linuxにデフォルトで入っているBloodHoundはいわゆる「Legacy」に位置付けられており、最新のコレクターによって収集したデータが使えません。（たぶん。。。）

そのため、データを使うためにBloodHound Community Edtionの導入方法から簡単な操作方法を記事にしておきます。

# 必要なスペック
必要スペックは以下の通りです。大規模はユーザー数が50,000を超えている場合とのこと。

|項目|最小|大規模|
|---|---|---|
|プロセッサ|4コア|12コア|
|RAM|4GB|96GB|
|ストレージ|10GB|50GB|

> [SpecterOps/BloodHound: Six Degrees of Domain Admin](https://github.com/SpecterOps/BloodHound?tab=readme-ov-file#system-requirements)

# 導入と起動

以下のコマンドに従いBloodHoundを立ち上げる。

```shell
# 0. ディレクトリ作成
mkdir bloodHound && cd bloodHound

# 1. composeファイルのダウンロード
curl -L https://ghst.ly/getbhce > ./docker-compose.yml

# 2. イメージの取得
sudo docker compose pull

# 3. コンテナ群の起動
sudo docker compose up -d

# 4. 初期パスワードの取得
docker compose logs | grep "Initial Password Set To"

# コンテナの停止と削除
sudo docker compose down --volumes
```

> [Getting started with BloodHound Community Edition – BloodHound](https://support.bloodhoundenterprise.io/hc/en-us/articles/17715215791899-Getting-started-with-BloodHound-Community-Edition)

# サービスへのアクセス
ログインページにアクセスしパスワードのリセットおよびログインを行う。

|項目|値|
|---|---|
|URL|`http://localhost:8080/ui/login`|
|ID|`admin`|
|Passowrd|（取得した初期パスワード）|

# データ収集
公式がサンプルデータを提供しているため、BloodHoundの操作体験などであれば以下からデータをダウンロードしよう。
> [Example Data · SpecterOps/BloodHound Wiki](https://github.com/SpecterOps/BloodHound/wiki/Example-Data)

## コレクターのダウンロード
以下の通り収集用ツールをダウンロードして端末へ配送する。
なお、GitHubからもダウンロード可能。
> [Releases · SpecterOps/SharpHound](https://github.com/SpecterOps/SharpHound/releases)

1. `サイドバー > Download Collectors`
2. `Download SharpHound`

## コレクターの実行
コマンドプロンプトからツールを実行する。
基本的にはオプションなしでデータが充実しているが細かな調整等を行う場合は公式ドキュメントを参考にしながら対応する。
> [All SharpHound Community Edition Flags, Explained – BloodHound](https://support.bloodhoundenterprise.io/hc/en-us/articles/17481375424795-All-SharpHound-Community-Edition-Flags-Explained)

```shell
C:\> SharpHound.exe
```
処理が完了するとzipファイルが生成されるためBloodHoundを起動している端末へ配送する。

# 収集したデータのアップロード
以下の通りアップロード画面へ遷移し、データをくわせる。

1. `サイドバー > Administration`
2. `Data Collection > File Ingest`
3. `Upload File(s)`
4. zipファイルを選択しアップロード

正常に取り込めたら`Status`および`Status Message`カラムが`Complete`になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/9f6a30bd-6f9b-4209-9945-f29fe2c09a49.png)

# データ分析
サイドバーにある`Explore`をクリックすると分析画面に遷移する。

## ノードと関連性の表示

### ノードの検索
サーチタブをクリックしテキストボックスにキーワードを入力すると、その文字を含むノードが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/5d91bd97-548a-47b1-9df0-b0e71fe94d50.png)

そのノードをクリックすると画面中央部にぽつんと表示されます。表示されたアイコンをクリックすると画面右側にノードの詳細情報が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/2c57ac50-e6ea-455d-bed0-9b3079fe29e6.png)

### ノードとの関連情報の表示

気になる項目の`+`をクリックすると展開することができます。展開した項目にノードが含まれている場合は自動的に画面に追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/0dc8639e-9a35-4af5-92d0-a54606a42c8e.png)

### レイアウトの調整
ノードが多いと文字がノードアイコンと重複したりして見づらくなります。そのため、レイアウトを調整するには画面左下にある`Layout > Sequential`をクリックします。
（`Standard`は画像に表示されているような状態を示します）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/2e941f24-04aa-4b62-a7bd-af930ba83cfe.png)

横長になるため全体を俯瞰しようとするとノードのサイズが小さくなってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/761c9add-0b37-415f-b871-f5a7001d411e.png)

ノード自体をドラッグ・アンド・ドロップすることにより、配置を自由に調節できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/1ceb594d-87e7-46f8-9887-5f98922590dc.png)

### 描画しているノードからノードを検索
描画されているノードからノードを検索するには、画面左下にある`Search Current Results`をクリックしてキーワード検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/d67c25e7-ce67-4775-b7f2-ffa03a9a85f6.png)


そしてサジェストされたノードをクリックすると画面上でノードが選択された状態になり、右側にあるインフォメーションも反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/1a199fcb-11d8-48c0-a502-f3e8eb2d17b7.png)

## 攻略パスの探索（PATHFINDING）
ペネトレーションテストでよくある「現在のアカウントからDomain Adminsへ昇格するルートはないか？」というような、ルートを探す手段が`PATHFINDING`機能になります。

### パスの表示
画面左上の`PATHFINDING`タブをクリックし、スタートノードとゴールとなるノードを設定します。
経路がある場合はノードとその経路が表示され、無い場合は表示されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/23b01266-7adc-4927-86a5-bd28ece022a0.png)

### 手段の表示
ノード間の矢印に表示されている`GenericWrite`や`WriteDacl`のことを**エッジ**と呼びます。
エッジはノード間の関係性を示しており、どのような権限があるか等を表示してくれます。

エッジをクリックすると画面右側にはエッジの詳細情報が表示され、実行するための具体的なコマンドも表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/9ee60e45-9e68-49ac-a95c-523eff15de7a.png)

### エッジの更なる詳細情報
以下の公式ドキュメントを閲覧することにより、さらなる詳細を確認することができます。
> [About BloodHound Edges – BloodHound](https://support.bloodhoundenterprise.io/hc/en-us/articles/17224136169371-About-BloodHound-Edges)

## 柔軟な検索
詳細な条件に基づく検索を行うためには`CYPHER`クエリを用います。クエリを自身で記述し、実行することにより、条件に合致するものが表示されます。

### 基本操作
`CYPHER`クエリを実行するには、画面左上の`CYPHER`タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/53551dd3-ecfc-44bb-a85e-023e8ca3d89a.png)

例えば`OU`をすべて表示するためには以下のようなクエリを実行します。
```cypher
// OUオブジェクトを変数varに格納し画面出力させる
MATCH (var:OU) return var
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/742ff2fc-4076-43a5-a6fa-82f5415cb18f.png)

### プリセットクエリの利用
基本的によく利用することが想定されるものは既に導入されているため、クリックするだけで利用できます。
クエリ入力エリアの左側にあるフォルダアイコンをクリックすると、下に展開されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/2779da44-5c59-4a78-ac3d-624c3a5a17a3.png)

例えば`All Domain Admins`をクリックするとクエリが自動的に反映されるとともに実行され、ノードが描画されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118089/473758be-0059-4cba-929d-99db4614a6d3.png)

### その他
ネット上ではCYPHERクエリのチートシートもあるため、必要に応じて利用してみましょう。
> * [BloodHound CE Custom Queries](https://github.com/CompassSecurity/bloodhoundce-resources/blob/main/custom_queries/BloodHound_CE_Custom_Queries.md)
> * [Cypherクエリの基礎 2020 #neo4j - クリエーションライン株式会社](https://www.creationline.com/tech-blog/data-management/neo4j/33668)

# 参考記事
> * [BloodHound Cypher Cheatsheet | hausec](https://hausec.com/2019/09/09/bloodhound-cypher-cheatsheet/)
> * [bloodhoundce-resources/custom_queries/BloodHound_CE_Custom_Queries.md at main · CompassSecurity/bloodhoundce-resources](https://github.com/CompassSecurity/bloodhoundce-resources/blob/main/custom_queries/BloodHound_CE_Custom_Queries.md)
> * [Cypher Queries in BloodHound Enterprise | by Nathan D. | Posts By SpecterOps Team Members](https://posts.specterops.io/cypher-queries-in-bloodhound-enterprise-c7221a0d4bb3)
> * [Cypher Cheat Sheet - Neo4j Enterprise Edition](https://neo4j.com/docs/cypher-cheat-sheet/5/neo4j-enterprise)