はじめに
本稿では、「BloodHound」を使用した、Windows Active Directory環境の分析について検証します。
BloodHound (https://github.com/BloodHoundAD/BloodHound) とは、グラフ理論にもとづき、Active Directory環境の意図せぬ関係性を明らかにするためのツールです。
これにより、低特権ユーザーをDomain Admins
へ権限昇格するなど、他のユーザーやグループへ移行するためのパスを発見することができます。
BloodHoundのインストール
ここでは、Kali Linux 2020.1
に対してBloodHound Version: 3.0.2
のインストールを行います。
パッケージ管理コマンドapt
を使ってBloodHoundのインストールを行うことが可能です。コマンド構文は、apt-get install bloodhound
です。
事前に、apt-get update
とapt-get dist-upgrade
コマンドを実行し、システムを最新の状態にしておく必要があります。
ali@kali:~$ sudo apt-get install bloodhound
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
neo4j
The following NEW packages will be installed:
bloodhound neo4j
0 upgraded, 2 newly installed, 0 to remove and 501 not upgraded.
Need to get 154 MB of archives.
After this operation, 350 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling/main amd64 neo4j all 3.5.3-0kali1 [98.1 MB]
Get:2 http://linux3.yz.yamagata-u.ac.jp/pub/linux/kali kali-rolling/main amd64 bloodhound amd64 3.0.2-0kali1 [55.5 MB]
Fetched 154 MB in 18s (8,640 kB/s)
Selecting previously unselected package neo4j.
(Reading database ... 255564 files and directories currently installed.)
Preparing to unpack .../neo4j_3.5.3-0kali1_all.deb ...
Unpacking neo4j (3.5.3-0kali1) ...
Selecting previously unselected package bloodhound.
Preparing to unpack .../bloodhound_3.0.2-0kali1_amd64.deb ...
Unpacking bloodhound (3.0.2-0kali1) ...
Setting up neo4j (3.5.3-0kali1) ...
Setting up bloodhound (3.0.2-0kali1) ...
Processing triggers for kali-menu (2020.1.7) ...
BloodHoundの設定
BloodHoundはNeo4j(https://neo4j.com/)に依存しています。Neo4jとは、グラフデータベース管理システムです。
apt-get install bloodhound
コマンド構文にて、BloodHound Version: 3.0.2
とともに、neo4j 3.5.3
がインストールされています。
apt
コマンドによるインストールが完了したら、Neo4jの設定を行います。はじめに、sudo neo4j console
コマンド構文にて、Neo4jを起動します。
kali@kali:~$ sudo neo4j console
Active database: graph.db
Directories in use:
home: /usr/share/neo4j
config: /usr/share/neo4j/conf
logs: /usr/share/neo4j/logs
plugins: /usr/share/neo4j/plugins
import: /usr/share/neo4j/import
data: /usr/share/neo4j/data
certificates: /usr/share/neo4j/certificates
run: /usr/share/neo4j/run
Starting Neo4j.
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual.
2020-02-29 12:39:25.465+0000 INFO ======== Neo4j 3.5.3 ========
2020-02-29 12:39:25.538+0000 INFO Starting...
2020-02-29 12:39:34.831+0000 INFO Bolt enabled on 127.0.0.1:7687.
2020-02-29 12:39:40.123+0000 INFO Started.
2020-02-29 12:39:44.086+0000 INFO Remote interface available at http://localhost:7474/
次に、ブラウザにて http://localhost:7474/ へアクセスします。初期設定のパスワード(neo4j / neo4j)を入力すると、パスワードの変更を求めるプロンプトが表示されます。指示に従って、新しいパスワードの入力を行います。
ここで入力したアカウントはBloodHoundにログインするためにも使用します。
ここでは、次の設定値を使用します。
- Database URL: bolt://localhost:7687
- DB Username: neo4j
- DB Password: blood
Bloodhoundの起動
ターミナルから、bloodhound
コマンドを実行し、起動します(バックグラウンドで開いたままにする必要があります)。
kali@kali:~$ bloodhound
好みのユーザーインターフェイスに切り替えるため、メニュー右側にあるSettings
(歯車のアイコン)をクリックします。
ここでは、Dark Mode
のチェックボックスをONにしています。
BloodHoundの動作確認
BloodHoundの動作確認をするために、ランダムなテストデータを作成するDBCreator.py
スクリプトが提供されています(https://github.com/BloodHoundAD/BloodHound-Tools/tree/master/DBCreator)。
次のコマンド構文にて、リポジトリの複製を行います。
kali@kali:~$ git clone https://github.com/BloodHoundAD/BloodHound-Tools
Cloning into 'BloodHound-Tools'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 111 (delta 0), reused 0 (delta 0), pack-reused 110
Receiving objects: 100% (111/111), 1.59 MiB | 552.00 KiB/s, done.
Resolving deltas: 100% (46/46), done.
pip
コマンドにて、neo4j-driver
をインストールします。
$ sudo apt install python-pip
$ pip -V
pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)
$ pip install neo4j-driver
Collecting neo4j-driver
Downloading https://files.pythonhosted.org/packages/0e/96/bc81664d87975948713f7e4d3d4c3a21a3a6a813d03a161637573a587817/neo4j-driver-1.7.6.tar.gz
Collecting neobolt~=1.7.15 (from neo4j-driver)
Downloading https://files.pythonhosted.org/packages/0d/b2/eb7c33e1f02cd7bbaf4c237619dd8dc43fa6081f331c2d35b28deb78e259/neobolt-1.7.16.tar.gz (183kB)
100% |████████████████████████████████| 184kB 1.2MB/s
Collecting neotime~=1.7.1 (from neo4j-driver)
.
.
.
Successfully built neo4j-driver neobolt neotime
Installing collected packages: neobolt, pytz, neotime, neo4j-driver
Successfully installed neo4j-driver-1.7.6 neobolt-1.7.16 neotime-1.7.4 pytz-2019.3
DBCreator.py
スクリプトはpython2
で記述されています。このため、明示的にpython2
を指定して、実行します。
kali@kali:~$ cd BloodHound-Tools/
kali@kali:~/BloodHound-Tools$ ls
bloodhoundanalytics.pbix bloodhoundanalytics.py DBCreator LICENSE README.md
kali@kali:~/BloodHound-Tools$ cd DBCreator/
kali@kali:~/BloodHound-Tools/DBCreator$ python2 DBCreator.py
================================================================
BloodHound Sample Database Creator
================================================================
Documented commands (type help <topic>):
========================================
clear_and_generate connect exit help setnodes
cleardb dbconfig generate setdomain
(Cmd)
DBCreator.py
スクリプトのユーザーインターフェイスに従って、dbconfig
コマンドを実行します。neo4j
の資格情報を入力します。
(Cmd) dbconfig
Current Settings:
DB Url: bolt://localhost:7687
DB Username: neo4j
DB Password: neo4jj
Enter DB URL [bolt://localhost:7687]
Enter DB Username [neo4j]
Enter DB Password [neo4jj] blood
New Settings:
DB Url: bolt://localhost:7687
DB Username: neo4j
DB Password: blood
Testing DB Connection
Database Connection Successful!
DBCreator.py
スクリプトのユーザーインターフェイスに従って、generate
コマンドを実行します。テストデータの生成を行います。
(Cmd) generate
Starting data generation with nodes=500
Populating Standard Nodes
Adding Standard Edges
Generating Computer Nodes
Creating Domain Controllers
Generating User Nodes
Generating Group Nodes
Adding Domain Admins to Local Admins of Computers
Creating 25 Domain Admins (5% of users capped at 30)
Applying random group nesting
Adding users to groups
Calculated 7 groups per user with a variance of - 6
Adding local admin rights
Adding RDP/ExecuteDCOM/AllowedToDelegateTo
Adding sessions
Adding Domain Admin ACEs
Creating OUs
Creating GPOs
Adding outbound ACLs to 3 objects
Marking some users as Kerberoastable
Adding unconstrained delegation to a few computers
Database Generation Finished!
テストデータ作成後、Bloodhound
にログオンすると、BloodHoundは「Domain Admins」という名前のグループを描画し、そのグループに属する有効なユーザーを表示します。
左隅の[Database Info]
タブでは、登録されたデータの統計情報を確認することができます。
[Database Info]
タブにて確認できる情報は次のとおりです。
- Users – Active Directoryから抽出されたネットワーク上のユーザー
- Computers – ネットワーク、サーバー、ワークステーション、その他のデバイス上のさまざまなエンドポイント
- Groups - Active Directoryから抽出されたさまざまなADグループ
- Sessions - Ingestorsが抽出したネットワーク上のコンピューター上のユーザーセッションの量
- ACL – アクセス制御リスト、ユーザーとグループが相互に持つさまざまな権限とアクセス
- Relationships - グループメンバーシップ、ユーザー、ユーザーセッション、その他の関連情報など
左隅の[Queries]
タブでは、事前に用意されたいくつかの分析クエリによる表示を確認することができます。
[Queries] > [Pre-Built Analytics Queries] > [Shortest Paths to High Value Targets]
クエリを選択した場合の画面。
Ingestors によるデータ収集
ここまで、BloodHoundとneo4jのインストールと設定が完了しました。ここからは、実際にBloodHoundを使ってターゲットネットワークのデータを分析します。
ターゲットシステムまたはドメインで「Ingestors」を使用します。Ingestorsは、ドメインコントローラーとActive Directoryを照会し、すべての信頼関係、グループポリシー設定、およびアクティブディレクトリオブジェクトの取得を行います。
BloodHound gitリポジトリ (https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestors)には、2つの異なるIngestorsが公開されています。
-
SharpHound.exe
:C#で記述されたプログラム -
Invoke-BloodHound
:リフレクションによってC#バイナリをロードするPowerShellスクリプト
Ingestorsを実行する際、収集範囲(CollectionMethod
)オプションを詳細に設定しなければ意図する情報を収集できない可能性もあります。オプションスイッチは次のとおりです。
- Group: グループメンバシップ情報を収集
- LocalGroup: コンピュータのローカル管理者情報を収集
- Session: コンピュータのセッション情報を収集
- SessionLoop: 終了されるまでセッション情報を継続的に収集
- Trusts: ドメインの信頼関係のデータを収集
- ACL: ACL(Access Control List)データを収集
- ComputerOnly: ローカル管理者とセッションデータを収集
- GPOLocalGroup: GPO(Group Policy Object)を使ってローカル管理者情報を収集
- LoggedOn: 管理者特権を使用し、セッション情報を収集
- ObjectProps: ユーザとコンピュータのノードプロパティ情報を収集
- Default: グループメンバシップ、ローカル管理者、セッション、ドメインの信頼関係のデータを収集
SharpHound
BloodHoundのIngestorsである、SharpHound.exe
プログラムを使いデータ収集を行います。
ここでは、https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestorsからc:\Tools
へSharpHound.exe
がダウンロードしてあります。
SharpHound.exe
を使い、Active Directoryよりデータ収集を行います。まず、powershell
を立ち上げます。その上で、SharpHound.exe
を実行します。
収集したデータはZIP形式にて圧縮され(20200306061240_BloodHound.zip
)、SharpHound.exe
を実行したフォルダに生成されています。
PS C:\Tools> .\SharpHound.exe -c all -d active.htb --domaincontroller 10.10.10.100
----------------------------------------------
Initializing SharpHound at 6:12 AM on 3/6/2020
----------------------------------------------
Resolved Collection Methods: Group, Sessions, LoggedOn, Trusts, ACL, ObjectProps, LocalGroups, SPNTargets, Container
[+] Creating Schema map for domain ACTIVE.HTB using path CN=Schema,CN=Configuration,DC=ACTIVE,DC=HTB
[+] Cache File not Found: 0 Objects in cache
[+] Pre-populating Domain Controller SIDS
Status: 0 objects finished (+0) -- Using 19 MB RAM
Enumeration finished in 00:02:52.3983535
Compressing data to .\20200306061240_BloodHound.zip
You can upload this file directly to the UI
SharpHound Enumeration Completed at 6:16 AM on 3/6/2020! Happy Graphing!
SharpHound.ps1
BloodHoundのIngestorsである、SharpHound.ps1
モジュールを使いデータ収集を行います。
ここでは、https://github.com/BloodHoundAD/BloodHound/tree/master/Ingestorsからc:\Tools
へSharpHound.ps1
がダウンロードしてあります。
まず、powershell
を立ち上げます。SharpHound.ps1
モジュールをインポートします。 インポートとは、powershell
セッションでそのモジュール(SharpHound.ps1
)にアクセスできるように、モジュールをアクティブメモリに読み込むプロセスです。
PS C:\Tools> Import-module ./SharpHound.ps1
次のコマンド構文にて、データ収集を行います。
PS C:\Tools> Invoke-BloodHound -CollectionMethod ACL,ObjectProps,Default -CompressData -RemoveCSV -NoSaveCache
BloodHoundにおけるデータの読み込み
収集したデータ(YYYYMMDDHHMMSS_BloodHound.zip
)をBloodHoundで読み込みます。
BloodHoundのGUI画面より、右側メニューの[Upload Data]
を選択し、生成されたZIPファイルを読み込みます。なお、BloodHoundのGUI画面にZIPファイルをドラッグ&ドロップすることでも、データの読み込みは可能です。
BloodHoundデータを使用するユーティリティ
- CypherDog, https://github.com/SadProcessor/CypherDog
- GoFetch, https://github.com/GoFetchAD/GoFetch
- ANGRYPUPPY, https://github.com/vysecurity/ANGRYPUPPY
- gt-generator, https://github.com/audrummer15/gt-generator
BloodHoundを学べるTryHackMeのRoom
TryHackMeにおいて、BloodHoundの使用方法を学ぶことのできるルームです。
BloodHoundを使った攻略が有効なHack The Box Machines
Hack The Boxにおいて、BloodHoundを使った攻略が有効とされているMachineのリストは次のとおりです。
Name | IP Address | Difficulty | 日本語解説(Walkthrough) |
---|---|---|---|
Active | 10.10.10.100 | Easy | あり |
Forest | 10.10.10.161 | Easy | あり |
Reel | 10.10.10.77 | Hard | - |
Sizzle | 10.10.10.103 | Insane | - |
Blackfield | 10.10.10.192 | Hard | - |
参考情報
- BSides Las Vegas「Six Degrees of Domain Admin - Using Bloodhound to Automate Active Directory Domain Privilege Escalation Analysis --Andy Robbins, Will Schroeder, Rohan Vazarkar」(YouTube動画)
- chryzsh 「awesome-bloodhound」
- riccardoancarani.it 「BloodHound Tips and Tricks」, 2019/08/11
- CprJesus 「BloodHound: Intro to Cypher」, 2017/02/19
- Hackndo 「BloodHound」, 2019/07/30
- Red Teaming Experiments 「BloodHound with Kali Linux: 101」
- TripleSec 「BloodHound 101, PDF文書」
- SYSTEMADMINSPRO 「DOMAIN INFORMATION COLLECTION TOOLS」, 2019/04/10