Spectre

Spectre (スペクター) の脆弱性について



Spectreは、現代のマイクロプロセッサに存在するハードウェアレベルの脆弱性であり、正式な権限を持たないプロセスが保護されているメモリ領域にアクセスすることを可能にするものです。この脆弱性は、CPUの「投機的実行」という処理方式に起因しており、プログラムの実行を高速化するために、将来の処理を予測して事前に実行する機能が、セキュリティ上の欠陥を生み出しています。

Spectreの概要



Spectreは、悪意のあるプログラムがメモリ領域を読み取ることを可能にする脆弱性です。読み取られるメモリ領域には、機密情報が含まれる可能性があり、この脆弱性が悪用されると、情報漏洩などの深刻な被害につながる可能性があります。

この脆弱性は特定のCPUアーキテクチャに依存せず、x86(Intel、AMD、および互換CPU)、ARMなど、幅広いプロセッサで発生することが示唆されています。GPUにおける影響は、まだ明確に確認されていません。

Spectreに関連するCVE番号は以下の2つです。

Variant 1: 投機的実行における境界チェックの回避 (CVE-2017-5753)
Variant 2: 投機的実行における分岐先インジェクション (CVE-2017-5715)

Variant 1(CVE-2017-5753)は、特にブラウザのJavaScript JITエンジンにおいて発見された脆弱性で、ウェブサイトから他のブラウザのデータやブラウザプロセス自体のデータを読み取ることが可能になる可能性があります。この問題は、FirefoxやGoogle Chromeなどの主要なブラウザで、ウェブサイトごとにプロセスを分割することで対策されています。

2018年には、Spectreの新しい亜種(Variant 3a/4)も発表されました。

Variant 3a: Rogue System Register Read (CVE-2018-3640)
Variant 4: Speculative Store Bypass (CVE-2018-3639)

Spectreは、GoogleのProject Zeroと暗号学者のポール・コッフェル氏を中心とした研究チームによって発見され、Meltdownのチームとの共同作業の結果、2018年1月3日に発表されました。この脆弱性が「Spectre」(幽霊)と名付けられたのは、投機的実行という技術に由来しており、根本的な解決が困難であることから、長く付きまとう問題となるだろうという意味が込められています。

Spectreの詳細



Spectreには、以下の2つの主要な脆弱性が含まれています。

1. 境界チェックの回避 (CVE-2017-5753)
2. 分岐先インジェクション (CVE-2017-5715)

これらの脆弱性は、いずれも権限のないデータへのアクセスを可能にするものであり、攻撃の痕跡が残りにくいため、攻撃を受けた際のデータ流出の特定が困難という特徴があります。

境界チェックの回避



通常、メモリアクセスはマイクロプロセッサによる境界チェックによって、読み取り可能な領域かどうかを検証されます。しかし、投機的実行時に境界チェックが適切に行われず、不必要なメモリ領域がキャッシュに読み込まれてしまうことがあります。攻撃者はこのキャッシュの変化を追跡することで、秘密情報のアドレスを特定し、情報を入手することが可能になります。この攻撃は、理論的には他のプロセスにも成功する可能性がありますが、実際には自身のプロセス内のデータ読み取りが確認されています。また、eBPF JITを有効にしたカーネル環境下では、AMDプロセッサでも攻撃が成功したことが報告されています。

分岐先インジェクション



分岐先インジェクションの攻撃は、Return-oriented programming(ROP)と似た手法で、悪意のあるプロセスで分岐予測を学習させ、ターゲットとなるプロセス内の間接分岐命令がガジェットを投機的に実行させることを試みます。この攻撃の成否は、キャッシュヒットミスを測定することで確認できます。この攻撃が成立するためには、投機的実行によって何らかの副作用が発生する必要があり、同一物理コア内のSMT(Simultaneous Multithreading)による論理コア間でデータの読み出しが可能であることが検証されています。

Spectreの評価



Spectreは、自プロセス内の機密データを読み取る攻撃(ブラウザベースのJavaScriptによる攻撃など)が確認されています。他のプロセスのデータを読み取る場合は、確率的な挙動を示すため、攻撃の容易度はプロセッサのアーキテクチャに依存するとされています。AMDは、内部アーキテクチャの違いから、CVE-2017-5715はほぼリスクがなく、Meltdownについては全くリスクがないと述べています。

Spectreへの対策



Spectreへの対策としては、以下の様なものが挙げられます。

メモリ構造を推測させないようにする:アドレス空間配置のランダム化(ASLR)やPosition Independent Code(PIC)を使用することで、メモリマップをランダム化し、攻撃を緩和できます。LLVMへのパッチ適用も同様の効果があります。
サイドチャネル攻撃の対策:スクリプトの応答時間を均一化したり、処理時間を高精度で測定させないようにすることで、攻撃を緩和できます。これは、ブラウザのJavaScript実行時などに取り入れられています。
プロセッサアーキテクチャの刷新:完全に影響を排除するには、プロセッサアーキテクチャの大幅な刷新が必要とされています。

ウイルス対策ソフトウェアでの防御は、有効性が疑問視されています。

Spectreの影響



Spectreは、分岐予測や投機的実行を実装するプロセッサに潜在的な影響があると考えられています。

影響を受けるプロセッサの例



インテル: Xeon E5-1650 v3での攻撃成功が確認されています。Intel Core 2世代や第1世代Core iシリーズの一部は、脆弱性パッチの適用が中止されました。対象のCPUには、Penryn、Yorkfield、Wolfdale、Bloomfield、Clarksfield、Gulftown、Jasper Forest、Harpertown、SoFIA 3GRなどがあります。
AMD: eBPF JITを有効にしたカーネルにおいて、AMD PROでの攻撃成功が報告されています。Radeon GPUへの影響は不明です。
ARM: Cortex-R7/R8/A8/A9/A15/A17/A57/A72/A73/A75がSpectreの影響を受けるとされています。Cortex-A53/A55は影響を受けないとされています。Qualcomm Snapdragonの一部も同様です。
NVIDIA: Geforce GPUでは、脆弱性は確認されていません。

Spectreへの回避策とアップデート



Spectreはハードウェアレベルの脆弱性であるため、OSやブラウザなどのアプリケーション側での回避策が講じられています。多くのベンダーは、パッチMeltdownとSpectreのどちらを緩和するのかを明確にしていません。

Windows: OSアップデートによる対策が行われています。
macOS: macOS High Sierra 10.13.2 Supplemental UpdateにてSpectre対策が適用されています。
Linux: SpectreはKPTIによっては回避されないため、OSレベルのパッチは別途提供されています。
Android: Googleはセキュリティパッチを配信していますが、実際の端末への適用はメーカーやキャリアの対応に依存します。
iOS: iOS 11.2.2でSpectre対策が適用されています。
Google Chrome: Chrome 64でJavaScriptエンジンへの対策が施されました。
Firefox: Firefox 57.0.4でperfomance.now()の精度低下やSharedArrayBufferの無効化による対策が行われています。
NVIDIA: GeForce GPUのデバイスドライバパッチが適用されました。
シスコ: ルーターやアプライアンス製品、ソフトウェア脆弱性があることを認めています。

まとめ



Spectreは、マイクロプロセッサの投機的実行という機能を悪用した深刻なセキュリティ上の脆弱性です。広範囲なプロセッサに影響を与え、OSやブラウザなど様々なレベルでの対策が必要とされます。根本的な解決にはプロセッサアーキテクチャの刷新が必要であると考えられています。



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。