CPU脆弱性について調べた内容のまとめ
年明け早々から話題になっているCPU脆弱性ですが、メルトダウンとかスペクターというラスボス感ある名前だけが先行してどういう内容でどういう問題が起きるのか今ひとつ理解できていなかったため調べて整理してみました。
公式情報
まずはソースの確認。
1/3に公開された一次情報: Meltdown and Spectre
JVNの発表: JVNVU#93823979: CPU に対するサイドチャネル攻撃
そもそもどういう問題なのか?
トレンドマイクロのブログを参考にしてみた。
Meltdown と Spectre は両方とも、不正なコードが通常はアクセスできないメモリ領域にアクセスすることが可能になる脆弱性です。
脆弱性の仕組み
上記のブログによると以下の通り。
Meltdown と Spectre は CPU の投機的実行におけるセキュリティ欠陥に基づく脆弱性です。最近の CPU は処理が高速なため、(中略) CPU はメモリの読み書きを待つ間、先に実行可能な命令を実行します。このようにして投機的に実行された結果が正しいかどうかは事後的に検証され、もしその結果が不要な場合 CPU の内部状態とメモリへの影響は削除されます。(中略)メモリから 1 ワード長のデータをレジスタに移動する命令を投機的に実行し、その結果が不要となった場合、レジスタは元の値を保持していますが、キャッシュはリードサイクルで修正されます。Meltdown と Spectre を発見したリサーチャは、保護されているメモリ領域にアクセスするためにローレベルの CPU 状態を使用しました。
なるほど、わらかん。
色々ググってみると以下のブログでは図付きで説明されていて、これを読むと大まかなイメージはできた。
超ざっくりまとめると
メモリ上の値A=1なら計算式Bを実行
というような処理が実行される場合、値Aは過去の処理履歴から予測すると多分1なのでメモリから値を取得するのを待っている間にCPUが先に計算式Bを実行する(間違っていたらロールバックする)というのがCPUの投機的実行の仕組み。この仕組みを悪用して誤った投機的予測をさせ、例えばカーネル権限だったらパスワードを取得するというような処理で先にパスワードを取得させて、予測が間違っていると判断される前に取得した情報をキャッシュメモリの別の領域にコピーすることで本来取得できない情報を取得できてしまうという事らしい。
Spectreには細かく分類すると2種類の手法がある。
- 投機的予測の判断を遅らせる手法を使って情報を取得
- Intelが採用している投機的実行の仕組みでは特定の条件で結果を予測できることが分かっており、その条件で不正な投機的実行を行う
Meltdown のほうは、Intelの投機的実行とアウト・オブ・オーダー実行の仕組みを組み合わせることで、特定の条件でカーネルメモリや物理メモリにアクセスできてしまうらしい。 アウト・オブ・オーダー実行は投機的実行と似ているが、
命令A 命令B 命令C
という処理で命令Aの処理の中でメモリ上の値を取得してくる必要がある場合は同じように待たされるため、命令Bを先に実行しておくという仕組み。いずれにしても本来必要ない処理を先に実行していまう点が問題の元となっているようだ。
どういう問題がおきるか?
JVNの発表によると以下の通り。
ユーザ権限で実行中のプロセスから、機密情報を取得される可能性があります。
Spectre 攻撃に関しては、細工された Javascript コードによって、Javascript からは取得できないはずの web ブラウザプロセス中のデータを取得可能であると報告されています。
外部からのアクセスなどで即座に問題が起きるわけではなく、不正なプログラムが実行されればその実行で本来アクセスできない領域の情報を読み取って取得されるということのようだ。物理的に同じ環境にある他のユーザーの情報にアクセスできてしまうため、トレンドマイクロのブログにも書かれてあるようにクラウドサービスでの影響が懸念されている。
さまざまな攻撃シナリオの中で最も可能性が高いのはクラウドサービスのような共有システムへの攻撃です。1 つの仮想マシンへのアクセス権を持つ攻撃者は Meltdown を利用することによって物理的に同一の PC で仮想マシンを利用する他のユーザの情報にアクセスすることが可能になります。
影響の範囲
まとめるとそれぞれの脆弱性の影響は以下のようになる。
主にIaaS,PaaS系のクラウドサービスもその環境が上記に該当していれば影響を受ける可能性がある。また、SaaS系のクラウドサービスについては利用する分にはあまり関係がない話だが、サービス提供側は環境が上記に該当する場合は状況に応じて対策は考えたほうが良いかもしれない。社内システムなどのクローズドな環境にあるサーバもそうだが、基本的には不正なプログラムが実行されない限り問題は起きないようではあるが、昨年世間を騒がせたWannaCryなどはその前提で放置されていた環境で被害が拡大したとも言えるので少なくともMeltdownはどのような環境であっても対策しておいたほうが安全と思える。
なお、GPUは影響を受けないとのこと。投機的実行の仕組みは使っていないということなのだろう。
対策の状況
Intelは1月中に全てのパッチを提供するとのこと。
前述の通り、不特定多数のユーザーが物理的に同一の環境で利用するクラウドサービスでは影響が大きいこともあり年明けから順次対策されている。
PC向けにもOS、ブラウザ、アンチウィルスソフトなどが順次対策パッチを提供している。
Mac、Windows、iPhone、Androidなでそれぞれ対策が行われている。
対策の副作用
投機的実行に制限が生じるためCPUのパフォーマンスが低下するようで、悩ましい話ではあるが既にいくつか副作用が問題となっているようだ。開発者側はセキュリティ対策と合わせてパフォーマンスの確認も必要そうだ。