Xboxハックが教えるハードウェアセキュリティの限界
MicrosoftはXbox Oneを「ハッキング不可能」と呼んでいた。今回の脆弱性からハードウェアのルートオブトラストやハイパーバイザー、脅威モデルの教訓を読み解く。

Microsoftは Xbox One のセキュリティアーキテクチャを、突破不可能になるよう設計していました。ハードウェアのルートオブトラスト、独自のハイパーバイザー、本体ごとの鍵で暗号化されたストレージ、そして各段階が次段を検証する署名付きブートチェーン。これは見せかけのセキュリティではありませんでした。業界でも屈指のセキュリティエンジニアリングチームが作り上げた、本当に洗練された多層防御です。彼らはそれを「ハッキング不可能」と呼んでいました。
そして実際にハックされました。「Bliss」と名乗るグループが、ハイパーバイザー、ブートチェーンの検証、ハードウェアのセキュリティプロセッサをすべて迂回し、Xbox One上で完全なコード実行を達成しました。エクスプロイトの詳細は非常に興味深いのですが、それ以上に重要なのは、ハードウェアセキュリティの根本的な限界と、なぜ「ハッキング不可能」という言葉がいつも危険なのかを示している点です。
Xboxのセキュリティアーキテクチャ
今回のハックがなぜ重要なのかを理解するには、何が突破されたのかを知る必要があります。Xbox Oneのセキュリティモデルは、これまで出荷されたコンシューマー向けハードウェアの中でも、最も徹底した実装の一つです。
ブートプロセスは、ハードウェアのルートオブトラストから始まります。これはSoCに焼き込まれた、変更不可能なコードです。このコードが次段のブートローダーを検証してロードし、それがハイパーバイザーを検証してロードし、最後にOSを検証してロードします。各段階はMicrosoftの鍵で署名されており、どこかの検証に失敗すれば本体は起動しません。これは典型的なセキュアブートチェーンで、ARM TrustZoneやIntelのBoot Guardが提供しているものと似ています。
ハイパーバイザーは、OSより上位の特権レベルで動作する独自ソフトウェアです。メモリの分離を強制し、ハードウェアへのアクセスを制御し、OSが重要なシステム状態を書き換えるのを防ぎます。ゲームやアプリは、互いのメモリを見ることも変更することもできない仮想マシン上で動作します。Xbox OSでカーネルの脆弱性を見つけても、ハイパーバイザーのサンドボックスの中に閉じ込められたままなのです。
さらに、本体のストレージは、ハードウェアのセキュリティプロセッサから導出された鍵で暗号化されています。ハードディスクを抜き取って別のマシンで読み取っても、有用なものは何も取り出せません。暗号鍵は特定のハードウェアに紐づいています。これはデバイス固有シーリングと呼ばれる設計で、TPMやAppleのSecure Enclaveでも使われています。
防御が崩れたポイント
あらゆるセキュリティシステムには前提があります。Xboxの前提はどれも妥当なものでした。ハードウェアのルートオブトラストは不変であり、暗号が堅牢なのでブートチェーンは破れず、ハイパーバイザーは小規模で監査済みのコードベースなので悪用可能なバグはない、という具合です。前提はどれも個別には擁護できます。問題は、セキュリティの連鎖は最も弱い環で破られるということ、そしてその弱い環を見つけるにはブルートフォースではなく創造性が必要だということです。
Blissのエクスプロイトは、暗号(AESやRSAは問題ありません)を攻撃したわけでも、ルートオブトラストのROMのバグを見つけたわけでも(非常に小さく、十分に監査されています)、鍵をブルートフォースしたわけでもありません。代わりに、セキュリティドメインどうしの境界、つまり信頼された世界と信頼されない世界が通信する狭い経路を悪用しました。
ハードウェアセキュリティモデルは、信頼レベルの境界での攻撃対象領域が最小のときに最も強くなります。しかし「最小」はゼロではありません。ハイパーバイザーは、ゲストOSに何らかのインターフェースを公開しなければなりません。メモリ管理、デバイスアクセス、VM間通信のためのシステムコールなどです。これらのインターフェースはそれぞれ攻撃経路になり得ます。Blissチームは、特定のパラメータで特定の順序で呼び出されたときに、ハイパーバイザーの内部状態を壊し、コードの実行先を書き換えられるハイパーバイザー呼び出しの系列を見つけました。
より広いパターン
Xboxのハックは、ハードウェアセキュリティで繰り返し現れるパターンに従っています。初期のセキュリティ設計は健全で、実装も丁寧なのに、セキュリティドメインどうしのインターフェースに、敵対的な使われ方をして初めて表面化する微妙なバグが潜んでいるのです。
- PS3のハック(2010年)は、ソニーのECDSA署名生成における致命的な実装ミスを突きました。署名のたびに新しい乱数を使うべきところを固定値を使っていたため、秘密鍵が漏洩したのです。数学は正しかった。実装が正しくなかったのです。
- Nintendo Switchのハック(2018年)は、NVIDIAのTegraブートROMのバグを突きました。USBリカバリーモードがバッファをオーバーフローさせるペイロードを受け入れてしまい、ソフトウェアのセキュリティチェックが動く前にコード実行を許してしまったのです。ブートチェーンは良く設計されていました。しかしリカバリーモードは脅威モデルに含まれていなかったのです。
- Intel SGXへの攻撃は、アーキテクチャ的には正しい分離モデルであっても、サイドチャネル(SpectreやMeltdown、その多数の亜種)によって安全なエンクレーブからデータが漏れ得ることを繰り返し示してきました。論理は正しい。マイクロアーキテクチャが情報を漏らしているのです。
パターンはこうです。設計者はセキュリティモデルを一つの抽象レベル(暗号プロトコル、分離境界、信頼の階層)で考えますが、攻撃者は別のレベル(実装上のクセ、マイクロアーキテクチャのサイドエフェクト、インターフェースのエッジケース)で動きます。モデルは正しい。しかし実装には、モデルが想定していなかった隙間があるのです。
なぜ「ハッキング不可能」は常に間違いなのか
何かを「ハッキング不可能」と呼ぶのは、自信の表れではなく危険信号です。それは、設計者があらゆる攻撃を列挙し、そのすべてに対する防御を完了したと信じていることを意味します。しかしセキュリティの歴史は、防御が設計された時点では存在しなかった攻撃カテゴリの積み重ねなのです。
Xbox Oneが2013年に出荷されたとき、SpectreとMeltdownはまだ発見されていませんでした。Rowhammerは理論上のものでした。最新SoCに対する電圧グリッチ攻撃もよく理解されていませんでした。設計者たちは、まだ発明されていない攻撃を防ぐことはできません。そして、当時は想定されていても非現実的だった攻撃の一部は、ツールや技術の向上とともに実現可能になっていったのです。
優れたセキュリティエンジニアリングは、完全な不浸透性を主張しません。侵害は起きるものだと認め、検知、封じ込め、復旧を前提に設計します。成熟したセキュリティ思考と未熟なそれとの違いは、「どうすればこれを破られないようにできるか?」と問うか、「これが破られたらどうなるか?」と問うかの違いなのです。
ソフトウェア開発者にとっての示唆
コンソールのセキュリティアーキテクチャを設計する開発者は多くないでしょうが、教訓は広く当てはまります。
信頼境界をまたぐインターフェースこそ、最もリスクの高いコードです。バックエンドと公開インターネットの境界、アプリケーションとサードパーティ製プラグインの境界、データベースとユーザー入力のクエリの境界などがそれに当たります。実際に問題になるバグの多くはここにあります。SQLインジェクションはSQLやデータベースのバグではなく、信頼された領域(クエリのロジック)と信頼されない領域(ユーザー入力)の境界で生じるバグです。セキュリティへの注力は、こうした境界に向けてください。
多層防御はオプションではありません。Xboxには、ハードウェアのルートオブトラスト、セキュアブート、ハイパーバイザーによる分離、ストレージ暗号化という複数の層がありました。一つの層を破っただけでは不十分で、攻撃者は完全な制御を得るために複数のエクスプロイトを連鎖させる必要がありました。もしシステムが単一のセキュリティ境界に頼っていたなら、最初のエクスプロイトでゲームオーバーだったでしょう。
脅威モデルは必ず古くなります。設計が杜撰だからではなく、脅威の状況が変わるからです。権限昇格の歴史には、防御が設計された時点では考えられなかった攻撃が数多くあります。再設計なしに更新、パッチ適用、強化ができるシステムを作ってください。今日の「不可能な」攻撃は、明日のCVEになるものと考えてください。
オープンなセキュリティの逆説
コンソールのセキュリティは秘匿の上に成り立っています。独自ハードウェア、非公開のハイパーバイザー、暗号化されたファームウェアです。これは「隠蔽によるセキュリティ」であり、セキュリティコミュニティは一般に弱いアプローチと見なしています。しかし、オープンソースのセキュリティハードウェアという代替手段にも問題があります。攻撃者が正確な実装を好きなだけ調べ、じっくり脆弱性を探せてしまうのです。
現実的な答えは、どちらのアプローチも最終的には破られるということです。クローズドなシステムはリバースエンジニアリングされます(今回のXboxのハックがそれを証明しています)。オープンなシステムは研究され、攻撃されます(Linuxカーネルの絶え間ないCVEの流れがそれを証明しています)。違いは、オープンなシステムでは防御側も攻撃側と同じ可視性を持つため、より速く修正される点です。Xboxの脆弱性は、詳細が何であれ、セキュリティモデルが現場では変更できないハードウェアに組み込まれているため、パッチが難しくなるでしょう。
更新が可能なソフトウェアシステムにとって、これは独自の実装よりもオープンで十分に監査されたセキュリティ実装を強く支持する根拠になります。オープンだから攻撃されにくいからではなく、避けられない攻撃が成功したときに修正しやすいからです。
その先に何があるか
Xboxのハックでコンソールのセキュリティが終わるわけではありません。Microsoftはエクスプロイトを分析し、ソフトウェアで修正できる部分にはパッチを当て、次世代ハードウェアではこの種の脆弱性を塞ぐように設計するでしょう。攻撃者はまた別のものを見つけるはずです。これがサイクルです。防御と攻撃は共に進化し、各世代のセキュリティは前世代の失敗から学んだ教訓を取り込んでいきます。
ここから得られる実用的な教訓は、ハードウェアセキュリティは無意味だということではありません。ハードウェアセキュリティは二値ではなく、連続的なスペクトラムだということです。Xboxのセキュリティは、ハックを劇的に難しくしました。ハックには10年以上かかったのです。完璧ではなくても、これは大きな成功です。目指すべきは「ハッキング不可能なシステム」ではなく、保護すべき期間を通じて、攻撃のコストが標的の価値を上回り続けるシステムです。その基準で見れば、Xbox Oneのセキュリティは驚くほど効果的でした。ただ、無限ではなかっただけなのです。


