Windows管理者保護のバイパス: UIアクセスを悪用した権限昇格手法
セキュリティ研究者James Forshawが、WindowsのUIアクセス実装における5つの重大な脆弱性を公開。管理者保護のセキュリティ境界を突破する攻撃手法とその影響、対策について解説。
Windows管理者保護のバイパス: UIアクセスを悪用した権限昇格手法
執筆: [サイバーセキュリティジャーナリスト]
主要な発見
セキュリティ研究者のJames Forshaw氏は、MicrosoftのUIアクセス実装における5つの重大な脆弱性の技術的詳細を公開しました。これらの脆弱性は、攻撃者がWindowsの**管理者保護(Administrator Protection)**をバイパスすることを可能にします。Forshaw氏の研究で特定された9つのバイパス(本分析で詳細に説明する5つを含む)は、現在Microsoftによって全て修正されています。
これらの脆弱性は、UIアクセス機能に起因しています。この機能は、Windows Vistaでスクリーンリーダーなどのアクセシビリティツールをサポートするために導入されました。この機能を悪用することで、攻撃者はHigh IntegrityのUIアクセスプロセスで任意のコードを実行し、ユーザーの操作なしに管理者保護のセキュリティ境界を侵害することが可能でした。
技術的背景: UIアクセスとUIPI
ウィンドウ操作セキュリティの進化
Windows Vista以前は、ユーザーのデスクトップ上で実行されている任意のプロセスが、他のプロセス(特権プロセスを含む)が作成したウィンドウを、ウィンドウメッセージを介して制御することが可能でした。この挙動は、**Shatter攻撃**で悪用され、限定ユーザーが特権UIコンポーネントを操作して権限を昇格させることができました。Microsoftは、特権コードからUI要素を削除することでこの問題を緩和しました。
Windows Vistaで**ユーザーアカウント制御(UAC)が導入されると、同じデスクトップ上で異なる特権レベルでプロセスが実行されるようになりました。特権間のウィンドウ操作を防ぐため、Microsoftはユーザーインターフェース特権分離(UIPI)を実装し、プロセス間の相互作用を制限する強制整合性制御(MIC)**を活用しました。UIPIは、プロセスがウィンドウメッセージを送信したり、フックを使用して高い整合性レベルのプロセスが作成したウィンドウとやり取りすることを禁止します。
例:
- **限定ユーザープロセス(Medium Integrity)**は、**管理者プロセス(High Integrity)**にメッセージを送信できません。
- UIPIは、ウィンドウフックなどの他のUI機能も整合性レベル間での使用を禁止します。
アクセシビリティのジレンマ
UIPIの制限は、スクリーンリーダーなどのアクセシビリティツールに重大な問題を引き起こしました。これらのアプリケーションは限定ユーザーとして実行されるため、管理者プロセスとのやり取りができず、ウィンドウの内容を読んだり、ボタンをクリックするなどの操作ができなくなりました。この問題を解決するため、MicrosoftはUIアクセスフラグを導入しました。
プロセスのアクセストークンにUIアクセスフラグが設定されると、多くのUIPI制限をバイパスする特別な権限が付与されます。このフラグを有効にするには、SE_TCB_NAME特権が必要であり、これはシステムサービスにのみ付与されています。その結果、UIアクセスプロセスの作成には、通常UACサービスを介したRAiLaunchAdminProcess RPC呼び出しが必要です。
UIアクセスプロセスの作成フロー
悪用を防ぐため、UACサービスはUIアクセスフラグを有効にする前に実行ファイルに対して厳格なチェックを実施します:
- マニフェスト要件: 実行ファイルには、
uiAccess属性がtrueに設定された埋め込みマニフェストが必要です。 - コード署名: ファイルは、ローカルマシンのルート証明書ストアによって信頼されたコード署名証明書で署名されている必要があります。
- セキュアな場所: 実行ファイルは、システムドライブ上の管理者のみが書き込み可能な場所に存在する必要があります。例:
Program FilesディレクトリWindowsディレクトリ(書き込み可能な場所を除く)System32ディレクトリ(書き込み可能な場所を除く)
これらの基準を満たす場合、UACサービスは以下の処理を実行します:
- 呼び出し元のアクセストークンのコピーを取得。
- UIアクセスフラグを有効化。
- 呼び出し元に基づいて整合性レベルを引き上げ:
- UAC管理者の限定ユーザー: 整合性レベルをHighに設定。
- 管理者: 整合性レベルをHighに設定(通常はノーオペレーション)。
- 通常ユーザー: 整合性レベルを呼び出し元の整合性 + 16に設定(最大Highまで)。
重要な注意: UIアクセスフラグは、高い整合性レベルのプロセスにウィンドウメッセージを送信するなど、限られた操作のバイパスのみを許可します。コードインジェクションを可能にするウィンドウフックの使用は許可されません。
管理者保護におけるUIアクセスの悪用
コア脆弱性
管理者保護は、UACのためのセキュアな境界を作成するために設計された新しいWindows機能です。しかし、Forshaw氏は、UIアクセスプロセスがこの境界を侵害できることを発見しました:
- 限定ユーザーが
RAiLaunchAdminProcessを介してUIアクセスプロセスを作成すると、プロセスは呼び出し元のトークン(限定ユーザー)で実行されますが、UIアクセスフラグが有効になり、整合性レベルがHighに設定されます。 - High Integrityプロセスは、同じデスクトップ上の他のHigh Integrityプロセス(異なるユーザーで実行されている場合でも)を侵害できます。
- UIアクセスプロセスは限定ユーザーとして実行されるため、プロファイルの分離が行われず、管理者保護の重要なセキュリティ改善が無効化されます。
- High Integrityへの昇格はサイレントに行われ、攻撃者はユーザーにプロンプトを表示することなくセキュリティ境界を突破できます。
任意のUIアクセス実行の達成
Forshaw氏は、High IntegrityのUIアクセスプロセスで任意のコードを実行する複数の方法を特定しました。Microsoftはこれらの問題を修正する優先度が低いとしていましたが、現在はいくつかが修正されています。これらの手法は主に3つのカテゴリに分類されます:
1. セキュアアプリケーションディレクトリチェックのバイパス
UACサービスのAiCheckSecureApplicationDirectoryメソッドは、実行ファイルがセキュアな場所に存在することを検証します。Forshaw氏は、このチェックをバイパスするいくつかの方法を発見しました:
-
NTFS代替データストリーム: 2017年、Forshaw氏は、限定ユーザーが書き込み可能なディレクトリにNTFS代替データストリームを書き込むことでバイパスできることを報告しました。例えば、
C:\Windows\tracingディレクトリは書き込み可能ですが、セキュアチェックから除外されています。代替データストリーム(例:C:\Windows\tracing:file.exe)を書き込むと、ファイルパスがC:\Windows内にあるように見えるため、セキュアと見なされます。この問題は後のWindowsバージョンで修正されました。 -
セキュアな場所の書き込み可能なファイル/ディレクトリ: 攻撃者は、セキュアな場所に存在する書き込み可能なファイルを悪意のある実行ファイルで上書きできます。UACサービスが使用する
CreateProcessAsUserAPIは特定のファイル拡張子を必要としないため、任意のファイルを実行できます。また、攻撃者はセキュアな場所内の書き込み可能なディレクトリに実行ファイルをコピーすることも可能です。 -
MSIXインストーラーの悪用: 最近の研究で、Forshaw氏はWindowsインストーラーがMSIXファイルを
C:\Program Files\WindowsAppsに配置できることを発見しました。このディレクトリはセキュアチェックから除外されていません。Windows 11では、デフォルトで署名されたMSIXファイルを管理者権限なしでインストールできます。攻撃者は、UIアクセス実行ファイルをMSIXインストーラーにパッケージ化し、任意の証明書で署名することで、セキュアな場所に実行ファイルを配置できます。この問題は、WindowsAppsディレクトリを除外することで修正されました。
2. その他の歴史的なバイパス手法
Forshaw氏は、任意のUIアクセス実行を達成するための他の歴史的な手法についても言及しています:
- DLLプランティング: 悪意のあるDLLをセキュアな場所に配置し、正規の実行ファイルをハイジャックする手法。
- COMの悪用: メッセージ専用ウィンドウを使用するCOMコンポーネントを悪用し、UIを表示せずにプロセスを侵害する手法。
影響分析
本研究で説明された脆弱性は、管理者保護が有効なWindowsシステムに重大なリスクをもたらします:
- 権限昇格: 攻撃者は、限定ユーザーからHigh Integrityに権限を昇格させ、管理者保護のセキュリティ境界を効果的にバイパスできます。
- サイレントな悪用: High Integrityへの昇格はユーザーの操作なしに行われるため、検出が困難です。
- 任意のコード実行: High IntegrityのUIアクセスプロセスで任意のコード実行が達成されると、同じデスクトップ上の他のHigh Integrityプロセスを侵害できます。
- プロファイル分離の欠如: プロファイル分離の欠如は、管理者保護の主要なセキュリティ改善の1つを無効化します。
推奨事項
セキュリティ専門家およびシステム管理者は、これらの脆弱性に関連するリスクを軽減するために以下の対策を講じるべきです:
- パッチの適用: Microsoftから提供される最新のセキュリティパッチを全てのWindowsシステムに適用し、修正されたバイパスに対処します。
- UIアクセスプロセスの監視: 特にHigh Integrityで実行されるUIアクセスプロセスの異常な作成を監視します。
- セキュアな場所へのアクセス制限:
Program Files、Windows、System32などのディレクトリへの書き込みアクセスを管理者のみに制限します。 - コード署名証明書の監査: ローカルマシンのルート証明書ストアで信頼されるコード署名証明書をレビューし、悪用を防ぐために制限します。
- 不要なアクセシビリティ機能の無効化: 必要のないアプリケーションに対してUIアクセスを無効化し、攻撃対象領域を縮小します。
結論
James Forshaw氏の研究は、Windowsの権限昇格メカニズムを保護する上での継続的な課題を浮き彫りにしています。UIアクセスはアクセシビリティをサポートするために設計されましたが、その実装は管理者保護をバイパスする重大なセキュリティリスクをもたらしました。Microsoftは本分析で説明された脆弱性に対処しましたが、この研究は、同様の脅威に対抗するために厳格なセキュリティテストと積極的な監視の重要性を強調しています。
詳細な技術情報については、Forshaw氏のオリジナルブログ記事をProject Zeroで参照してください。