Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ImproHound — ADの階層化を破るBloodHound内の攻撃パスを特定する | Kitploit
ツール/GitHubGitHub/improsec/improhound
特権昇格脆弱性分析情報収集ペネトレーションテスト
GitHubimprosec/improhound

ImproHound

ADの階層化を破るBloodHound内の攻撃パスを特定する

リポジトリを見る
328363年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

GitHub release (latest SemVer) GitHub all releases

ImproHound

BloodHound内の攻撃経路を特定し、AD階層化を突破する

ImproHoundは、GUIを備えたdotnetスタンドアロンWindows x64実行ファイルです。 ImproHoundを使用するには、まずSharpHoundを実行してADから必要なデータを収集し、そのデータをBloodHoundにアップロードする必要があります。ImproHoundはBloodHoundの基盤となるNeo4jデータベースに接続します。ImproHoundでは、OU構造を介してADオブジェクトを階層に分類し、ADオブジェクトがより上位(ゼロに近い)階層のオブジェクトを侵害できるAD関係を特定し、階層違反をCSVファイルに保存します。

ImproHoundブログ記事

ImproHoundデモ動画

ImproHound DEF CON Adversary Village発表

目次
  • インストール
  • 使い方
  • ADオブジェクト階層化のガイドライン
  • 動作確認済み依存関係の最新バージョン

インストール

1. BloodHoundデータベースをセットアップ

  1. BloodHoundをインストール

  2. ADでSharpHoundを使用してBloodHoundデータを収集

    注意:これによりAV、SIEM等にノイズが発生します。

    例:SharpHound.exeをcmdから実行し、すべてを収集する(はい、GPOLocalGroupはAllに含まれていません):

    root@kitploit:~
    SharpHound.exe --CollectionMethods All,GPOLocalGroup
    

    ヒント1:Domainパラメータを使用して、フォレスト内の他のドメインからデータを収集します。

    ヒント2:さらに多くのデータを得るには、セッションループ収集方法を使用します

  3. BloodHound GUIにBloodHoundデータをアップロード

    BloodHoundには、BloodHoundデータzipをアップロードする際にドメインjsonファイルがスキップされるバグがあります。データアップロード後にBloodHoundのDB統計を確認し、ドメインオブジェクトが存在することを確認してください。

2. APOC Neo4jプラグインをインストール (必要な素晴らしいグラフ操作を有効にします)

  1. Neo4jのバージョンに一致するAPOCをダウンロードします(apoc-x.x.x.x-all.jar)。

    バージョン互換性マトリックスでNeo4jバージョンに適したAPOCバージョンを見つけてください。

  2. Neo4jをインストールした場所を思い出し、APOC jarファイルを$NEO4J_HOME/plugins/の下に配置します

    • Linuxの$NEO4J_HOME:/var/lib/neo4j/
    • Windowsの$NEO4J_HOME:Neo4jサービスを確認してください。場所が表示されます。
  3. お気に入りのテキストエディタでneo4j.confを編集し、APOCへの無制限アクセスを許可するために次の行を置き換えます: #dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.* を次の行に置き換えます: dbms.security.procedures.unrestricted=apoc.*

    • Linuxのneo4j.conf:/etc/neo4j/neo4j.conf
    • Windowsのneo4j.conf:$NEO4J_HOME/conf/neo4j.conf

    ImproHoundを1つのホストで実行し、BloodHoundを別のホストで実行する場合は、BloodHoundホスト上のNeo4jデータベースへのリモート接続を許可する必要があります。そのためには、neo4j.confの#dbms.default_listen_address=0.0.0.0という行から#を削除してください。

3. 最新リリースのImproHound.exeをWindows(x64)でダウンロードして実行

    BloodHound GUIで使用するのと同じ資格情報でBloodHound DBにログインできることを確認してください。

使い方

データベースに接続

alt text

データベースの資格情報を入力し、接続を確立します。BloodHound GUIで使用するのと同じ資格情報です。

続行または最初からやり直す

alt text

ImproHoundは、BloodHoundデータベース内のノードに「TierX」ラベルを作成します。以前にこのBloodHoundデータベースでImproHoundを使用したことがある場合は、既に作成した階層設定を続行するか、最初からやり直すかを尋ねられます。

デフォルト階層化またはすべてをTier 2に設定

alt text

ImproHoundでは、「デフォルト階層化」を選択するとDomain AdminsをTier 0、Domain UsersをTier 2などに設定するか、またはすべてのオブジェクトをTier 2に設定できます。

OU構造

alt text

このページでADオブジェクトを階層に分類します。ウィンドウにはOU構造が表示されます。各ADオブジェクトには階層値があり、矢印で増減できます。

子オブジェクトを階層に設定

ドメインまたはADコンテナを選択した場合、「子オブジェクトを階層に設定」をクリックすると、すべての子オブジェクト(再帰的)が指定されたドメイン/コンテナの階層レベルに設定されます。

メンバーを階層に設定

グループを選択した場合、「子オブジェクトを階層に設定」(原文ママ)をクリックすると、すべてのメンバー(再帰的)が指定されたグループの階層レベルに設定されます。

GPOの階層を設定

「GPOの階層を設定」をクリックすると、各GPOの階層レベルが、そのGPOがリンクされているOUの中で最も高い階層(ゼロに最も近い)に設定されます。どのOUにもリンクされていないGPOの階層レベルは変更されません。

階層違反を取得

