PrivHound
グラフとしてのローカル権限昇格。
Windowsローカル権限昇格を、テキストの壁ではなく相互接続された攻撃パスとしてモデル化するWindows BloodHound OpenGraphコレクタ。
長い間、BloodHoundはActive Directoryの設定ミスを静的なチェックリストから探索可能な攻撃パスに変換し、攻撃者がグラフ的に考えることを証明してきました。しかし、ローカル権限昇格に関しては、業界は今でも2015年にとどまっています。ツールを実行し、テキストの壁を読み、手動でドットをつなぐか、LLMにやらせるかどちらかです😛
WinPEAS、PowerUp、Seatbeltは個別の設定ミスを見つけるのに優れていますが、次のような質問に答えることができません:
- 「この書き込み可能なProgram Filesディレクトリが実際にSYSTEMにつながるのは、サービスがそこからバイナリを実行しているからでしょうか?」
- 「このPowerShell履歴ファイルに含まれている認証情報は、ローカル管理者として有効でしょうか?」
- 「別のユーザーのプロフィールを読んで、保存されている認証情報を見つけ、彼らとしてログインし、彼らが書き込みアクセスできるサービスを悪用できますか?」
これらのツールは単独で検出結果を報告します。実際には、権限昇格はマルチステップチェーンであり、1つの検出結果が別の検出結果につながります。書き込み可能なディレクトリは、そこからサービスが実行されていなければ何の意味もありません。履歴ファイル内の認証情報は、それが特権ユーザーに属していなければ何の意味もありません。本当の質問は「どのような設定ミスが存在するか?」ではなく、「ここから実際に何に到達できるか?」です。
Active Directoryの攻撃がグラフと考えることができるなら、ローカル権限昇格はどうでしょうか?
PrivHoundはローカル権限昇格をグラフとしてモデル化することでこれを変えます。BloodHoundのOpenGraphフレームワークに基づいて、29のカテゴリのWindows権限昇格ベクトルを列挙し、弱いサービス権限からCOM乗っ取り、WebClientリレーまで、相互接続されたノードとエッジとして出力します。
結果: マルチホップ昇格チェーンが可視化され、Cypherで照会可能になり、既存のActive Directory攻撃パスの上に重ねられます。
チェック内容
| # | チェック | 手法 | MITRE |
|---|---|---|---|
| 1 | 弱いサービス権限 | SYSTEMとして実行される修正可能なサービス | T1574.011 |
| 2 | 書き込み可能なサービスバイナリ | サービス.exeをペイロードで置き換える | T1574.010 |
| 3 | クォートされていないサービスパス | 書き込み可能な中間ディレクトリを経由したパスハイジャック | T1574.009 |
| 4 | DLLハイジャック(PATH) | システムPATHの書き込み可能なディレクトリ | T1574.001 |
| 5 | AlwaysInstallElevated | 悪意のあるMSIをSYSTEMとしてインストール | T1548.002 |
| 6 | トークン権限 | SeImpersonate、SeDebug、SeBackup等 | T1134.001 |
| 7 | スケジュール済みタスク | SYSTEMタスクの書き込み可能なバイナリ | T1053.005 |
| 8 | オートラン実行可能ファイル | Run/RunOnceキーの書き込み可能なバイナリ | T1547.001 |
| 9 | レジストリサービスキー | HKLMの書き込み可能なサービスImagePath | T1574.011 |
| 10 | 保存された認証情報 | 認証情報マネージャー、オートログオンパスワード | T1552.001 |
| 11 | GPPキャッシュパスワード | グループポリシー設定のcpassword | T1552.006 |
| 12 | 無人インストールファイル | unattend/sysprep XMLの認証情報 | T1552.001 |
| 13 | PowerShell履歴 | PSReadLine履歴とトランスクリプト | T1552.001 |
| 14 | 機密ファイル | SAMバックアップ、.kdbx、.rdg、git-credentials | T1552.001 |
| 15 | UAC回避の機会 | UAC設定ミスまたは管理者が昇格されていない | T1548.002 |
| 16 | 書き込み可能なプログラムディレクトリ | Program Filesの書き込み可能なディレクトリ | T1574.010 |
| 17 | クロスユーザープロフィール | 機密ファイルを含む読み取り可能なプロフィール | T1552.001 |
| 18 | 認証情報ログインパス | 抽出された認証情報をローカルユーザーに対して検証 | T1078.003 |
| 19 | クロスユーザー権限昇格 | 発見されたユーザーがアクセスできる内容を分析 | T1078.003 |
| 20 | JIT管理ツール | MakeMeAdmin、CyberArk EPM、Admin By Request | T1548 |
| 21 | プリントスプーラ / PrintNightmare | 脆弱なポイント&プリント設定 | T1068 |
| 22 | WSUS HTTP(非SSL) | SYSTEMコード実行のためのWSUS MITM | T1557 |
| 23 | SCCM/MECM NAA認証情報 | ネットワークアクセスアカウントDPAPI抽出 | T1552.001 |
| 24 | COMオブジェクト乗っ取り | HKCU CLSID乗っ取りでSYSTEMコンテキストDLLロード | T1546.015 |
| 25 | 名前付きパイプ権限 | 許可的なSYSTEMパイプACL → なりすまし | T1134.001 |
| 26 | キャッシュされた認証情報 | DCC2、WiFi、WinSCP、FileZilla、PuTTy認証情報 | T1552.001 |
| 27 | WMIイベントサブスクリプション | 書き込み可能なWMIコンシューマーバイナリ/スクリプト | T1546.003 |
| 28 | WebClientリレー | WebClientを経由したNTLMリレー(DC LDAP → SYSTEM) | T1187 |
| 29 | サービス復旧コマンド | 書き込み可能な失敗復旧コマンドバイナリ | T1574.010 |
| 30 | シャドウコピー機密ファイル | VSSスナップショットでアクセス可能なSAM/SYSTEMハイブ | T1003.002 |
マルチホップ攻撃パス
これが従来のprivescツールからPrivHoundを区別するものです。検出結果を単独で一覧表示する代わりに、PrivHoundはそれらを悪用可能なチェーンに接続します:
| チェーン | パス |
|---|---|
| 認証情報パイプライン | User → PSHistory → PHContainsCreds → PHCanLoginAs → LocalUser → Admin |
| 書き込み可能なdir → サービス | User → WritableProgramDir → PHHostsBinaryFor → Service → SYSTEM |
| クロスユーザープロフィール | User → Profile → SensitiveFile → PHCanLoginAs → LocalUser → Admin |
| クロスユーザー昇格 | User → (creds) → PHCanLoginAs → UserX → PHCanWriteBinary → Service → SYSTEM |
| SeBackupサブチェーン | User → SeBackup → PHCanReadProtected → SAM → PHCanExtractHashes → Admin |
| 保存された認証情報 → runas | User → StoredCred → PHCanLoginViaRunas → LocalUser → Admin |
| SCCM NAA → 認証情報 | User → SCCMCred → PHContainsCreds → PHCanLoginAs → Admin |
| WebClientリレー | User → WebClientRelay → PHEscalatesTo → SYSTEM |
| COM乗っ取り | User → COMHijack → PHExecutesAs → SYSTEM |
| WMIサブスクリプション | User → WMISubscription → PHRunsAs → SYSTEM |
| 名前付きパイプ | User → NamedPipe → PHRunsAs → SYSTEM |
| サービス復旧 | User → PHCanWriteRecoveryBin → Service → SYSTEM |
| シャドウコピーハッシュ | User → ShadowCopy → SAM → PHCanExtractHashes → Admin |
| JIT管理者 | User → MakeMeAdmin → PHGrantsTempAdmin → Admin |
クロスユーザー権限昇格
PrivHoundが他のローカルユーザーの有効な認証情報を発見すると(GPPパスワード、オートログオン、無人ファイル、PowerShell履歴、クロスユーザープロフィールなどを経由して)、PHCanLoginAsエッジの作成で止まりません。発見されたユーザーが実際に何ができるかを分析します。
仕組み(SeImpersonatePrivilegeは不要):
LogonUserは発見された各ユーザーのトークンハンドルを取得しますGetTokenInformationはグループメンバーシップ(SID)とトークン権限を抽出します- ACLチェックは現在のユーザーのグループではなく、発見されたユーザーのグループを使用して実行されます
- 発見されたユーザーのノードから、アクセスできる脆弱なリソースへのエッジが作成されます
- トークンは閉じられます — なりすましは発生しません、昇格された権限は必要ありません
発見された各ユーザーに対してチェックする内容:
| サブチェック | 作成されたエッジ |
|---|---|
| サービスバイナリ書き込み | PHCanWriteBinary |
| サービスSDDL修正 | PHCanModifyService |
| クォートされていないパスハイジャック | PHCanHijackPath |
| DLLハイジャックPATHディレクトリ | PHCanWriteTo |
| スケジュール済みタスクバイナリ | PHCanWriteTaskBinary |
| オートランバイナリ | PHCanWriteAutorun |
| プログラムディレクトリ | PHCanWriteProgDir |
| トークン権限 | PHHasPrivilege |
| サービス復旧バイナリ | PHCanWriteRecoveryBin |
すべてのクロスユーザーエッジは、フィルタリング用のdiscovered_via="credential"プロパティを含みます。