BloodHoundによるActive Directoryセキュリティ分析入門 🔍

セキュリティツール

はじめに

現代の企業ネットワークにおいて、Microsoft Active Directory (AD) は認証と認可の中核を担っています。しかし、その複雑さゆえに設定ミスや意図しない権限関係が発生しやすく、攻撃者にとって格好の標的となることがあります。

そこで登場するのが BloodHound です。BloodHoundは、AD環境内の隠れた権限関係や攻撃経路をグラフ理論を用いて可視化する強力なツールです。もともとは攻撃者(レッドチーム)が複雑な攻撃経路を特定するために開発されましたが、防御者(ブルーチーム)にとっても、自環境の脆弱性を発見し、対策を講じる上で非常に有用なツールとなっています。

この記事では、BloodHound (Community Edition – BHCE) の基本的な使い方から、データ収集、分析、そして対策に至るまでを、初心者にも分かりやすく解説していきます。適切な知識と倫理観を持ってBloodHoundを活用し、自組織のADセキュリティ強化に役立てましょう🛡️。

⚠️注意:BloodHoundは非常に強力なツールであり、その使用は許可された環境でのテストやセキュリティ評価に限定してください。不正な目的での使用は絶対にやめましょう。

BloodHoundとは?

BloodHoundは、ADおよびEntra ID(旧Azure AD)内のオブジェクト(ユーザー、グループ、コンピューター、GPOなど)と、それらの間の権限関係(メンバーシップ、管理権限、セッション情報など)を収集し、グラフデータベース(Neo4j)に格納して可視化するツールです。

主な特徴は以下の通りです:

  • 関係性の可視化: 複雑に絡み合ったAD内の権限関係をグラフ形式で表示し、直感的に理解できるようにします。
  • 攻撃経路の特定: 特定のユーザーやグループ(例: Domain Admins)に対する攻撃経路(Attack Path)を自動で検出します。これにより、権限昇格に悪用される可能性のある経路を特定できます。
  • 事前定義クエリ: よく使われる分析クエリ(例: Domain Adminsの特定、Kerberoasting可能なユーザーの検索など)が事前に用意されており、簡単に実行できます。
  • オープンソース: Community Edition (BHCE) は無料で利用可能なオープンソースソフトウェアです (GitHubで公開)。
  • エンタープライズ版: 防御者向けに特化したSaaS版のBloodHound Enterprise (BHE) も提供されています。BHEは継続的な監視や攻撃経路管理(Attack Path Management)機能などを提供します。
