虎嗅

セッション0:マイクロソフトが「パフォーマンスへの貪欲さ」に代償を払ってきた20年

原文:Session 0:微软为“性能贪婪”买单的二十年

核心内容のまとめ

この記事は、マイクロソフトのWindowsシステムにおける「Session 0の隔離」メカニズムの歴史を紹介しています。初期にはパフォーマンスと利便性を追求するために、システムサービスとユーザープログラムが同じ実行空間(Session 0)を共有していましたが、セキュリティ上の脆弱性が発覚した後は両者を完全に分離する必要がありました。その結果、短期的なエコシステムの互換性を犠牲にしても根本的なセキュリティ問題を解決しました。この過程は、「パフォーマンス」「セキュリティ」「互換性」という3つの要素の間の永遠のトレードオフを浮き彫りにしています。

1. 初期のWindows:「優雅だが遅かった」NT3.1

1993年にマイクロソフトがWindows NT3.1を発売した際、目標はUNIXからサーバー市場を奪うことでした。そのため、特に「優雅な」設計が採用されました。グラフィックレンダリング(GDI/USER)は独立したユーザーモードプロセス(csrss.exe)として実装され、すべてのプログラム(バックグラウンドサービスであれフロントエンドソフトウェアであれ)がインターフェースを描く際には、このプロセスを介して通信する必要がありました。

しかし、当時のハードウェア環境ではこれは大きな問題でした。ユーザーがウィンドウをドラッグすると、システムは複数のプログラム間を何百回も切り替えなければならず、ウィンドウの更新がスライドショーのように遅かったのです。例えば、ブラウザウィンドウを移動しようとしても、画面が半日動かないほどでした。これが「優雅さ」の代償であり、セキュリティは確保されたもののパフォーマンスがユーザーの要求に追いつきませんでした。

2. パフォーマンスのための妥協:NT4.0ではグラフィックシステムをカーネルに統合

1996年、マイクロソフトはNT4.0を発売し、大胆な決断を下しました。グラフィックサブシステム(GDI/USER)を直接カーネル(win32k.sys)に統合したのです。これによりプロセス間の通信が不要となり、グラフィックレンダリングの速度が大幅に向上し、Windowsデスクトップは突然スムーズになりました。これが後にPCデスクトップを支配する鍵となる措置でした。

しかし、この利点の裏には問題が隠されていました。バックグラウンドサービスがユーザーにポップアップを表示するため(例えば「ディスク容量がいっぱいです」というバックアップサービスの通知)には、バックグラウンドサービスと最初にログインしたユーザーが同じSession(Session 0)を共有し、デスクトップやメッセージキューも共有していました。これは当時としては「便利な機能」でしたが、高権限のシステムサービスと通常のユーザープログラムを同じ環境に置くことで、セキュリティ上のリスクが生じました。

3. セキュリティの爆発:Shatter Attack

2000年以降、セキュリティ専門家は「Shatter Attack」という攻撃手法を発見しました。低権限のユーザープログラムがSession 0内の高権限サービスウィンドウに悪意のあるメッセージを送信することで、サービスがそのメッセージを実行してしまうというものです。これは単なるソフトウェアのバグではなく、設計上の欠陥によるものでした。サービスとユーザーが同じSession内にいる限り、この攻撃を防ぐことはできませんでした。当時マイクロソフトは「信頼性のあるコンピューティング」(セキュリティを最優先)を推進しており、ビル・ゲイツ自身がこの問題の解決を指示しました。10年前にパフォーマンスのために埋め込んだ隠れた問題に直面しなければなりませんでした。

4. Session 0の隔離:セキュリティの勝利、しかしエコシステムへの痛み

2006年にVistaが発売されると、マイクロソフトはサービスをSession 0内に留め(インターフェースの表示を禁止)、ユーザーをSession 1から始めるようにしました。両者間のメッセージ通信や共有メモリも完全に切断されました。これによりShatter Attackは効果的に防がれましたが、多くの古いソフトウェア(企業用バックアップツールやアンチウイルスソフトなど)が「サービスポップアップ」機能を利用しており、Vistaのリリースと同時に多くの問題が発生しました。ユーザーからは「互換性がない」との不満が上がりました。マイクロソフトは一時的な対策を講じ、サービスがポップアップを試みると右下に「メッセージを表示するプログラムがあります」という警告が表示され、ユーザーがそれをクリックすると黒い仮のSession 0デスクトップに切り替わりました。これは非常に使いづらかったですが、古いソフトウェアとの互換性のために妥協せざるを得ませんでした。Win10ではこの一時的な対策も廃止されました。

5. テクニカル決定の永遠のジレンマ:セキュリティとパフォーマンス、どちらを選ぶか?

この歴史は技術界でよく見られるサイクルです。初期にはパフォーマンスや利便性のために統合され(NT4.0)、その後セキュリティや長期的な安定性のために分離されます(Vista)。今日のLinuxコンテナ、ブラウザのサンドボックス、WebAssemblyも同じ問題に直面しています。

例えば、ブラウザのサンドボックスは各ウェブページを独立した空間に隔離することで悪意のある攻撃からシステムを守りますが、メモリ使用量が増加します。Linuxコンテナはアプリケーションを独立した環境にパッケージ化することでセキュリティを高めますが、パフォーマンスが若干低下します。

本質的に、技術的な決定に「完璧な解」は存在せず、「その時点での最適解」しかありません。初期のマイクロソフトはPC市場を獲得するためにパフォーマンスを優先しましたが、後にセキュリティリスクが発生したためエコシステムの犠牲を払う必要がありました。これは企業経営と同じであり、短期的な成長のために品質を犠牲にしても、長期的にはより大きなコストがかかることがあります。バランスを取ることが常に重要です。

この記事は、技術進歩が決して順風満帆ではないことを示しています。すべての最適化の背後には将来の問題が潜んでおり、その問題を解決する過程こそが技術が成熟する過程なのです。