2012-03-03

ハードウェアの信用

The Invisible Things Lab's blog: Trusting Hardware

少々古いが、面白かったので紹介する。

なるほど、君はパラノイアにとりつかれているんだね。自分のマシンでは、LinuxとかGNUとかのオープンソースなソフトウェアしか走らせたくないってわけね。やろうと思えば、全ソースコードを自分の目で検証可能だって安心してるわけか(実際やらないんだろうけどさ)。パラノイア病がもっと進行してきて、オープンソースなBIOSとかにまで手を出し始めちゃった。バカな奴らがWindowsみたいなクローズドソースのシステム使ってるなんて訳がわからないよ。とまあ、こう満足してるわけだよね。

でーも、所詮そこまでなんだよね、君は。だってまだハードウェアを信用しなきゃならないでしょ。ハードウェアベンダーが、ネットワークカードのマイクロコントローラーにバックドアを仕込んでないことを信用しなきゃならないでしょ。

某ベンダーからノートパソコンを買いました。そのベンダーは完全に民主主義というわけでもない国の企業です。バックドア仕込まれてないなんて、そんなのまさかね。アメリカ人のみならず、自国民までスパイするような国がだよ。ところで君、マザボに載ってるPCIデバイスを全部解析したことってあるの?

怖くなってきたでしょ。

そこでこのIOMMU(Intelの名称ではVT-d)の出番。OSとVMMを対応させれば、この技術はほとんどのハードウェアのバックドアの問題に対処できちゃいます。たとえばこのVT-dをサポートしたXen 3.3なら、ドライバーを権限の少ないドライバー専用の枠組みに隔離できちゃいます。そのため、PCIデバイスのDMAはドライバーに割り当てられたメモリ領域のみに制限できちゃうんです。

ネットワークカードのマイクロコントローラーは、依然としてネットワークカードドライバーとお話できちゃうけど、所詮そこまで。通信を常に暗号化しておけば、ネットワークカードドライバーができることは、DoSぐらいしかありません。ディスクドライバーにしたって、ディスクを完全に暗号化して使えば(もちろん、これは当然だよね)、低級層のディスクドライバーからできることはあんまりないってわけ。

そういうシステムを、特に、デスクトップ用途に設計するのは、簡単じゃないし、よくよく注意が必要だけど、でも今や、技術的にできちゃうんです。新しい仮想化技術のたまものですね。

これで、悪意ある可能性のあるハードウェアから身を守れるわけだけど・・・でもまだ、ひとつだけ信用しなくちゃならないものがあるんです。IOMMUを実装しているCPUとメモリーコントローラー(またの名をノースブリッジ、またの名をチップセット)だけは信用しなくちゃならないんです。

AMDシステムでは、メモリーコントローラーはとっくの昔にプロセッサー側に統合されちゃったよね。Intelも最近のNehalemプロセッサーで、メモリーコントローラーを同じダイ上に載せちゃった。

つまりこれで、信用しないといけないのは、ひとつのベンダー(IntelかAMD)と、ひとつの部品、つまりプロセッサーだけってことになるよね。でも、本当に信用しちゃっていいのかな? IntelやAMDにとって、自社製品のプロセッサーにバックドアを仕込むなんて朝飯前だよね。例えばこんな簡単なのでも、

if (rax == MAGIC_1 && rcx == MAGIC_2) jmp [rbx]

CPUにほんのちょっとゲート追加すればいいだけでしょ、たぶん。Core i7には7.8o億ものゲートがあるんだから、ほんの少し付け足してもそんなに変わらないよね。パフォーマンスにも影響しないよね。どんなシステムやプログラムからでも利用できちゃうのに、電子顕微鏡と正しいスキルと知識がないと調べることができないってわけ。

こんなのはアタシがちょっと数分ほどかけて考えただけだから、もっと簡単で利用しやすい方法はきっとあるはずよね。つまり、CPUベンダーだったら、バックドア仕込むなんて簡単なの。

おかしいよねコレ。欧州政府機関とかは、Windowsみたいなクローズドソースなソフトウェアを使いたがらないらしいじゃない。Microsoftがバックドア仕込んでいるかもしれないって理由で。でも、アメリカ合衆国の会社が作ったプロセッサーを使うのは特に問題にしてないよね。だいたい、Microsoftがバックドア仕込むのなんてリスクありすぎじゃない。ちょっとスキルある坊やがIDA Pro使えば見つけられるんだもん。でも、IntelとかAMDの場合、誰も見つけれないよ。

