Spectre
とは何か
2018年1月3日に発表された、マイクロプロセッサ(≒CPU)の一般的最適化手法である「投機的実行」などを悪用したハードウェアレベルの脆弱性。
(上述の通りハードウェアアーキテクチャに由来する脆弱性であり、修復が困難なことから、「相当のあいだ幽霊(Spectre)のように我々に取り憑くだろう」と説明されている)
この脆弱性の種別は、「サイドチャネル攻撃」に分類され、
具体的な脅威としては、正当な権限のないメモリの領域(ex: 他のアプリケーションやカーネルのメモリ領域)にアクセスすることが可能になる、という重篤度の高いもの。
このSpectreと同時期に発見され、かつ類似性・関連性の高い脆弱性として、Meltdownがある。
(なお、Meltdownの脆弱性種別は「権限昇格攻撃」に分類される)
フロントエンド(Web界隈)からみたSpectre騒動
これらの脆弱性による騒動においてフロントエンド上特筆すべき事項としては、
- JavaScriptのJITエンジンに発見された(2つ発行されたCVE番号のうちの1つ:CVE-2017-5753)ことから、フロントエンドとの関連性が強く認識・意識されている脆弱性であること
- マイクロプロセッサにおけるハードウェアレベルの脆弱性であるため、まずはOS側やブラウザなどのアプリケーション側で回避策が取られつつあること
- それらと並行してWeb標準側でも「cross-origin isolation」として対策の提案・啓発が進められていること
- ブラウザベンダ(Chrome, Firefox, Safari)による対症療法として、以下の対応が取られたこと
-
performance.now()
が返すタイムスタンプの解像度を下げる- サイドチャネル攻撃における、キャッシュヒットを推測するためのタイムスタンプ用途としての当該APIの可用性を下げるため
-
SharedArrayBufferのデフォルト無効化
-
ある手法により、高解像度(nanosecond級)のタイマを実装することで
performance.now()
を代替可能なため- ある手法:ざっくり解説すると、SharedArrayBufferの「スレッド間で値を相互参照できる」という特性と、Workerによるマルチスレッド処理、その処理スレッド内無限ループでのインクリメント処理を組み合わせて高解像度のタイムスタンプを生成・利用できる、みたいな感じ。
- 現在では、Chrome, Firefoxにおいて
cross-origin isolationed
であることを条件に再有効化されている
-
ある手法により、高解像度(nanosecond級)のタイマを実装することで
-
などが挙げられる。