更新されたIntel は、現時点では、マルウェアがアプリケーションから暗号化キーやその他の機密情報を抽出するために悪用される可能性のあるプロセッサのサイドチャネル脆弱性に具体的に対処する予定はありません。
オランダのアムステルダム自由大学のシステムおよびネットワークセキュリティグループの研究者チームは、Intel Skylake Core i7-6700KデスクトップCPUでのテストの99.8%、Intel Broadwell Xeon E5-2620 v4サーバーCPUでのテストの98.2%、Coffeelakeパーツでのテストの99.8%で、セキュリティの弱点を突いて実行中の別のプログラムから暗号キーを抽出できたと述べている。
彼らのコードは、libgcryptのCurve 25519 EdDSA実装を用いた署名操作中に、別のプログラムからデータの暗号署名に使用される256ビットの秘密鍵を盗み出すことに成功した。The Registerが今週閲覧したこの攻撃の詳細を記した論文によると、機械学習ソフトウェアと総当たり攻撃を用いて各鍵を特定するのに約17秒かかったという。
「エンドツーエンドの攻撃時間は、2ミリ秒のキャプチャ時間、訓練された分類器による17秒間の信号分析、そして平均作業係数2 13でほんの一瞬しかかからないさまざまな量のブルートフォース推測で構成されています」と、ベン・グラス、カヴェ・ラザヴィ、ハーバート・ボス、クリスティアーノ・ジュフリーダのチームは論文で述べています。
この抽出手法は投機的実行に依存していないため、SpectreやMeltdownとは無関係です。Intelのハイパースレッディング技術とプロセッサキャッシュを悪用してデータを漏洩させる手法であり、これは既知のセキュリティ問題であり、独自の緩和策も存在します。
TLBleed
この手法は、CPUのTLB(Translation Lookaside Buffer、キャッシュの一種)を標的とするため、「TLBleed」と呼ばれています。VUアムステルダムの研究者によると、TLBleedと従来のキャッシュベースの攻撃の違いは、メモリキャッシュにおけるサイドチャネルスヌーピングを阻止する保護対策が、TLBスパイ行為をブロックすることを保証していない点です。
より技術的な話に入る前に、これは世界の終わりではないことを強調しておきます。なぜなら、まず、これを悪用するには、システム上でマルウェアが実行されているか、悪意のあるユーザーがログインしている必要があるからです。次に、現時点では誰もこの脆弱性を悪用していません。ハッカーがブラウザ、PDFリーダー、メールクライアントなどのセキュリティバグを利用して、コンピューターやその他のデバイスからデータを抜き出すより簡単な方法があります。
そして、3 番目に、この TLB サイド チャネルを利用するのは簡単ではありません。
ただし、パブリック クラウド プラットフォームで仮想マシンを実行していて、近隣のゲストが監視しようとしているのではないかと心配している場合など、キャッシュベースの攻撃が心配な場合は、注意を払う必要があります。
「慌てる必要はない。TLBleedはクールな攻撃だが、新たなSpectreではない」と研究者の一人、ベン・グラス氏は金曜日に語った。
ハイパーって何?
TLBleedは、ほとんどの最新のIntelチップに搭載されているハイパースレッディング技術を利用しています。プロセッサは2、4、8など、複数のコアを持つことができ、各コアはメモリからコードを個別にフェッチして実行します。ハイパースレッディングを有効にすると、各コアは複数のスレッド(通常は2つ)を同時に実行できます。つまり、2つのスレッドが同じコア上で同時に実行され、メモリキャッシュやTLBなどのコア内のインフラストラクチャを共有することになります。
オペレーティングシステムがコアに対し、あるプログラムのスレッドと別のプログラムのスレッドを同時に実行するように指示した場合、一方のスレッドが、そのCPUのプライベートリソースへのアクセスを監視することで、もう一方のスレッドをスパイすることが可能になります。こうした監視から、もう一方のプログラムにとって秘密のRAMの内容を特定することが可能になります。
つまり、一部の悪意のあるソフトウェアが、たとえば電子メール クライアントがメッセージの署名や暗号化に使用する暗号キーを盗み見ることができるということです。
メモリ キャッシュを介してデータが漏洩するのを防ぐためのメカニズムが存在します。たとえば、ここで要約されている Intel のキャッシュ割り当てテクノロジがあります。
メモリキャッシュは、システムRAMの断片的なコピーをプロセッサ内に保持します。これにより、外部ストレージチップに有線で転送するよりも、読み書きが高速になります。一方、TLBは異なる種類のキャッシュです。
これは、各アプリケーションの仮想メモリ空間内のメモリアドレスをRAM内のバイトの物理位置に変換する数値テーブルです。プログラムから見れば、システムメモリのほぼすべてを占有しているように見えます。しかし実際には、オペレーティングシステムとプロセッサが裏で膨大な処理を行い、その錯覚を作り出しています。特殊なデータ構造によって仮想メモリと物理メモリがリンクされているため、2つのアプリがそれぞれ仮想メモリアドレス4,096に格納されているデータにアクセスすると、実際には片方のアプリは物理アドレス81,920から、もう片方は物理アドレス86,016からデータを取得することになります。
これらのデータ構造(プロセッサとカーネルのページテーブル)は大きく、単一のキャッシュに全てを収めるには大きすぎます。そのため、コア内のTLBは、頻繁に使用されるメモリ位置変換の小さなコレクションを保持しています。仮想アドレスから物理アドレスへのルックアップが実行され、そのルックアップがTLBにない場合は、TLBに取り込まれるため、以降の変換はほぼ瞬時に実行されます。この処理には、使用頻度の低いルックアップをバッファから追い出す処理が含まれる場合があります。
プロセッサが新しい変換で TLB スロットをリサイクルするのを観察することで、同じコアで実行されている他のスレッドがどのように動作しているかを把握できます。
ASLR セキュリティを破る JavaScript ハックを大学の学者がデモ
続きを読む
そして、別のプログラムが自身のプライベート データにアクセスしてメモリ キャッシュを補充するタイミングを観察するためにメモリ キャッシュの内容を戦略的に操作できるのと同じように、同じコアで実行されている 2 つのスレッド間で共有される TLB を監視して、他のプログラムが最終的に誤ってメモリの内容をスピルするようにすることができます。
研究チームはAI、具体的にはサポートベクターマシン分類器を用いて、プログラムが暗号関数などの機密性の高い操作を実行しているタイミングをTLBレイテンシから特定し、そのアプリのプライベートデータをビットストリームとして読み出して暗号鍵などを再構築しました。アドレス空間レイアウトのランダム化など、克服すべきハードルはありますが、研究チームは現実世界の攻撃ではこれらのハードルを突破できると確信しています。
「TLBleed は、キャッシュではなく TLB を通じてハイパースレッドのアクティビティを監視することで、完全なキャッシュ分離や保護ポリシーが適用されていても、プロセス間で情報が漏洩する可能性があることを示しています」と Gras 氏はThe Registerに語り、「TLB 信号を 1 回キャプチャするだけで、98 パーセントの成功率で信頼性の高い暗号キーの回復が可能になります」と続けた。
TLBleedの重要な要素の一つは、プログラムがメモリのどこから読み書きしているかではなく、いつ読み書きしているかを特定することです。プロセッサとカーネルは通常、アプリケーションを4KB以上のメモリブロックに分割しますが、これは粒度がかなり粗いものです。そこで研究チームはアクセスのタイミングに注目し、対象となる暗号操作内のコード設計を理解することで、処理されている情報を推測することができました。
「データの意味を理解するために機械学習を用いており、異なるエリアにアクセスするのではなく、時間経過に沿ったアクセスパターンを分析する必要がありました」とグラス氏は述べた。「暗号鍵のビットを区別するために、機械学習アルゴリズムを使用しています。これは斬新だと思います。」
応答
Intelは、既存のキャッシュスヌーピング対策で、TLBleedによるプログラム間のデータ漏洩を十分防げると考えているようです。実際、同社のエンジニアは、TLBleed耐性を持つコードを記述・構築できると考えています。
この半導体大手は、発見された欠陥に対するCVE番号(脆弱性を識別するための業界で認められた固有のID番号)の要求さえせず、同社のチップのサイドチャネル脆弱性に関するHackerOne主催のバグ報奨金をチームに支払うことを拒否した。
「我々はこれをインテル側のゴールポストを動かす動きとみなしている」とグラス氏は語った。
インテルが運営するHackerOneバグ報奨金プログラムは、サイドチャネル攻撃を対象としています。しかし、インテルは、同社の「一定時間」、つまりサイドチャネル攻撃が強化された暗号プリミティブに対するサイドチャネル攻撃を実証していないとして、私たちの報告を却下しました。
彼は、キャッシュスヌーピングに対する現在の緩和策では TLBleed を阻止するのに十分ではない可能性があり、現在使用されているアプリケーションは潜在的に脆弱であると考えていると付け加えた。
インテルの広報担当者はThe Registerに対し、「お客様とそのデータを保護することは、引き続き当社にとって重要な優先事項です。今回のフィードバックを検討しており、コミュニティの皆様の継続的なご尽力に感謝いたします」と述べた。
グラス氏はまた、AMDの最新Zenプロセッサ(Ryzen、Threadripper、Epyc)に搭載されているハードウェアスレッド技術もTLBleedの危険にさらされていると懸念している。CPUコアはIntel製品と同様に、それぞれ複数のスレッドを同時に実行できるためだ。AMDの広報担当者はコメントを控えた。
ソフトウェアにおけるTLBleedの軽減、つまりメモリ変換によるスヌーピングを阻止するためにアプリケーションを再コンパイルする上での悩みの種は、TLBの設計がマイクロアーキテクチャごとに異なることです。例えば、Skylake CPUではアプリのデータ漏洩を防げたとしても、Broadwell CPUで実行すると、振り出しに戻ってしまいます。つまり、ソフトウェアは再び脆弱になる可能性があります。
もう一つの緩和策はオペレーティングシステムレベルでのものです。カーネルスケジューラに、1つのコアが2つの異なるプログラムの2つのスレッドを同時に実行しないように指示するという方法があります。ただし、これはシングルスレッドプロセスを多数実行しているコンピュータにペナルティを与えることになります。あるいは、機密性の高いプログラムを、機密性が低いプロセスから隔離されたリングフェンスされたコアで実行する方法もあります。ただし、そのためにはカーネル内での相当な調整と、ユーザーによるサポートが必要になります。
クラウド環境では、ハイパーバイザーによって、コアが 2 つの異なる仮想マシンからのスレッドを同時に実行しないようにすることができます。
もう一つの緩和策は、同時マルチスレッドを完全に無効にすることですが、実行するワークロードによってはパフォーマンスの低下を招きます。OpenBSDはすでにこの対策を採用しており、他のオペレーティングシステムも追随する可能性があります。FreeBSD、NetBSD、HardenedBSDを主導するOSベンダーや開発チームを含む多くのOSベンダーや開発チームが、TLBleedの影響を評価しているようです。
最後に、Intel は、プログラマーがキャッシュを分割できるようにしたのと同じ方法で、TLB を分割することもできますが、これを実行するつもりはないようです。
チームの論文は来週公開される予定です。グラス氏は8月に開催されるBlack Hat USAでこの脆弱性について講演する予定です。®
追加更新
Intel の広報担当者は、記事の公開後、TLBleed の調査に対するより長い回答を次のように伝えた。
現時点では、libgcrypt は TLBleed に対して脆弱であることが示されていますが、今後は適切なアップデートが実施され、適切な対応が取られることを期待しています。今後は、サイドチャネル攻撃に耐性を持つ BoringSSL や OpenSSL などの類似の暗号ライブラリ、そしてその他のソフトウェアが、TLB ベースのリークに対しても耐性があることを実証し、保証する番です。
最終更新
AMD の広報担当者は、同社のチップはいずれも TLBleed の影響を受けないと述べている。