Web ベースのレポートの特長:
Active Directory の脆弱性のリスクベースの評価と、包括的な緩和パス。
最もリスクの高い設定ミスを特定するために慎重に調整された検索バーとコントロール。
時間の経過に伴う指標を観察し、緩和効率の測定に役立てることもできます。
AD Miner は Forvis Mazars によって当初作成され、Grant Thornton Cybersecurity Audit & Advisory Team によって保守されています。
AD Miner を実行するには、Active Directory オブジェクトを含む neo4j データベースが必要です。
[!CAUTION] BloodHound Automation の使用を強く推奨します。これにより、Graph Data Science Neo4j プラグインがインストールされ、以下の効果があります。
- 計算時間と全体的なパフォーマンスが大幅に向上します。
- 組み込みの Neo4j shortestPath() の代わりに Smartest Path を使用できるようになります(つまり、ノードホップ数が最小のパスではなく、より悪用しやすいパス)。
BloodHound 環境(GUI と Neo4j データベースを含む)をセットアップするには、BloodHound Automation が Graph Data Science プラグインとのシームレスな統合のため強く推奨されます。デフォルトの BloodHound CE インストールを使用しても問題はありませんが、GDS の利点(よりスマートな経路探索、実行速度の向上など)を逃すことになります。
デフォルトでは、BloodHound はポート 7687 でアクセス可能な neo4j ベースを作成します。
最も簡単な方法は、pipx を使用して以下のコマンドを実行することです。
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner は一部の Linux ディストリビューションでも利用できます。
pacman -S ad-minernix-env -iA nixos.ad-minerDocker イメージをビルドして使用できます。以下のコマンドでイメージをビルドします。
docker build -t ad-miner .
Windows で BloodHound Community Edition のデータを使用して実行するには、以下のコマンドを使用します。
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Linux で BloodHound Community Edition のデータを使用して実行するには、以下のコマンドを使用します。
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
-v でボリュームをマウントすることが、データの出力を取得するために重要です。これは、BHCE サーバーがデフォルト設定で Docker ホスト上で実行されていることを前提としています。
ツールを実行します。
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
例:
AD-miner -cf My_Report -u neo4j -p mypassword
各 Neo4j リクエストの完了時にキャッシュファイルが生成されます。この機能により、処理中いつでも AD Miner を一時停止または停止しても、以前に計算された結果が失われることはありません。キャッシュを利用するには、-c パラメータを使用します。キャッシュファイルは、現在のリポジトリの cache_neo4j フォルダに保存されます。キャッシュを使用するには、レポート名がキャッシュファイル名のプレフィックスと一致している必要があります。
AD-miner -c -cf My_Report -u neo4j -p mypassword
大規模なデータセットをより適切に処理するために、マルチスレッドを有効にしたり、以下の例のように neo4j データベースのクラスタを使用したりすることもできます(server1 が 32 スレッド、server2 が 16 スレッドを処理します)。
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
パスワード更新ポリシーが判明している場合は、-r パラメータを使用して指定することで、パスワード更新コントロールが環境の設定に準拠するようにできます(デフォルトは 90 日)。たとえば、パスワードポリシーが 180 日に設定されている場合は、次のように使用します。
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] Bloodhound CE neo4j データベースのデフォルトパスワードは
bloodhoundcommunityeditionです。BloodHound Automation を使用する場合はneo5jです。
オプション:
-h, --help このヘルプメッセージを表示して終了
-b BOLT, --bolt BOLT Neo4j bolt 接続 (デフォルト: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Neo4j ユーザー名 (デフォルト: neo4j)
-p PASSWORD, --password PASSWORD
Neo4j パスワード (デフォルト: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
抽出日 (例: 20220131)。デフォルト: 最終ログオン日
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
パスワード更新ポリシー (日数)。デフォルト: 90
-c, --cache ローカルファイルを neo4j データに使用
-l LEVEL, --level LEVEL
パスクエリの再帰レベル
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
使用するキャッシュファイル (複数の会社キャッシュファイルがある場合)
--gpo_low GPO に対してより高速だが不完全なクエリを実行 (通常のクエリより高速)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
並列 neo4j リクエストのチャンク数。デフォルト: CPU 数 * 20
-co NB_CORES, --nb_cores NB_CORES
並列 neo4j リクエストのコア数。デフォルト: CPU 数
--rdp CanRDP エッジをグラフに含める
--evolution EVOLUTION
経時的な進化: json データファイルの場所。例: '../../tests/'
--cluster CLUSTER 並列 neo4j クエリを実行するクラスタのノード。例: host1:port1:nCore1,host2:port2:nCore2,...
グラフページでは、グラフノードを右クリックしてクラスタ化したり、クラスタを開いたりできます。
複数の AD-Miner レポートを時間経過に沿って持っている場合、--evolution 引数を使用して進化を簡単に追跡できます。各 AD-Miner レポートは、index.html ファイルとともに JSON データファイルを生成します。これらの異なる JSON ファイルを 1 つのフォルダに集め、--evolution 引数の後にそのフォルダへのパスを指定するだけです。
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
メインページに「経時的な進化」タブが表示され、各カテゴリ(権限、パスワード、Kerberos、その他)の進化グラフが提供されます。
各コントロールの詳細な進化も利用でき、各カテゴリの「進化を表示」ボタンからアクセスできます。対数スケールも利用可能で、時間の経過に伴う微妙な変化をより強調できます。
AD Miner は、実際の悪用可能性に基づいてパスを計算できます。実際、最短パスが悪用しにくい場合があります(ここでは HasSession の前の ExecuteDCOM のため)。
一方、より長くてもより単純なパスが存在する場合があります(ここでは ExecuteDCOM の代わりに MemberOf と AdminTo)。
AD Miner は、neo4j データベースに Graph Data Science プラグインがインストールされている場合、自動的に smartest path モードに切り替わります (https://neo4j.com/docs/graph-data-science/current/)。
このプラグインをインストールする最も簡単な方法は、neo4j docker に環境変数を定義することです: NEO4J_PLUGINS=["graph-data-science"] (BloodHound Automation ではデフォルトでインストールされています)。
現在、10 のコントロールが完全なグラフカバレッジを利用し、分析のために smartest パスを最適化しています。
以下は、AD Miner に既に実装されているコントロールのリストです。
コントリビューション方法については、こちらを確認してください。
| Category | Description | Category | Description |
|---|
| Kerberos | AS-REP Roastable アカウント | Misc | 旧式 OS のコンピュータ | |
| Kerberos | Kerberoastable アカウント | Misc | 休眠アカウント | |
| Kerberos | Kerberos 制約付き委任 | Misc | ドメインの機能レベル | |
| Kerberos | コンピュータに対する Kerberos RBCD | Misc | ゴーストコンピュータ | |
| Kerberos | Kerberos 無制限委任 | Misc | メンバーのいないグループ | |
| Kerberos | 古い KRBTGT パスワード | Misc | メンバーのいない OU | |
| Kerberos | 特権アカウントの Shadow Credentials | Misc | ドメインコントローラの Shadow Credentials | |
| Kerberos | 一般アカウントの Shadow Credentials | Misc | 予期しない PrimaryGroupID | |
| Passwords | LAPS パスワードへのアクセス | Misc | ユーザー FGPP | |
| Passwords | LAPS 未設定のコンピュータ | Permissions | ACL の異常 | |
| Passwords | 管理者の GMSA パスワードを読み取れるオブジェクト | Permissions | 攻撃パスのチョークポイント | |
| Passwords | パスワード要件のバイパス | Permissions | 他のコンピュータの管理者であるコンピュータ | |
| Passwords | クリアテキストパスワードを持つユーザー | Permissions | ドメイン管理者へのクロスドメインパス | |
| Passwords | 古いパスワードを持つユーザー | Permissions | ゲストアカウント | |
| Passwords | パスワード有効期限なしのユーザー | Permissions | DCSync 特権への不十分なアクセス | |
| Permissions | 不適切な AdminCount 設定 | Permissions | 不適切な GPO 変更権限 | |
| Permissions | 不十分なドメイン管理者数 | Permissions | 不適切な権限を持つマシンアカウント | |
| Permissions | 不適切な権限を持つマシンアカウント | Permissions | ADCS 上の非 Tier 0 ローカル管理者権限 | |
| Permissions | SID 履歴を持つオブジェクト | Permissions | DNS Admins へのパス | |
| Permissions | ドメイン管理者へのパス | Permissions | オペレーターグループへのパス | |
| Permissions | 組織単位 (OU) へのパス | Permissions | サーバーへのパス | |
| Permissions | AdminSDHolder コンテナへのパス | Permissions | "Pre-Windows 2000 Compatible Access" グループ | |
| Permissions | 保護されたユーザーグループ外の特権アカウント | Permissions | RDP アクセス (コンピュータ) | |
| Permissions | RDP アクセス (ユーザー) | Permissions | Tier-0 違反 (セッション) | |
| Permissions | 強力なクロスドメイン権限を持つユーザー | Permissions | ローカル管理者権限を持つユーザー |
| Category | Description | Category | Description |
|---|
| Entra ID Misc | Azure 休眠アカウント | Entra ID MS Graph | MS Graph の直接コントローラ | |
| Entra ID Passwords | Entra ID パスワードリセット権限 | Entra ID MS Graph | オンプレミスと同期されていない Entra ID アカウント | |
| Entra ID Passwords | 矛盾した最終パスワード変更 | Entra ID MS Graph | 同期アカウントと無効な双子アカウント | |
| Entra ID Permissions | 特権 Entra ID ロールへのアクセス | Entra ID Permissions | オンプレミスと Azure 両方の特権アカウント | |
| Entra ID Permissions | オンプレミス/Entra ID 間の Tier-0 へのクロスパス | Entra ID Permissions | AADConnect に関連する可能性のあるユーザー | |
| Entra ID Permissions | 高価値ターゲットへのパスを持つ Entra ID ユーザー |