BloodHoundデータベース内で、ADオブジェクトがより上位(ゼロに近い)階層のADオブジェクトを制御しているすべての関係を見つけます。

出力として2つのCSVファイルが生成されます。

  • adobjects-[タイムスタンプ].csv:すべてのADオブジェクトとそれらが属する階層。
  • tiering-violations-[タイムスタンプ].csv:階層違反。

違反CSVのレコード例:

最初のレコードは、Tier 1のサービスアカウントがTier 0のユーザーアカウントのパスワードを変更する権限を持っていることを示しています。関係は継承されています。残念ながら、BloodHoundデータ内で関係がどこから継承されているかを常に確認できるわけではありませんが、Users and Computersで対象ADオブジェクトのアクセス許可を調べることで手動で確認できます。2番目のレコードは、GPOを編集する権限を持つグループを示しており、そのGPOはおそらくTier 0サーバーを含むOUにリンクされています(Tier 0 GPOであるため)。

すべての関係タイプとその悪用方法はこちらで確認できます。

オブジェクトが高すぎる(ゼロに近すぎる)階層にあることが判明した場合は、ImproHoundで修正し、そのオブジェクトをSOURCEとして違反を確認する必要があります。オブジェクトが低すぎる(無限大に近すぎる)階層にある場合は、ImproHoundで修正し、そのオブジェクトをTARGETとして違反を確認する必要があります。

階層の削除

すべての階層ラベルとImproHoundが作成したノードがBloodHoundデータベースから削除されます。

ADオブジェクト階層化のガイドライン

ADオブジェクトを正しく階層化することが重要です。DCと通常の低権限ユーザーを両方Tier 0オブジェクトに設定すると、ImproHoundはそのユーザーのDCへの管理者アクセスが階層違反であることを検出しません。同様に、両方をTier 2に追加した場合も同じです。

コンピュータ

コンピュータは、侵害された場合の重要度に基づいて階層化されます。

  • Tier 0 – ドメインコントローラおよびその他の重要なシステムと分類されるもの。SCCM、ADFS、PKI、仮想化サーバー(VMware、Hyper Vなど)など。
  • Tier 1 – 残りのサーバーインフラ
  • Tier 2 – 通常のワークステーション

ユーザー

ユーザーは、ログオンできるコンピュータと制御権限を持つADオブジェクトに基づいて階層化されます。制御権限の例としては、Tier 1サーバーにリンクされたGPOを編集する権限を持つユーザーが挙げられ、そのユーザーはTier 1オブジェクトとなります。

グループ

グループは、そのメンバーの最も低い階層(無限大に最も近い)に属します。ただし、グループに悪質なメンバーがいる場合(例:通常のユーザーがDomain Adminsのメンバーである場合)は除きます。

例:Domain Usersは、Tier 0のユーザーがメンバーであってもTier 2グループです。なぜなら、ユーザーに権限を与えているのはDomain Usersのメンバーシップではないからです。一方、Domain AdminsグループはTier 0グループです。このグループのメンバーシップによりユーザーは非常に特権的になるからです。_Cloneable Domain Controllers_はADにおいて特権を持っていませんが(少なくとも筆者の知る限り)、Tier 0オブジェクト(すなわちDC)のみを含むべきであるため、Tier 0グループです。

コンテナ(OUおよびドメインを含む)

コンテナは、その子オブジェクトの最も高い階層(ゼロに最も近い)に属するか、それよりも高い階層に属します。

例:UsersコンテナにすべてのTier 0、Tier 1、Tier 2ユーザーが含まれているとします。Usersコンテナに対するフルコントロール権限を持つユーザーは、すべてのユーザー(Tier 0ユーザーを含む)を侵害できます(一部保護されているものを除きますが、この例では重要ではありません)。したがって、UsersコンテナはTier 0オブジェクトでなければなりません。

GPO

GPOの階層レベルは、GPOがリンクされているOUの階層レベルによって決まります。GPOは、リンクされているOUの中で最も高い階層(ゼロに最も近い)に属します。 [Set tier for GPOs]ボタンを使用して、すべてのGPOがこの原則に従っていることを確認してください。

例:Tier 1 OUにリンクされたGPOを編集する権限を持つユーザーは、GPOを変更することでTier 1 OU配下のすべてのサーバーのAdministratorsメンバーシップを制御できます。

動作確認済み依存関係の最新バージョン

  • BloodHound 4.2.0
  • Neo4j 4.4.10
  • APOC 4.4.0.8
  • Java/OpenJDK 11.0.16.1 LTS

TODO

  • GetChanges / GetChangesAllのうち一方のみ存在する場合のフィルタリング。
  • デフォルトでTier 0に追加するもの:RODC(krbtgt_xxxxxxを含む)、MSOL_、AdminSDHolderなど。
ツールをダウンロード
  • Neo4jを再起動

    • Linux:systemctl restart neo4j
    • Windows(cmd):net stop neo4j && net start neo4j(PowerShell:net stop neo4j; net start neo4j)
  • SourceTierSourceTypeSourceNameSourceDistinguishednameRelationIsInheritedTargetTierTargetTypeTargetNameTargetDistinguishedname
    Tier1User[email protected]CN=svc-monitor,CN=Users,DC=hot,DC=localForceChangePasswordTrueTier0User[email protected]CN=T0_JBK,CN=Users,DC=hot,DC=local
    Tier2Group[email protected]CN=Wrk-Admins,CN=Groups,DC=hot,DC=localGenericWriteTier0GPO[email protected]CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local