GCP のセキュリティ : “信頼の基点” としての Titan
Google Cloud Japan Team
コンピュータ セキュリティに絶対はありませんが、それに少しでも近づけるよう、私たち Google はお客様のコードとデータを守ることを目標として Google Cloud Platform(GCP)を設計、構築、運用しています。
私たちは多階層でアーキテクチャをハードニングしており、その中にはデータセンターの物理的なセキュリティとサービスのほか、Google が設計したハードウェア、Google が管理するファームウェア スタック、Google が調整した OS イメージ、Google がハードニングしたハイパーバイザなどが含まれます。
この投稿では、カスタム チップの Titan を使ってハードウェア ベースの “信頼の基点”(Root of Trust)を確立する仕組みについて詳しく説明します。
Titan は、Google のセキュリティ要件とシナリオを念頭に置いて設計されたセキュアで消費電力が少ないマイクロコントローラで、Google Cloud Next '17 で初めて公開されました。ここでは、Google データセンター内の暗号化処理においてハードウェア ベースの信頼の基点を確立し、検証可能なコードによってマシンが既知の正常な状態からブートされることを保証するために、Titan がどのように機能しているのかを見ていきましょう。
基本的なブートの流れ
Google データセンターのマシンは、現代のほとんどのコンピュータと同様に、1 つ以上の CPU、RAM、ベースボード管理コントローラ(BMC)、NIC、ブート ファームウェア、ブート ファームウェアのフラッシュ、永続ストレージなど複数のコンポーネントから構成されています。これらのコンポーネントのブート時のやり取りは以下のとおりです。- マシンのハードウェアを管理する BMC が CPU のリセット状態を解除すると、ブート プロセスが始まります。
- CPU はブート ファームウェアのフラッシュから基本ファームウェア(Boot または UEFI)をロードし、これがハードウェア / ソフトウェアの構成、設定の続きを行います。
- マシンの構成が十分に進むと、ブート ファームウェアはマシンの永続ストレージの “ブート セクタ” にアクセスし、“ブート ローダ” と呼ばれる特別なプログラムをシステム メモリにロードします。
- ブート ファームウェアは実行制御をブート ローダに譲り、ブート ローダは永続ストレージからシステム メモリに初期 OS イメージをロードして、実行制御をオペレーティング システムに譲ります。
Google のデータセンターではブート プロセスをセキュア ブートで保護しています。Google のマシンは既知のファームウェア / ソフトウェア スタックをブートし、このスタックを暗号により検証して、その検証結果に基づいてネットワーク上のリソースへのアクセスを獲得します(あるいは獲得に失敗します)。Titan はこのプロセスに組み込まれ、追加の保護レイヤを提供します。
特権を持つソフトウェアへの攻撃が増え、ルートキットに関する新たな研究が次々に発表されるなかで、私たちはハードウェア ベースの信頼の基点を確立し、Google Cloud のワークロードをホスティングするインフラストラクチャのマシンをセキュアにブートすることに力を注いでいます。
Titan によるセキュアなブート
一般に、セキュアなブートは、認証されたブート ファームウェアとブート ローダ、電子署名されたブート ファイルの組み合わせによってセキュリティを保証しています。さらに、セキュアなエレメントは秘密鍵のストレージと管理機能を提供できます。Titan は、これらの要件を満たすとともに、さらにその上を行く 2 つの重要なセキュリティ機能(修復、第 1 命令の完全性)を提供します。Titan ファームウェアのバグが見つかりパッチが当てられたときは、修復機能によって信頼性が改めて確立されます。また、第 1 命令の完全性の確保により、各マシンの起動サイクルで実行されるコードの身元を確認できます。
こうしたセキュリティ機能を実現するため、Titan はセキュアなアプリケーション プロセッサ、暗号コプロセッサ、ハードウェア乱数生成器、高度なキー階層、組み込み SRAM、組み込みフラッシュ、読み出し専用メモリ ブロックといったコンポーネントを組み込んでいます。
Titan は、SPI(Serial Peripheral Interface)バスを介してメイン CPU と通信し、BMC や PCH(Platform Controller Hub)といった特権コンポーネントのブート ファームウェア フラッシュと CPU の間に介在して、ブート ファームウェアを隅から隅まで監視できるようにしています。
Titan のアプリケーション プロセッサは、ホスト マシンに電源が入れられると、直ちに読み出し専用の組み込みメモリのコードを実行します。ブート ROM と呼ばれる変更不能コードが製造時に埋め込まれており、ブート ROM は暗黙のうちに信頼され、チップのリセット時に検証されます。Titan はブートのたびに、すべてのメモリ(ROM を含む)が改竄されていないことを確認するメモリ組み込みの自己テストを実行します。
次に、Titan のファームウェアをロードします。このファームウェアはチップ上のフラッシュに組み込まれていますが、Titan のブート ROM は手放しでそれを信頼してしまうわけではありません。ブート ROM は、公開鍵暗号を使って Titan のファームウェアを検証し、確認したコードの ID 情報を Titan のキー階層に融合します。こうしたチェックを経て、ブート ROM は検証済みのファームウェアをロードするのです。
自身のファームウェアのブートがセキュアに行われると、Titan はホストのブート ファームウェア フラッシュに関心の対象を移し、同じく公開鍵暗号を使ってその内容を検証します。Titan は、フラッシュの内容を確認するまでの間、PCH / BMC からブート ファームウェアへのアクセスを禁止にします。フラッシュの内容を確認できたら、マシンのその他の部分をリセット状態から解放できることを知らせる信号を送ります。
Titan が暗号を使ってブート ファームウェアを確認している間はマシンをリセット状態に保てるため、どのブート ファームウェアと OS がマシンをブートしたかが第 1 命令から把握でき、第 1 命令の完全性が確保できます。ブート ファームウェアの第 1 命令を実行する前に、どのマイクロコード パッチがフェッチされたかを知ることさえ可能になります。
最後に、Google にチェックされたブート ファームウェアがマシンを構成してブート ローダをロードし、それがオペレーティング システムを検証してロードします。
Titan を使った身元確認
私たちは、セキュアなブートを実現するだけでなく、Titan をベースとするエンド ツー エンドの暗号化 ID(身元情報)システムも開発しました。これは、私たちのデータセンターで行われるさまざまな暗号化処理の信頼の基点となるものです。Titan チップの製造過程では、チップごとに一意なキーイング要素が生成され、来歴情報とともにレジストリ データベースにセキュアに格納されます。このデータベースの内容は、オフラインのクォーラムによる Titan Certification Authority(CA)が管理するキーを使って暗号化され、保護されています。個々の Titan チップは、Titan CA に対する証明書署名要求(CSR)を生成することができます。Titan CA は、Titan ID 管理者グループの監督下で、レジストリ データベース内の情報を使って CSR の信憑性を検証してから ID 証明書を発行します。
この Titan ベースの ID システムは、CSR を発行したチップの来歴を確認するだけでなく、チップ上で実行されているファームウェアの検証も行います。オンチップのキー階層にファームウェアのコード ID のハッシュが含まれているためです。これによって修復が可能になり、Titan ファームウェアのバグをフィックスして、パッチを当てた Titan チップだけが使用できるイシュー証明書を発行できます。また、この ID システムにより、バックエンド システムは、個々の Titan 搭載マシンの秘密情報と秘密鍵、あるいは Titan 搭載マシンで実行されるジョブをプロビジョニングすることも可能です。
Titan ではきわめて重要な監査ログに封をして署名するため、ログが不正改竄されたときにはすぐにわかります。この不正改竄防止機能は、ログ メッセージと、Titan が管理するセキュアなモノトニック カウンタの連続する値を暗号とともに対応づけ、その対応関係に秘密鍵で署名するという形で実現されます。ログ メッセージとモノトニック カウンタの対応づけにより、たとえそのマシンへのルート アクセス権を持つ社内の人間であっても、監査ログを書き換えたり削除したりした場合は必ずばれてしまうでしょう。
まとめ
私たちの目標は、筋書きどおりに動作するよう明示的に設計された専用のエンティティを使ってブート プロセスを保護することです。Titan は、システム ファームウェアやソフトウェア コンポーネントの検証を可能にする信頼の基点を提供するとともに、ハードウェア ベースの強固な身元確認の仕組みを確立しています。Google は、ハードウェアにバックドアが作られる機会を潰すため、社内で Titan のハードウェア ロジックを設計しています。Titan エコシステムは、権限を与えられ、検証が可能なコードによって、本番インフラストラクチャのセキュアなブートを保証しています。
以下は要約です。
- Titan はハードウェア ベースの信頼の基点となり、マシンの身元情報を強力にチェックする仕組みを提供します。これを使えば、重要なセキュリティ判断を下したり、システムの健全性を検証したりすることができます。
- Titan により、ファームウェアとソフトウェア コンポーネントの完全性を検証できます。
- システムが強固な身元情報を持っているため、システムに加えられた変更を確実に記録する監査ログを作ることができます。このような不正改竄防止ログ機能は、ルート アクセスの権限を持つ社内の人間を監視することにも役立ちます。
Google インフラストラクチャのセキュリティについては、こちらのページをご覧ください。
* この投稿は米国時間 8 月 24 日、Uday Savagaonkar(Technical Lead Manager)、Nelly Porter(Senior Product Manager)、Nadim Taha(Software Lead)、Benjamin Serebrin(Tech Lead)、および Neal Mueller(Product Marketing Lead)によって投稿されたもの(投稿はこちら)の抄訳です。
- By Uday Savagaonkar, Technical Lead Manager, Nelly Porter, Senior Product Manager, Nadim Taha, Software Lead, Benjamin Serebrin, Tech Lead and Neal Mueller, Product Marketing Lead