だからさ、将来、米国外の政府や大企業とかが、IntelやAMDにプロセッサーの設計図を要求するようになっててもおかしくないよね。もうすでにMicrosoftにはNDA結んでソースコード見せてもらってるんでしょ。でしょ? なんでプロセッサーの「ソースコード」には開示要求しないの?

でも、プロセッサーベンダーは客相手には、実際のプロセッサーに焼きこむのとは別の設計図を渡すことができちゃうよね。だから、製造過程を検証できる必要があるよね。例えばさ、独立した研究者グループを雇って、電子顕微鏡で無作為に抜き出したプロセッサーを検査させたりとかさ。そういうこと喜んでやる人達、アタシは知ってたりするよ。

ここまでの話についてこれなかった人達のためにまとめると、

  1. ほとんどのシステムはハードウェアのバックドアへの対策がない。例えばネットワークカードのコントローラーとか。
  2. Intel VT-dのような新技術は、特別に設計されたOSたとえば、Xenを使えば、悪意ある可能性のあるハードウェアを防御できる。
  3. ただしプロセッサーのバックドアをのぞく
  4. Microsoftを信用出来ないなら、なんでIntelとかAMDは信用できるの?

著者はJoanna Rutkowska。2006年のBlack Hatカンファレンスで頭角を現したホットな女ハッカー。今は、セキュリティを高めたLinux系のシステム、Qubesを開発している。仮想化技術とプロセス分離によって、OpenGL以外はセキュアな環境なんだとか。

続き:The Invisible Things Lab's blog: More Thoughts on CPU backdoors

補足:誰も続きを読まずにtweetしているようなので、続きからの抄訳。

すでに同じ事を考えて、自分で実装を試みた者がいる。Loic Duflotは、QEMU(残念ながら、彼は個人用プロセッサー製造ラインを持っていないのだ)を改造してそのようなCPUの可能性を探った。

まず、CPUにバックドアを仕込んでも、競合他社によって発見されるだろうというのは、現実的ではない。なぜなら、競合他社が手に入れられるのは設計図ではなく製品である。カバーを剥ぎ取り回路を電子顕微鏡で撮影するところから始めないといけない。そして何億ものゲートを検証する。そんなのは労力的に不可能である。同等の製品を作っているのだから解析ぐらいできるだろうと考えるのは素人である。たとえソースコードが提供されていたとしても、すべてを検証する労力は現実的ではない。「Adobeは巨大なソフトウェアを開発する能力があるからして、同等規模のソフトウェアを解析する能力もある」と考えるくらい馬鹿げている。

そして、プロセッサー内にバックドアを仕込んだとしても、外部からの観察はどうしようもない。たとえば、サーバーならば当然、ネットワークを監視する、プロセッサとは独立した装置を使っているだろう。たとえバックドア付きプロセッサが、そのプロセッサ上からは悪意あるコードが実行されてことを隠し通せたとしても、外からの観測にはどうしようもない。もし大規模に使われているプロセッサーであれば、サーバーの管理者の誰か一人ぐらいは、なぜか本来ありえない場所と通信している記録に気がつくだろう。そして検証の結果、各レジスタの値があるマジックナンバーであれば、特権命令を実行できるなどといった挙動、すなわちバックドアのトリガー条件に気がつくであろう。当然、その発見は直ちに公になる。

これを隠すためには、バックドアのトリガー条件を、よほど賢く仕込まなければならない。同じ条件では二度と発動しないような仕組みが必要だ。例えば、プロセッサーがEEPROMを搭載していて、トリガーの発動ごとに値をインクリメントしていくような仕組みであれば、容易にトリガーを発見することはできないはずだ。したがって、EEPROMを搭載しているプロセッサーは怪しい。とはいえ、やはり難しい。

もちろん、このような原始的な研究は、すでにIntelやAMDはとっくの昔に通過したものなのかもしれない。つまり、彼らはもっと画期的に発見されないバックドア技術を完成させているかもしれない。ひょっとしたら、彼らはこれを読んで、笑っているかもしれない。まあ、実際どうなのかは分かりようがない。バカの考え休むに似たり。

No comments: