2018/07/06

インテル CPU の脆弱性:Lazy FP State Restore

2018 年 7 月 6 日 Emil Hozan 著

Julian Stecklina 氏(Amazon.de)、Thomas Prescher 氏(cyberus-technology.de)、および Zdenek Sojka 氏(sysgo.com)が数週間前に、最近の Meltdown エクスプロイトに非常によく似た、インテルベースの CPU の脆弱性を報告しました。ご存知のように、CPU はコンピュータシステム全体の処理を担当するハードウェア部分であるため、そのコンポーネントに脆弱性があれば、システム全体が危険にさらされることになります。

今回の脆弱性を理解するには、CPU アーキテクチャについて詳しく知っておく必要があります。CPU は、計算時に使用する値やポインタの集まりである「レジスタ」に情報を格納します。この場合の値とは、特定の命令であったり、メモリの場所やビットシーケンスであったりします。一部の計算では、「浮動小数点」と呼ばれる、小数点の配置を使用する必要があり、この場合に、FPU(浮動小数点演算装置)レジスタが問題になります。CPU は、マルチコア CPU のコアを最大限に活用するために、アクティブプロセス/スレッドを切り替えることでコンテキストを切り替え、空きクロックサイクルを利用します。これが発生したときに FPU がこの Lazy という方法を使って処理されていると、次に使用されるまでの間、そのレジスタスタックに情報が残ることになります。これに対して、Eager という方法では、次の使用に備えて、そのレジスタがただちにリストアされます。以上の動作の詳しい説明については、このリンクを参照してください。

「Lazy FPU Restore」スキームを採用しているすべての Linux カーネルに、CVE-2018-3665 として提出された、情報漏洩の問題に対する脆弱性が存在します。簡単に言うと、攻撃者がこの脆弱性を利用した標的型サイドチャネル攻撃によって FPU 状態ビットを読み取り、他のアプリケーションや暗号化処理に関する情報を取得できる可能性があります。この脆弱性は、RedHat と Debian/Ubuntu を含む、Linux のほとんどのフレーバーに影響します。redhat.com による記事では、RHEL 7 以降での解決についていくつかの情報が説明されており、RHEL 6 以前については今後いずれかの段階でパッチが公開されるものと思われます。RHEL 7 ではデフォルトで、安全性がより高い方法である「Eager」オプションが Sandy Bridge(2011)インテルプロセッサ以降の浮動小数点レジスタのリストアに使用されます。それ以外のプロセッサでは、「eagerfpu=on」(詳細はこちらを参照してください)でカーネルをブートすることでこの問題を緩和でき、FPU 命令の呼び出しの有無にかかわらず、切り替えのたびに FPU 状態が保存されてリストアされます。また、このようにすることでパフォーマンスが低下したり、プロセッサに負の影響を与えたりすることはありません。

インテルはすでに脆弱性を確認しており、影響を受けるベンダによってセキュリティパッチが開発中かすでに公開されています。インテルは、この脆弱性の詳細といくつかの推奨事項(ここに記載されています)を公開しました。お使いになっている Linux ディストリビューションで使用されている FPU リストアの方法がどちらであるかわからない場合は特に、この脆弱性を解決するための最新セキュリティパッチを使ってアップデートするようにしてください。– Emil Hozan

注:ウォッチガードのいずれの製品も、この脆弱性の影響を受けることはありません。ウォッチガードのすべてのオペレーティングシステムで使用されている Linuxカーネルは、安全な浮動小数点リストアを使用するようにコンパイルされています。

参考資料

Intel.com の寄稿者によるLazy FP State Restore による説明
https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00145.html

Mitre.org の寄稿者によるCVE-2018-3665 の説明
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3665

Redhat.com の寄稿者によるCVE-2018-3665 の説明
https://access.redhat.com/security/cve/cve-2018-3665

Redhat.com の寄稿者によるLazy FPU Save/Restore(CVE-2018-3665)の説明
https://access.redhat.com/solutions/3485131

* 文中のリンク先はすべて英文です