【レポート】

Hyper-Threadingの脆弱性 - そのメカニズムとは?

3 脆弱性を利用した攻撃は困難だが…

    米田聡  [2005/05/17]

    1つのCPU内部で併走するプロセス同士で、互いの情報を盗むことができる……といっても、ここまでの解説で分かるように、データが直接に覗き見れるわけではない。キャッシュのアクセス速度のパターン変化から「併走するプロセスが何をやっているのか推定できる程度」の情報しか得られないと言っていい。

    デモコードで利用されたOpenSSLは、デジタル署名の処理プロセスにおいて、どのような演算が繰り返されるのかが明確に分かっている。そのおかげで、キャッシュのアクセス速度の変化から処理内容が推測できた。仮に併走するプロセスが、まったく未知のコードなら、この脆弱性を使っての解析はまず不可能だ。

    さらに、論文では綺麗なアクセス速度の変化が得られているが、現実に(脆弱性としてクラッカーに利用されうる程度に)これほど綺麗な(分かりやすい)パターンが得られるかどうかは分からない。脆弱性が実際に突かれる可能性があるかを判断するには、さらなる追試が必要と思われる。

    個人的には、併走するコードの内容が詳細に分かっていること、キャッシュのアクセス速度を測るプロセスをクラック対象のプロセスと併走させなければならないこと……など、この脆弱性を現実の攻撃に結びつけるには多くの制約があると考えている。だが、Hyper-Threadingの今後に与える影響は小さくないだろう。

    Colin Precival氏の論文は、OpenSSLのデジタル著名プロセスと併走する別プロセスから非公開鍵を解くヒントを盗み出す具体例を示した。たとえば、SSLを利用しているサーバー上に一般ユーザーアカウントでログインし、キャッシュの速度をモニターし続けることで、他のアカウントで動作するSSLのプロセスの動きを調べ、非公開鍵を盗むことができる「かもしれない」ことを意味する。これはサーバー管理者にとっては無視できない問題だろう。

    しかも(ここまでの説明でもある程度は想像が付くと思うが)今回示された脆弱性はHyper-Threadingの仕組みの根本に関わっている。Hyper-Threadingは1つのCPUの内部リソースを、2つのプロセスで共有する仕組みであり、他方のプロセスが一方のプロセスの実行に多かれ少なかれ影響を与えるのは抑えられないと考えられるからだ。

    したがって、対策も非常に難しい。ニュースソースとなったFreeBSDでは「Hyper-Threadingを止めてしまう」という強行手段で脆弱性に対応したが、根本的な対策とは言えないだろう(確かにHyper-Threadingを止めれば脆弱性が突かれることはないが……)。

    根本的な対策としては、OSのスケジューラー(プロセスの起動と実行を管理する部分)に手を加え、プロセス内部から起動されたスレッドでしか、2つの論理CPUは使わせないよう制限する方法が考えられる。

    しかし、この対策が実行されると、Hyper-Threadingは単純なマルチプロセス環境では、まったく効果がない結果になってしまう。Hyper-Threadingは(名前の通り)マルチスレッド化されたソフトウェアにのみ高速化の恩恵があるという、実に限定されたテクノロジーになってしまうのだ。これはインテルにとっては大きな痛手になるだろう。

    なお、インテルは脆弱性を把握しており、すでにOSベンダーに対策を要請したという情報もあるが、各OSがどう対応してくるかは現段階では予測できない。しかし、根本的な対策が難しい上、対策コードがOSカーネルに実装されるまでには時間がかかると思われる。非常に重要なサーバー(決済サーバー等)では、OSの対策が出そろう以前にHyper-Threadingを停止する(一般にBIOS設定で停止できる)などの対応を行った方が良いかもしれない。

    なお、SMP(一般的なマルチプロセッサ)にも同種の脆弱性があり得ると示唆されているが、多くのSMPシステムではCPUがキャッシュを共有しないために、論文で示されたほど明確なキャッシュの速度差のパターンは得られないと考えられる。したがって、SMPシステムはまず問題ないと考えて良さそうだ。

    一般のPCユーザーへの影響はほとんどあり得ない

    ところで、この脆弱性は一般のPCユーザーに何らかの影響を与えるだろうか? 結論から言うと、ほとんど何の影響もないと考えて構わない。

    この脆弱性を利用して攻撃するためには、キャッシュのアクセス速度の変化を解析するコードを侵入させる必要があるが、一般にPC(一人で使うパーソナルコンピュータ)が侵入を受ける場合、使用者のユーザーアカウントが乗っ取られるのが普通だ。使用者のユーザーアカウントなら、使用者の持つ情報のすべてが取得できるので、何もキャッシュを覗き見るような面倒な手法を使う必要はないのである。

    この脆弱性は、別のユーザーアカウントでSSLなど重要なプロセスが走っており、ログインしたアカウントでは重要な情報へのアクセス権がない、というケースで利用できるだけで、その他のケースに利用できるものではないと考えていいだろう。

    Windows XPでも、IISを利用してWebサービスを行い、SSLなどを動作させているような一種のサーバーとして利用していれば今回の脆弱性が無関係ではなくなるが、そうでない限りは何ら気にする必要はなく、今まで通りHyper-Threadingをオンにして使い続けても、安全が脅かされることはないと考えて欲しい。

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      マイナビニュースマガジン