Trusted Boot って何?

Trusted Computing な ぜ な に シリーズ その2

TPMを利用して、ソフトウェアの改竄検出を実現する手法を、Trusted Boot と呼びます。
これは、RootKitなどの厄介なマルウェアに対する本質的な対策として利用することが可能ですが、
残念ながら、あまり活用されていません。
Trusted Boot の現場について、ここに(ちょっと)まとめておきます。

  • どこで使われているの?

広く利用可能な商用製品では、マイクロソフトのBitLockerがあります。
これはHDDの暗号化とTrusted Bootを組み合わせたもので、正しい手順で起動した場合にのみに暗号化されたHDDが利用可能になります。正しい手順とは、「設定時と同じハードウェア(TPM)上で、同じ BIOS、Bootloaderを経由して起動する」になります。HDDが盗まれても暗号を解くことはできません(AESの解読するというBruteForceは可能)。

WindowsではEFSとよばれる、暗号化ファイルシステムがありますが、この鍵は結局のところHDD上に保存されており、BitLockerではHDDの暗号鍵は、Offline時にはTPMRSA鍵で保護されています。BitLockerはHDD鍵をメモリ上に保持するので、起動中にDRAMに対するColdAtackを行うと鍵が読めてしまいます。サスペンド状態で盗まれると危険ですので、NotePCは電源OFFかハイバネーション状態で持ち歩きましょう。

  • Secure Bootとは違うの?

Trusted Bootでは計測したハッシュ値を記録するだけ、
Secure Bootではハッシュ値が期待値かどうか確認し、異なる場合には起動を取りやめる。
両者はどのタイミングで計測のチェックをするかが違う。

  • 正当性は検証できるのか?

残念ながら、PCの場合、BIOSの計測に関する期待値をPCベンダーは公開していないので、得られた計測値からBIOSコードの正当性は検証できない。ただ、最初に計測した値に変更(改竄)が無いことの確認はこの仕組みで可能。

  • CRTMはTPMが計測するの?

NO。
CRTMとはCore Root of Trust Measurementの略で、一番最初に起動する起動コードのこと。TPMにはコードの計測を行う機能は無いため、最初に起動するCRTMは自身の計測を行う必要がある。このCRTMが改竄されると困るので、CRTMは物理的な書き込み保護機能で守られている。逆に、CRTMへの物理攻撃が成功すればTrusted(Secure) Bootを無効化することが可能。したがってPCプラットフォームでは、TPMチップとBIOSの一部であるCRTMがToot Of Trustを構成する。

  • Static CRTM とDynamic CRTMの違いは?

Dynamic CRTMはTPM v1.2と対応したCPU、チップセットにより、CRTMを実現する。IntelAMDの仮想化機能対応Platformで利用可能。特別なCPU命令を発行することで、CPUとチップセットが起動コードを計測する。これにより、仮想マシンモニタをTrusted Bootを使い検証可能な状態にすることができる。
これに対し、従来のBIOSによる起動シーケンスで利用するCRTMをStatic CRTM と呼ぶ。

  • 起動コードのセキュリティは?

起動コードは起動後のランタイムでは不要なため、あまり注意が払われていない。

  • PCRは安全?

PCRとはPlatform Configulation Registerの略で、TPM内の揮発レジスタCMOS)で160BITのレジスタが24個ある。このレジスタに計測したSWのハッシュ値を記録する。PCRは起動時にゼロリセットされ、その後、Extendと呼ばれる命令でしか更新できない。Extend命令では PCR=SHA1(PCR + Digest) とPCRが更新される。したがって、利用しているハッシュ関数SHA1の安全性がPCRの安全性となる。SHA1の強度は低下してきており、新しいハッシュ関数に対応したTPMの新しい仕様がTCGで検討中である。

  • PCRのリセット攻撃は?

TPMチップのリセットピンに細工すれば、可能になる。TPMチップはTSOPと呼ばれるパッケージなので、この細工は比較的容易に実現できる。こうした物理攻撃には弱いが、TPMチップにはセンサー入力もあり、ケースの開封を検出し記録することも可能、いずれにせよセキュリティ強度は物理的な実装に依存する。

TPM Reset Attack(ビデオもあり)
http://www.cs.dartmouth.edu/~pkilab/sparks/

  • 電源管理との関係は?

PCの場合、サスペンド状態では、PCRの値は変化しない。TPMチップへの電源が切れる、ハイバネーションでは、PCRの値は一旦リセットされることになる。BIOSやBootloaderの起動シーケンスはハイバネーションからの復帰でも変化しないので、PCR値は変化しない。たとえば、BitLockerでは問題はない。これに対し、LinuxのIMAはユーザーランドの再計測は行わないため、PCR値が破壊されることになる。電源管理との関係は、PCRの値管理の悩ましい部分である。

  • イベントログは必要?

PCRへのExtend命令発行のログをイベントログもしくは、IML(Integrity Measurement Log)と呼びます。
起動シーケンスが同じであれば、PCRの値の期待値をもって稼働しているソフトウェアを判定する事が可能ですが、実際は、ソフトウェアの起動順序、つまり計測順序は異なる場合があります。こうした場合は、計測のログを保持し、そのログの正当性をPCRで確認します。PCの場合、CRTMからBootloaderまでの計測結果はBIOSのACPIテーブルに保存されています。OS以降は実装依存ですが、Linux-IMAではKernelで保持しています。これらのイベントログにはTSSでアクセスできます。(LinuxではSecuriyfsからもアクセス可能です)

  • PCRの使い方やイベントログは標準化されているの?

YES.
PCプラットフォームに関してはTCGで仕様が定められています。
ただ、実際の実装にはばらつきがあったりするので、注意が必要です。