バージニア大学工学応用科学部(UVA Engineering)の研究者たちが先頃、既存のSpectre防御を回避して、Intel/AMDのマイクロ命令キャッシュから機密を盗み取ることの可能な、新たなSpectreハードウェアエクスプロイトを公開した。IntelとAMDは、新たなガイダンスは不要だと述べている。一方で研究者たちは、修正は展開が困難か、あるいはパフォーマンスの低下を伴う、と指摘する。
UVA Engineeringのコンピュータ科学William Wulf Career Enhancement助教授であるAshish Venkat氏が、今回のエクスプロイトを分かりやすく説明している。
TSA(運輸保安局)が搭乗券をチェックせずに許可を出すという、架空の空港セキュリティのシナリオを考えてみてください。理由は、(1) その方が早くて効率がよい、(2) 結局はゲートで搭乗券をチェックされることになる、というものです。コンピュータプロセッサも同じようなことをしています。チェックをパスするだろうという推測の下で、インストラクションをパイプラインに送り込んでいるのです。この推測が正しくない場合、そのようなインストラクションはパイプライン外に投げ出されるのですが、それでは手遅れかも知れません。というのは、それらのインストラクションはパイプライン内にサイドエフェクトを残すことが可能なので、攻撃者がそれを悪用して、パスワードのような機密情報を参照するかも知れないからです。Intelの提案するSpectreに対する防御策はLFENCEと呼ばれるもので、セキュリティチェックが実行されるまでは機密コードを待機領域(waiting area)に置いて、その後でのみ機密コードの実行を許可する、というものです。しかし、この待機領域の壁に耳があることが分かりました。私たちの攻撃はこれを利用したもので、攻撃者がマイクロ命令キャッシュを秘密のチャンネルとして使用することで、機密情報を盗み出す方法を示しています。
研究チームは論文で、既存のSpectre回避策をかいくぐる3つの新たな攻撃方法について詳細している。
- ユーザ/カーネル境界を越えて機密情報をリークする、同一スレッドのクロスドメイン攻撃
- マイクロ命令キャッシュを介して2つのSMTスレッド間で機密情報を転送する、クロスSMTスレッド攻撃
- 推測の誤った(mis-speculated)パスに沿ってアクセスすることで、その命令が実行にディスパッチされる前であっても承認されない機密情報のリークを可能にする、一時的実行攻撃(Transient execution attacks)。現時点で存在する、不可視な推測と分離(fencing)に基くSpectre対抗ソリューションを無効なものにする。
研究者たちの報告に対してIntelは、ソフトウェアがIntelのセキュアコーディングガイダンスに従っていれば、新たな対処策の必要はない、と述べている。
Intelは報告書を確認し、研究者らに対して、既存の対抗策がバイパスされないことと、このシナリオは当社のセキュアコーディングガイダンスで対処されていることを通知しました。当社のガイダンスに従ったソフトウェアは、uopキャッシュインシデンタルチャネルを含む、インシデンタルチャネルに対する防御をすでに備えています。新たな対抗策やガイダンスの必要はありません。
AMDもExtremeTech technology weblogで同様にコメントしている。
AMDは研究論文を確認した結果として、既存の対抗策がバイパスされることはなく、新たな対抗策の必要はないと考えています。当社としては、既存のサイドチャネル対抗ガイダンスと、標準的なセキュアコーディングプラクティスを遵守することを推奨します。
Spectreなどの投機的実行攻撃から機密情報を盗み出すサイドチャネルでは、ターゲットデータの所在を判断するためにタイミング攻撃手法(timing attack techniques)を使用する。研究チームは、Intelのセキュアコーディングガイダンスが推奨する対抗方法のひとつである一定時間プログラミング(constant-time programming)が、タイミング攻撃の防止に有効であることを認めている。しかしVenkat氏は、次のように警告する。
[…] 一定時間プログラミングは、実際のプログラム作業として実施が難しいことに加えて、多大なパフォーマンスオーバーヘッドや、機密性の高いすべてのソフトウェアへのパッチ適用に関するデプロイメントという重大な問題を伴っています。一定時間の原則を使って記述されたコードの割合は、実際には極めて小さいのです。この対策に頼るのは危険かも知れません。ハードウェアの保護は、やはり必要なのです。
事実としては、Google Security Blogの記事で情報セキュリティエンジニアのStephen Röttger、Artur Janc両氏が強調したように、Spectreの発見から3年を経た現在でも、ハッカーがこの脆弱性を利用してWebブラウザから情報をリークさせることは可能なのである。記事の中で両氏は、JavaScriptエンジンに対するSpectreエクスプロイトの実現性を確認したと述べて、インタラクティブな攻撃のデモンストレーションとYouTubeのデモを公開した上で、次のように推奨している。
投機的実行の脆弱性が低レベルであるため、適切なパッチの適用にはユーザのデバイスに対するファームウェアないしハードウェアの変更が必要になることが、包括的な修正を難しいものにしています。[…] 既存のWeb APIの設計では、データが不注意に攻撃者のプロセスへ流れる可能性は依然としてあります。[… Spectre] クラスの攻撃は現在も脅威であり、Web開発者にはアプリケーションレベルの対抗策の提供が求められます。[… そうではあっても、] Spectreの対する完全な防御は保証されません。対象とするアプリケーション特有の動作を考慮したデプロイメントのアプローチが必要です。
最新のx86 CPUのマイクロ命令キャッシュはデコード後の命令を保持しており、必要に応じて迅速にアクセス可能にすることで、電力消費とパフォーマンスを改善している。
タイミング攻撃は、プログラムのさまざまな実行時間を測定することで秘密の値を推定するという、サイドチャネル攻撃の広範なクラスである。他のサイドチャネル攻撃と比較して、タイミング攻撃はターゲットとのインタラクションが最小限に抑えられるため、リモートでマウントすることが可能になる。一定時間プログラミングを使用したライブラリの例としては、NaCl、mbedTLS、Open Quantum Safeなどがある。