レガシーハイブ: 他のユーザーのレジストリハイブをロードするWindowsユーザープロファイルサービスのバグ
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
LegacyHiveは、Windowsユーザープロファイルサービス(ProfSvc)における未修正のローカル権限昇格脆弱性です。攻撃者は、レジストリの汚染、オブジェクトマネージャーのシンボリックリンク、TOCTOUレース条件を用いたオプロックを組み合わせて、SYSTEMレベルのサービスにターゲットユーザーのレジストリハイブをロードさせることができます。これにより、低権限のユーザーが機密レジストリデータへの不正アクセスを得たり、完全なSYSTEMレベルの侵害を達成する可能性があります。
調査
研究者のNightmare-Eclipseは、SYSTEMレベルのファイル操作とユーザー制御のパスとの不一致を悪用する概念実証(PoC)を開発しました。この調査では、ローカルAppDataレジストリの値を変更することで、サービスをNTオブジェクトマネージャーの名前空間にリダイレクトできることを示しています。欺瞞ファイルにオプロックを使用すると、サービスがハイブをロードしようとする正確な瞬間にシンボリックリンクを交換できます。
緩和策
Microsoftは正規化パスを実装し、解決したパスが正当なユーザープロファイルディレクトリ内に留まることを確認し、デバイス/オブジェクトマネージャーの接頭辞を拒否する必要があります。さらに、開発者は再解析保護(FILE_FLAG_OPEN_REPARSE_POINT)を使用し、SYSTEMコンテキストではなくユーザーのセキュリティコンテキスト内でI/Oを実行することで、混乱した代理エクスプロイトを防ぐべきです。
対応
ディフェンダーは、ユーザーがインタラクティブにログオンしていないアカウントに対する異常なレジストリのロード(RegLoadKey)をただちに監視し、BaseNamedObjectsRestricted配下のオブジェクトディレクトリの作成にも注意を払うべきです。WDACやAppLockerのようなアプリケーション制御ツールを使用して、署名されていないバイナリの実行を防ぐべきです。Microsoftが公式パッチをリリースしたら、全てのWindowsデスクトップおよびサーバーインストールに優先的に展開する必要があります。
攻撃フロー
検出
可能性のあるLegacyHiveエクスプロイト行動(registry_event経由)
表示
可能性のあるLegacyHiveエクスプロイト行動(file_event経由)
表示
可能性のあるLegacyHiveエクスプロイト行動(cmdline経由)
表示
Windowsハックツールの可能性のある使用【Part3】(file_event経由)
表示
Windowsハックツールの可能性のある使用【Part3】(cmdline経由)
表示
LegacyHive権限昇格攻撃の検出【Windowsレジストリエベント経由】
表示
CreateProcessWithLogonWおよびサスペンデッドNotepadを通じたLegacyHiveエクスプロイト試行を検出する【Windowsプロセス作成】
表示
エグゼクティブサマリー
- テストケースID: TC-20240522-K9P2L
- TTP: T1068, T1548
-
検出ルールロジック概要: LegacyHive脆弱性のエクスプロイト試行を検出し、監視します。
notepad.exeがCreateProcessWithLogonWAPIパターンでコマンドラインから起動される。 - 検出ルール言語/フォーマット: yaml
- ターゲットセキュリティ環境: Windows OS、Windowsイベントログ(プロセス作成)、EDR/SIEM。
- レジリエンススコア(1-5): 2
-
正当化: ルールは特定の文字列(
CreateProcessWithLogonW)に大きく依存しており、CommandLineフィールドに表示されます。敵対者は、同じ結果を得るために異なるAPI呼び出しを使用したり、notepad以外の異なるプロセス名を使用することで、容易にこれを回避できます。notepad.exe. - 主要調査結果: 検出は単一のエクスプロイト実装に非常に特化しており、攻撃ベクターのわずかな変更に対して非常に脆弱です。
-
提案: 疑わしい
CreateProcessのバリエーションを複数の一般的なバイナリ(例:calc.exe,cmd.exe)にわたって監視し、ユーザープロファイルサービス(ProfSvc)の異常を監視することを拡張する。
シミュレーション環境とコンテキスト
-
テスト中のTTP:
- T1068: 権限昇格のためのエクスプロイト
- T1548: 権限昇格メカニズムの悪用
-
TTPのコンテキストと関連性: LegacyHiveエクスプロイトは、SYSTEMレベルのサービスにユーザーの代理でアクションを実行させることに依存しています。
CreateProcessWithLogonWを使用してプロセスをサスペンド状態で生成すると、攻撃者は環境を操作して悪意のあるレジストリハイブをロードできます。このAPI呼び出しの特定のコマンドラインアーティファクトを監視することで、エクスプロイトフェーズを捕捉することを意図しています。 -
ターゲット環境:
- OS: Windows 10/11 または Windows Server 2019/2022
- ログ: Sysmon(イベントID 1)またはコマンドライン監査が有効化されたWindowsセキュリティイベントログ(イベントID 4688)。
- セキュリティスタック: SIEM(例:Splunk、Microsoft Sentinel)
テレメトリ&ベースライン事前チェック
理由:攻撃をシミュレートする前に、ターゲットホストが必要なログを生成するように構成されていることを確認し、これらのログがSIEMによって取り込まれていること、そして検出ルールが良性の活動では発火しないことを確認しなければなりません。この検証なしでは、いかなるテスト結果も信頼できません。
-
1. テレメトリ設定手順:
-
- グループポリシー(コンピューターの構成 > Windowsの設定 > セキュリティの設定 > 高度な監査ポリシー構成 > 詳細な追跡)を通じて「プロセス作成の監査」を有効にする。
-
- プロセス作成イベントにコマンドラインを含める」ように(レジストリ経由:
HKLMSoftwareMicrosoftWindowsCurrentVersionPoliciesSystemAuditProcessCreationIncludeCmdLine).
- プロセス作成イベントにコマンドラインを含める」ように(レジストリ経由:
-
- Sysmonをインストールし、イベントID 1(プロセス作成)が収集されていることを確認する。
-
-
2. 取り込みとベースラインの検証:
-
アクション(良性のテレメトリ): 標準のNotepadインスタンスを起動して、プロセス作成のロギングがエクスプロイト検出をトリガーせずに機能していることを確認する。
Start-Process "notepad.exe" -
検証クエリ(取り込み):
DeviceProcessEvents | where FileName =~ "notepad.exe" | where ProcessCommandLine !contains "CreateProcessWithLogonW"
-
シミュレーション実行
前提条件:テレメトリ&ベースライン事前チェックが合格している必要があります。
理由:このセクションでは、検出ルールをトリガーするために設計された敵対者技術(TTP)の正確な実行を詳述します。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって予想されるテレメトリを正確に生成することを目的としています。抽象的または関連性のない例は誤診につながります。
-
攻撃の説明とコマンド: 攻撃者は、LegacyHive脆弱性を利用してSYSTEMへの権限を昇格させることを狙っています。このために、彼らは
CreateProcessWithLogonWWindows APIを利用してnotepad.exeをサスペンド状態で起動することを目指しています。このシミュレーションは、PowerShellラッパーを使用して、検出ルールが探しているコマンドライン引数パターンを模倣し、特に実行コンテキスト内の文字列CreateProcessWithLogonWを対象としています。notepad.exe. -
回帰テストスクリプト:
# コマンドラインアーティファクトインジェクションを通じたLegacyHiveエクスプロイト試行のシミュレーション # 注: このスクリプトは検出テスト用のコマンドライン文字列パターンをシミュレートします。 $targetProcess = "notepad.exe" $fakeArgument = "CreateProcessWithLogonW" Write-Host "[+] LegacyHiveエクスプロイト試行のシミュレーションを開始..." # コマンドライン文字列が明示的に渡され、プロセス作成のテレメトリに表示されるようにcmd /cを使用します。 Start-Process "cmd.exe" -ArgumentList "/c $targetProcess $fakeArgument" Write-Host "[+] シミュレーションコマンドが送信されました。CreateProcessWithLogonW をコマンドラインに含む notepad.exe をSIEMで確認してください。" -
クリーンアップコマンド:
# シミュレーションによって作成された残存するnotepadまたはcmdプロセスを終了します Stop-Process -Name "notepad" -ErrorAction SilentlyContinue Stop-Process -Name "cmd" -ErrorAction SilentlyContinue