💡 BloodHoundは主に2つのコンポーネントから構成されます:
  1. データ収集ツール (Ingestors/Collectors): ADやEntra IDから情報を収集するプログラム。代表的なものに SharpHound (C#製、AD用)、AzureHound (PowerShell/C#製、Entra ID用)、BloodHound.py (Python製、AD用) などがあります。
  2. 分析・可視化インターフェース (GUI): 収集したデータをインポートし、グラフ表示やクエリ実行を行うためのWebベースのインターフェース。

インストール ⚙️

BloodHound CEの推奨インストール方法はDockerを使用することです。これにより、依存関係(特にNeo4jデータベース)の管理が容易になります。SpecterOpsはインストールと管理を簡素化する `bloodhound-cli` というツールも提供しています (2025年1月時点)。

Docker Composeを使用したインストール

Kali Linuxや他のLinuxディストリビューション、macOS、Windows (WSL2またはDocker Desktopが必要) で利用できます。

  1. DockerとDocker Compose (またはDocker Compose V2プラグイン) をインストールします。 各OSの公式ドキュメントに従ってください。
  2. `docker-compose.yml` ファイルをダウンロードします。

    BloodHound CEのGitHubリポジトリからダウンロードするか、以下の内容でファイルを作成します (内容はバージョンによって変わる可能性があるため、公式ドキュメントを確認してください)。

    
    # 例: docker-compose.yml (内容は最新版を確認してください)
    # Copyright 2024 Specter Ops, Inc.
    # ... (ライセンスヘッダー) ...
    version: '3.8'
    
    services:
      bloodhound:
        # ... (bloodhoundサービスの設定) ...
        image: specterops/bloodhound:${BH_VERSION:-latest}
        # ... (ポート、ボリューム、環境変数など) ...
      postgres:
        # ... (postgresサービスの設定) ...
        image: postgres:16
        # ... (ボリューム、環境変数など) ...
    
    volumes:
      # ... (ボリューム定義) ...
    

    公式 docker-compose.yml (GitHub)

  3. Docker Composeを実行します。

    `docker-compose.yml` があるディレクトリで以下のコマンドを実行します。

    
    docker compose up -d
    

    (古いDocker Composeの場合は `docker-compose up -d`)

  4. BloodHoundにアクセスします。

    初回起動時には、コンテナログに初期管理者パスワードが表示される場合があります (`bloodhound-cli` を使うとこれが簡略化されます)。

    Webブラウザで `http://localhost:8080` (デフォルト) にアクセスし、初期ユーザー名 (例: `admin`) と取得したパスワードでログインします。初回ログイン時にパスワードの変更を求められます。

bloodhound-cli を使用したインストール (推奨)

Go言語で書かれたこのCLIツールは、Dockerのインストールと管理を大幅に簡略化します。

  1. `bloodhound-cli` をダウンロードします。

    GitHubリリースページからお使いのOS用のバイナリをダウンロードします。

  2. インストールコマンドを実行します。
    
    ./bloodhound-cli install
    

    (Windowsの場合は `bloodhound-cli.exe install`)

    このコマンドは、Docker Composeファイルのダウンロード、コンテナのビルド、初期パスワードの生成と表示までを自動で行います。

  3. BloodHoundにアクセスします。

    上記と同様に `http://localhost:8080` にアクセスし、`bloodhound-cli` が表示した認証情報でログインします。

従来のインストール方法 (非推奨)

以前は `apt install bloodhound neo4j` のようなパッケージマネージャ経由でのインストールが可能でしたが、依存関係の問題やバージョンの古さから、現在はDockerベースの方法が強く推奨されています。Neo4jデータベースを手動でセットアップし、BloodHoundの実行ファイル (Electronアプリ) を別途起動する必要がありました。

手順の概要:

  1. `sudo apt install bloodhound neo4j` (または各OSの手順でNeo4jをインストール)
  2. `sudo neo4j console` でNeo4jを起動し、Webインターフェース (`http://localhost:7474`) で初期パスワード (`neo4j:neo4j`) を変更。
  3. 別のターミナルで `bloodhound` コマンドを実行し、GUIを起動。
  4. GUIでNeo4jの認証情報 (ユーザー名 `neo4j` と変更後のパスワード) を入力してログイン。

この方法は現在公式では推奨されておらず、ドキュメントもレガシー扱いとなっています。

データ収集 (Collectors / Ingestors) 📊

BloodHoundで分析を行うには、まず対象のAD環境から情報を収集する必要があります。これを行うのがコレクター (Collector) またはインジェスター (Ingestor) と呼ばれるツールです。

SharpHound

最も一般的に使用されるAD用コレクターが SharpHound です。C#で書かれており、WindowsネイティブAPIやLDAPクエリを使用してADオブジェクトの情報を収集します。

  • 入手方法:
    • BloodHound CEのGUIからダウンロード (⚙️ → Administration → Download Collectors)。
    • SharpHound GitHubリリースページからコンパイル済みのバイナリ (`SharpHound.exe`, `SharpHound.ps1`) をダウンロード。
    • ソースコードから自分でビルド。
  • 種類:
    • `SharpHound.exe`: .NET Framework 4.5以上が必要な実行ファイル形式。
    • `SharpHound.ps1`: PowerShellスクリプト版。内部でリフレクティブにC#アセンブリをロードして実行します。
  • 実行方法:

    ドメインに参加しているWindowsマシンから実行するのが最も簡単です。通常は一般ユーザー権限で実行できますが、収集できる情報の範囲はそのユーザーの権限に依存します。

    基本的な実行コマンド:

    
    # 実行ファイル版
    C:\Path\To\SharpHound.exe
    
    # PowerShell版 (実行ポリシーの確認が必要な場合あり)
    # Import-Module C:\Path\To\SharpHound.ps1 -Force # モジュールを読み込む (必須ではない場合もある)
    Invoke-BloodHound -CollectionMethod All -Domain YOUR.DOMAIN.LOCAL -ZipFileName MyData.zip
    

    `.exe` 版を引数なしで実行すると、デフォルトの収集メソッド (`Default`) で現在のドメイン情報を収集し、実行ディレクトリにタイムスタンプ付きのZIPファイル (`YYYYMMDDHHMMSS_BloodHound.zip`) を生成します。

  • 主な収集メソッド (`-CollectionMethod` または `–CollectionMethods` オプション):
    メソッド 説明 必要な権限 (目安)
    Default グループメンバーシップ、ローカル管理者権限、アクティブセッション、ドメイン信頼関係など、基本的な情報を収集。 一般ユーザー
    Group グループメンバーシップのみ収集。 一般ユーザー
    LocalGroup / LocalAdmin コンピューターのローカルグループメンバーシップ(特にAdministrators)を収集。 対象コンピューターへのアクセス権 (RPC/SMB)
    GPOLocalGroup GPOによって設定されるローカルグループメンバーシップを収集。 GPO読み取り権限
    Session ドメイン内のコンピューター上のアクティブなユーザーセッション情報を収集。 対象コンピューターへのアクセス権 (RPC/SMB)、特権が必要な場合あり
    ACL ADオブジェクトのアクセス制御リスト (ACL) を収集。権限昇格経路の特定に重要。 一般ユーザー (読み取り可能な範囲)
    Container コンテナーと組織単位 (OU) の情報を収集。 一般ユーザー
    ComputerOnly コンピューター関連の情報 (ローカル管理者、セッション) のみ収集。 対象コンピューターへのアクセス権
    UserOnly ユーザー関連の情報 (グループメンバーシップ) のみ収集。 一般ユーザー
    LoggedOn `Session` と似ているが、特権APIを使用してより詳細なログオン情報を収集しようとする (非推奨になる可能性あり)。 ローカル管理者権限が必要な場合あり
    Trusts ドメイン信頼関係を収集。 一般ユーザー
    ObjectProps ユーザーやコンピューターの属性情報 (SPN、委任設定など) を収集。Kerberoastingなどの特定に必要。 一般ユーザー
    All 上記のほぼすべての情報を収集 (最も包括的だが、時間とネットワーク負荷がかかる)。 一般ユーザー + 対象コンピューターへのアクセス権
    DcOnly ドメインコントローラーからのみ情報を収集。最も負荷が低いが、ローカル管理者やセッション情報は得られない。 一般ユーザー

    複数のメソッドを指定する場合はカンマ区切りにします (例: `-CollectionMethod Default,ACL,ObjectProps`)。

  • その他の重要なオプション:
    • -Domain <domain.name> / --Domain <domain.name>: 対象ドメインを指定。
    • -DomainController <dc.domain.name> / --DomainController <dc.domain.name>: 接続するドメインコントローラーを指定。
    • -OU <OUName> / --OU <OUName>: 特定のOUに絞って収集。
    • -Stealth: ネットワークトラフィックを抑えるための低速な収集モード。
    • -ExcludeDc: ドメインコントローラーを収集対象から除外。
    • -ComputerFile <filepath> / --ComputerFile <filepath>: 収集対象のコンピューターをファイルで指定。
    • -OutputDirectory <path>: 出力先ディレクトリを指定。
    • -ZipFileName <filename.zip> / --ZipFileName <filename.zip>: 出力ZIPファイル名を指定。
    • -NoSaveCache / --NoSaveCache: キャッシュファイルを作成しない。
    • -EncryptZip / --EncryptZip: 出力ZIPファイルをパスワードで暗号化。

    詳細は `SharpHound.exe –help` や公式ドキュメントを参照してください。

  • 収集されるデータ:

    収集された情報は複数のJSONファイルとして一時的に保存され、最終的にZIPファイルに圧縮されます。このZIPファイル (または展開したJSONファイル群) をBloodHound GUIにインポートします。

    収集される主な情報:

    • ユーザー、コンピューター、グループ、GPO、OU、ドメインなどのオブジェクト情報
    • グループメンバーシップ (ネストされたグループも含む)
    • ローカル管理者権限 (どのユーザー/グループがどのコンピューターの管理者か)
    • ユーザーセッション情報 (誰がどこにログインしているか)
    • Active Directory ACL (どの主体がどのオブジェクトに対してどんな権限を持つか)
    • ドメイン信頼関係
    • オブジェクトプロパティ (SPN、委任設定、パスワードポリシーなど)

その他のコレクター

  • AzureHound: Entra ID (Azure AD) 環境から情報を収集するためのコレクター。PowerShell版とC#版があります。

    AzureHound GitHubリポジトリ

  • BloodHound.py: Pythonで書かれたAD用コレクター。LinuxやmacOSからでもAD情報を収集できる点が特徴です。impacketライブラリを利用しています。

    BloodHound.py GitHubリポジトリ

    
    # BloodHound.py の実行例
    bloodhound-python -u <username> -p '<password>' -d <domain.name> -ns <nameserver_ip> -c All --zip
    

データ収集時の注意点 ⚠️

  • 許可の取得: 必ず対象システムの所有者から明示的な許可を得てからデータ収集を行ってください。
  • ネットワーク負荷: `-CollectionMethod All` や `Session`, `LocalGroup` などの収集は、対象環境の規模によっては大きなネットワーク負荷やサーバー負荷を発生させる可能性があります。特に大規模環境では `-Stealth` オプションの使用や、`DcOnly` から始める、収集対象を絞るなどの配慮が必要です。
  • 検知リスク: SharpHoundなどのコレクターの活動は、EDR (Endpoint Detection and Response) やSIEM (Security Information and Event Management) などのセキュリティ監視システムによって検知される可能性があります。テスト環境以外での実行には十分注意してください。2022年には実際の攻撃者によるSharpHoundの使用も報告されています。
  • 情報漏洩リスク: 収集したデータ (ZIPファイル) にはADに関する詳細な情報が含まれます。厳重に管理し、不要になったら確実に削除してください。

データのインポートとGUIの基本操作

SharpHoundなどで収集したデータは、BloodHound CEのWebインターフェースにアップロードして分析します。

データのアップロード

BloodHound CE (Docker版) が起動している状態で、Webブラウザから `http://localhost:8080` にアクセスし、ログインします。

  1. 左側のナビゲーションメニュー(v7.0以降)または右上のメニューから「⚙️ Administration」をクリックします。
  2. 左側のメニューから「Data Collection」>「File Ingest」を選択します。
  3. 「UPLOAD FILE(S)」ボタンをクリックします。
  4. 収集したZIPファイル (例: `20250330114700_BloodHound.zip`) をドラッグ&ドロップするか、クリックしてファイルを選択します。
  5. アップロードとインポート処理が開始されます。データのサイズによって時間がかかる場合があります。完了すると通知が表示されます。

BloodHound CEはZIPアーカイブだけでなく、展開された個別のJSONファイルのアップロードもサポートしています。また、API (`/api/v2/file-upload/`) を使用してプログラムからデータをアップロードすることも可能です。

注意点として、非常に大きなデータセットをGUI経由でアップロードする場合、ブラウザの制限により問題が発生することがあります。

GUIインターフェースの概要

データがインポートされると、グラフが表示され分析が可能になります。BloodHound v7.0 (2025年2月リリース) でUIが刷新され、ナビゲーションが垂直レイアウトになりましたが、基本的な機能は踏襲されています。

  • 検索バー (Search): 左上(または上部)にあり、ユーザー、グループ、コンピューターなどのノードを名前で検索できます。
  • グラフ表示エリア: 中央の広い領域に、ノード(点)とエッジ(線)で構成されるグラフが表示されます。ノードをクリックすると詳細情報が表示され、エッジは関係性(例: MemberOf, AdminTo)を示します。
  • ノード情報パネル (Node Info): ノードをクリックすると、右側にそのノードの詳細情報(プロパティ、グループメンバーシップ、セッション、権限など)が表示されます。
  • 分析タブ / クエリ (Analysis / Queries): 右側または左側のメニューにあり、事前定義されたクエリを実行したり、カスタムクエリを作成したりできます。
    • Pathfinding: 2つのノード間の攻撃経路を検索します。
    • Pre-Built Queries / Analysis: 事前に用意された一般的な分析クエリを実行します (例: “Find all Domain Admins”)。
  • 設定 (Settings / Administration): データベース管理、データインポート/エクスポート、表示設定などを行います。ダークモードの切り替えもここで行えます。

グラフの操作

  • ズーム: マウスホイールやピンチ操作で拡大・縮小。
  • 移動 (パン): ドラッグして表示領域を移動。
  • ノードの選択: クリックして選択。選択したノードはハイライトされ、情報パネルに詳細が表示されます。
  • ノードの展開: ノードを右クリックして関連するノード(例: 所属グループ、ログイン中のユーザー)を展開表示。
  • レイアウト変更: 右側のメニューでグラフのレイアウトアルゴリズムを変更できる場合があります。

主要なクエリと分析例 💡

BloodHoundの真価は、収集したデータから有用な情報を引き出す分析機能にあります。特に「Analysis」タブ(または旧バージョンの「Queries」タブ)にある事前定義クエリは、一般的な攻撃シナリオや設定不備を素早く見つけるのに役立ちます。

事前定義クエリ (Pre-Built Queries / Analysis) の例

以下はよく使われる事前定義クエリの例です(名称はバージョンによって若干異なる場合があります)。

  • Find all Domain Admins: ドメイン管理者権限を持つユーザーおよびグループをリストアップします。AD環境における最高権限保持者を把握するための基本クエリです。
  • Find Shortest Paths to Domain Admins: 現在のデータベース内の全ノードから、ドメイン管理者権限に到達する最短経路を探索します。権限昇格の可能性を評価する上で非常に重要です。
  • Find Shortest Paths to High Value Targets: Domain Adminsだけでなく、Enterprise Adminsや特定のサーバーなど、「高価値ターゲット」としてマークされたノードへの最短経路を検索します。
  • Find Principals with DCSync Rights: DCSync権限を持つユーザーやコンピューターを特定します。この権限を持つ主体は、ドメインコントローラーからパスワードハッシュを含むADデータベース全体を複製できるため、極めて危険です。
  • Find Kerberoastable Users: サービスプリンシパル名 (SPN) が設定されており、かつKerberos事前認証が無効になっていないユーザーアカウントを検索します。これらのアカウントのサービスチケットはオフラインでのパスワードクラッキング(Kerberoasting)の標的となり得ます。
  • Find AS-REP Roastable Users (No Preauth): Kerberos事前認証が不要 (`DONT_REQ_PREAUTH` フラグが有効) になっているユーザーを検索します。これらのユーザーは、パスワードを知らなくてもAS-REPレスポンスを取得でき、オフラインでのパスワードクラッキング(AS-REP Roasting)の標的となり得ます。
  • List all Kerberoastable SPNs: Kerberoasting可能なSPNとその関連アカウントをリストします。
  • Find Computers where Domain Users are Local Admin: Domain Usersグループがローカル管理者権限を持つコンピューターを特定します。これは一般的な設定ミスであり、権限昇格の足がかりにされやすいです。
  • Find Computers with Unconstrained Delegation: 制約なし委任 (Unconstrained Delegation) が有効になっているコンピューターを検索します。これらのコンピューターに管理者権限でアクセスできる攻撃者は、そのコンピューターに認証しに来たユーザー(ドメイン管理者など)のKerberos TGTを窃取できる可能性があります。
  • Find Users with Foreign Domain Group Membership: 別の(信頼関係のある)ドメインのグループに所属しているユーザーを検索します。フォレスト間の攻撃経路の特定に役立ちます。
  • Map Domain Trusts: ドメイン間の信頼関係をグラフで表示します。
  • Find Shortest Path from Owned Principals: 自分が侵害した(”Owned”とマークした)アカウントから、高価値ターゲットへの最短経路を検索します。

Pathfinding (経路探索) 機能

特定の2つのノード間の攻撃経路を知りたい場合に使います。

  1. Pathfindingボタンをクリックします。
  2. 「Start Node」に攻撃の起点となるユーザーやコンピューター名を入力して選択します。
  3. 「End Node」に攻撃目標となるユーザー(例: Domain Adminsグループ)やコンピューター名を入力して選択します。
  4. 検索が実行され、経路が存在すればグラフ上に最短経路が表示されます。複数の経路がある場合は、切り替えて表示できます。

表示された経路上のエッジ(関係性)をクリックすると、その関係性がどのように悪用可能か(Abuse Info)が右側のパネルに表示されることがあります。例えば、「AdminTo」エッジは、起点のユーザーが終点のコンピューターに対して管理者権限を持つことを示し、リモートコード実行などに悪用される可能性があります。

具体的な分析シナリオ例

  1. シナリオ1: 一般ユーザーからドメイン管理者への経路探索
    • 目的: 侵害した一般ユーザーアカウントから、ドメイン管理者権限を奪取できるか評価する。
    • 手順:
      1. Pathfinding機能で、Start Nodeに侵害したユーザーアカウント、End Nodeに “Domain Admins” グループを設定。
      2. 経路が見つかった場合、その経路を構成するエッジ(MemberOf, AdminTo, HasSession, ForceChangePassword, GenericAllなど)を確認。
      3. 各エッジの悪用方法 (Abuse Info) を参考に、具体的な攻撃手順を計画する。例えば、AdminToがあればPsExecやWinRMでリモート実行、HasSessionがあればMimikatzなどでセッション情報を窃取、ForceChangePasswordがあればパスワードリセットなど。
    • ポイント: 一見複雑に見える経路でも、BloodHoundが可視化してくれるため、攻撃者は効率的に権限昇格を狙えます。防御側はこの経路を発見し、途中の脆弱なリンク(例: 過剰なローカル管理者権限、安易なグループメンバーシップ)を断ち切る必要があります。
  2. シナリオ2: Kerberoastingによるパスワードクラック
    • 目的: サービスアカウントとして利用されているユーザーアカウントのパスワードハッシュを取得し、オフラインでクラックを試みる。
    • 手順:
      1. 事前定義クエリ「Find Kerberoastable Users」を実行。
      2. リストアップされたユーザーを確認。特に権限が高そうなアカウントや、推測しやすいパスワードが設定されていそうなアカウントに注目。
      3. RubeusやImpacketなどのツールを使用し、対象ユーザーのKerberosサービスチケット (TGS-REP) を要求・取得する。
      4. 取得したチケットのハッシュ部分を抽出し、HashcatやJohn the Ripperなどのツールでオフラインパスワードクラックを行う。
    • ポイント: 強力なパスワードポリシーが適用されていないサービスアカウントは、Kerberoastingによって容易にパスワードが漏洩する可能性があります。サービスアカウントには長く複雑なパスワードを設定するか、Group Managed Service Accounts (gMSA) の利用を検討すべきです。
  3. シナリオ3: ACL (Access Control List) の悪用
    • 目的: 特定のユーザーやグループが、他の重要なオブジェクト(ユーザー、グループ、GPOなど)に対して意図しない危険な権限(GenericAll, GenericWrite, WriteOwner, WriteDACL, AddMembersなど)を持っているか調査する。
    • 手順:
      1. ACL情報を収集したデータをインポート (`-CollectionMethod ACL` を使用)。
      2. 分析したいオブジェクト(例: Domain Adminsグループ)を検索し、ノード情報パネルの「Inbound Object Control」タブなどを確認。
      3. どのユーザー/グループが、そのオブジェクトに対して危険な権限を持っているかを確認。例えば、一般ユーザーグループがDomain Adminsグループに対して「AddMembers」権限を持っている場合、誰でも自分をDomain Adminsに追加できてしまいます。
      4. Pathfinding機能で、特定のユーザーから目標オブジェクトへのACLベースの攻撃経路(例: GenericAllエッジ)がないか探索する。
    • ポイント: ADのACL設定は非常に複雑になりがちで、設定ミスが起こりやすい箇所です。BloodHoundはこれらの危険なACL設定を可視化し、権限昇格に繋がる経路を発見するのに役立ちます。定期的なACL監査と不要な権限の削除が重要です。

対策と緩和策 🛡️

BloodHoundによって明らかになった攻撃経路や脆弱性は、放置すれば深刻なセキュリティインシデントにつながる可能性があります。発見された問題に対しては、適切な対策と緩和策を講じることが重要です。

以下に一般的な対策を示します:

  • 最小権限の原則の徹底:
    • ユーザーやグループには、業務に必要な最低限の権限のみを付与します。
    • 特に Domain Admins や Enterprise Admins などの特権グループのメンバーは厳格に管理し、必要最小限に留めます。
    • ローカル管理者権限も必要最小限のユーザー/グループにのみ付与します。Domain Users グループにローカル管理者権限を与えないようにします。
    • 定期的に権限を見直し、不要になった権限は削除します。
  • パスワードポリシーの強化:
    • 長く、複雑で、推測困難なパスワードを要求します。
    • 特にサービスアカウントには、非常に長くランダムなパスワードを設定します (25文字以上推奨)。
    • パスワードの定期的な変更を強制します。
    • パスワード履歴を適切に設定します。
    • 可能であれば、パスワードレス認証 (Windows Hello for Business, FIDO2) の導入を検討します。
  • 多要素認証 (MFA) の導入:
    • 特に特権アカウントやリモートアクセスに対してMFAを必須にします。
    • Entra ID (Azure AD) 環境では、条件付きアクセスポリシーを活用してMFAを適用します。
  • Active Directoryの構成管理:
    • ACLを定期的に監査し、危険な権限 (GenericAll, WriteDACLなど) が不適切に付与されていないか確認します。
    • 制約なし委任 (Unconstrained Delegation) は可能な限り避け、制約付き委任 (Constrained Delegation) やリソースベース制約付き委任 (Resource-Based Constrained Delegation) を使用します。
    • Kerberos事前認証 (`DONT_REQ_PREAUTH`) は原則として無効にしないようにします。
    • Group Managed Service Accounts (gMSA) や Managed Service Accounts (MSA) を活用し、サービスアカウントのパスワード管理を自動化します。
    • LAPS (Local Administrator Password Solution) を導入し、各コンピューターのローカル管理者パスワードをランダム化・一元管理します。
  • セッション管理の強化:
    • 特権アカウントでの日常業務を避け、必要な場合にのみ使用します。
    • 特権アクセスワークステーション (PAW) の導入を検討し、特権アカウントの利用環境を分離します。
    • サーバーやワークステーションへのログインセッションを適切に管理し、不要なセッションは切断します。
  • セキュリティ監視の強化:
    • ADの監査ログを有効にし、SIEMなどで監視します。特にアカウントロックアウト、権限変更、グループメンバーシップ変更、不審なログオン試行などを監視します。
    • EDRを導入し、エンドポイントでの不審なプロセス実行 (SharpHoundの実行など) を検知・ブロックします。
    • BloodHound Enterprise (BHE) などの攻撃経路管理ツールを導入し、継続的にリスクを監視・評価します。
  • 定期的な脆弱性評価とペネトレーションテスト:
    • BloodHoundなどのツールを(防御側として)定期的に使用し、自環境のAD設定の脆弱性を評価します。
    • 外部の専門家によるペネトレーションテストを実施し、客観的な評価を得ます。

まとめ

BloodHoundは、複雑なActive Directory環境における権限関係と潜在的な攻撃経路を可視化し、理解するための非常に強力なツールです。攻撃者はこれを利用して効率的に権限昇格を狙いますが、防御者にとっても自環境の弱点を発見し、プロアクティブに対策を講じるための強力な武器となり得ます。

この記事では、BloodHoundの基本的な概念からインストール、データ収集、分析、そして対策までを解説しました。重要なのは、BloodHoundから得られた知見をもとに、最小権限の原則、強力な認証、適切な構成管理、そして継続的な監視といったセキュリティ対策を着実に実行していくことです。

ADは多くの組織にとって基幹システムであり、そのセキュリティ確保は極めて重要です。BloodHoundを正しく理解し活用することで、より堅牢なAD環境を構築し、巧妙化するサイバー攻撃から組織を守る一助となることを願っています。🚀

繰り返しになりますが、BloodHoundの使用は倫理的に、そして法的に許可された範囲内で行ってください。

参考情報 (一部)

より詳細な情報については、以下の公式ドキュメントやリポジトリを参照してください。

コメント

タイトルとURLをコピーしました