Intelプロセッサには、Windowsカーネルが標準的なアプリケーションメモリにアクセスするのを防ぐために特別に設計された重要なセキュリティ機構が備わっています。しかし、特定のシステムコール実行時には、この重要な保護機能が謎めいた形で自ら無効化されてしまうことが分かりました。あるセキュリティ専門家が、HackSys Extreme Vulnerable Driver向けの実証エクスプロイトを開発している最中に、この驚くべき挙動を発見しました。
本来期待されるSMAPの介入
この研究者は、任意書き込みの脆弱性を利用してカーネルのコード実行を乗っ取りました。主な目的は、スタックを標準ユーザープロセスのメモリ空間へ強制的に移動させることでした。理論上、この大胆な操作は即座に致命的なシステム障害を引き起こすはずでした。Supervisor Mode Access Prevention(SMAP)は、まさにこうした行為を阻止するために存在する機構です。Intelは、カーネルがユーザーメモリページにアクセスすることを厳格に禁止するよう、SMAPを特別に設計しています。
予期せぬエクスプロイトの成功
驚くべきことに、Windows 11ビルド26200.8328を実行する仮想マシン上では、このエクスプロイトチェーンが問題なく実行されてしまいました。研究者は、狙っていたSYSTEM権限の取得に成功したのです。その後の詳細な調査により、不可解な設定状態が明らかになりました。CR4レジスタのビット21は、SMAPが正式に有効化されていることを示していました。しかしそれと同時に、プロセッサのフラグレジスタ内のAlignment Check(AC)ビットも、説明のつかない形で有効になっていたのです。Intelの公式ドキュメントによれば、ACビットが有効な場合、カーネルによるユーザーメモリへのアクセスが明示的に許可され、有効化されているはずのSMAP保護は完全に無効化されてしまいます。
脆弱性トリガーの特定
入念な一連のテストにより、ACの状態がユーザーアプリケーションから完全に独立していることが確認されました。プログラム側がシステムコール実行前に明示的にACビットをクリアしていても、ドライバは依然としてACビットが1に設定された状態で実行制御を受け取っていたのです。研究者らがドライバ内部で強制的にACビットをクリアすると、ユーザーメモリを読み取ろうとする試みは即座にシステムクラッシュを引き起こしました。つまり、SMAPの中核機構そのものは完璧に機能していたことになります。明白な問題点は、Windows自体が、今回調査したリクエスト処理経路において、このメモリへのアクセスを事前に許可してしまっていたことでした。
Windowsアーキテクチャの歴史的背景
この不可解な現象は、Windowsのアーキテクチャ上の根本的な設計選択に直接起因しています。早くも2020年の時点で、Microsoft Security Response Centerの専門家たちが、標準カーネルに対してSMAPを完全に有効化することの実現可能性を綿密に調査していました。公表された包括的な研究reportの中で、Microsoftは、既存のWindowsコードがあまりにも頻繁にユーザーメモリへ直接アクセスしているという結論に至りました。
パフォーマンス低下とセキュリティのトレードオフ
通常のシステム起動評価の過程で、Microsoftの専門家たちは、994個の異なる関数にまたがる約2,900件ものユーザーメモリアクセスイベントを丹念に記録しました。ユーザーメモリアクセスを切り替えるために必要な命令を自動的に挿入すると、深刻なパフォーマンス低下が発生しました。この手法により、システムコールの処理速度は約23%低下しました。特定の重要なファイルシステム操作に至っては、20%から40%という致命的な速度低下に見舞われました。Microsoftは、実行されるコードを完全に管理下に置ける、極めて制限されたセキュアWindowsカーネルに限ってのみ、この手法を許容できると判断しました。
現代の実装と残存する欠陥
その後Microsoftは、カーネルとユーザーメモリ間の安全なデータ交換を容易にする専用の関数を導入しました。現在のMicrosoftのドキュメントでは、RtlCopyFromUserやRtlCopyToUserといった関数が特に取り上げられています。しかし、すべてのカーネルコードがこれらの安全な関数のみを利用することを厳格に求める理想的なモデルは、いまだWindowsオペレーティングシステム全体を網羅するには至っていません。
今回の調査結果は、Windowsのエコシステムにおいて、SMAPが完全に無意味であることを示すものでは決してありません。この研究者が今回の検証を行ったのは、特定のドライバのリクエスト処理経路を利用した、特定のWindows 11ビルド上に限られます。とはいえ、この驚くべき実験は、深刻な脆弱性の存在を紛れもなく証明しています。特定の脆弱なドライバを悪用することで、攻撃者は、カーネルによるユーザーメモリへのアクセスがすでに許可されているコンテキスト内で実行制御を確保できてしまうのです。したがって、セキュリティ専門家はもはや、SMAPを、高度なポストエクスプロイテーション型のカーネル攻撃に対する難攻不落の独立した防壁とは見なせなくなったといえるでしょう。
翻訳元: https://meterpreter.org/windows-11-smap-bypass/