x86系(Intel、AMD)、ARM系CPUで投機実行に係る脆弱性が判明
「Spectre」(スペクター)や「Meltdown」(メルトダウン)と呼ばる、
殆どのCPUに係るCPUアーキテクチャ根幹に係る問題がGoogleによる調査で判明したようです。
・Google、CPUの投機実行機能に脆弱性発見。業界をあげて対策へ
https://pc.watch.impress.co.jp/docs/news/1099687.html
どういった問題なのか、説明するのが難しい…というか私自身も全部理解しきれていない
のですが、端的に説明すると、CPUの高速に動作させる都合上、分岐予測をしてその後
投機的に命令を実行した際、実行している他のプログラムのデータが読めてしまうという
問題のようです。
20年以上前のCPUから対象との事で、現在使われているほぼ全てのCPUが影響を受ける
ようですが、特にIntel製CPUでの問題が深刻なようです。
厄介なのは、ソフトウェア的に対応すると性能低下が起こる点と、根本的な解決には
ハードウェア的に問題を解決した製品が出るまで待たなければならない点です。
・Intelのプロセッサチップに根本的な設計上の欠陥が発覚、各OSにアップデートの
必要性
http://gigazine.net/news/20180103-intel-processor-design-flaw/
とはいえ、大多数のユーザーレベルですと順次配布予定のOSに修正パッチを当てる
という対策でOKだと思います。
色々調べてみましたが、下記サイトが今回の問題に関して一番分かりやすく且つ
詳しく説明されているので一度読まれる事をオススメします。
・Googleが発見した「CPUの脆弱性」とは何なのか。ゲーマーに捧ぐ
「正しく恐れる」その方法まとめ
http://www.4gamer.net/games/999/G999902/20180105085/
個人レベルで出来る対策としては、修正パッチが出たら当てる事と、パッチを
当てるまでは怪しいサイトやプログラムを開かない事により注意を払う事ですね。
但し、Win向けのパッチは公開されていますが、マイクロソフト製のもの以外の
ウイルス対策ソフトを入れたPCにパッチを入れるとフリーズやブルースクリーンと
いった問題が発生する恐れがある為、手動で入れたりせずWindows Updateに表示され
るまでは導入しない方が良いでしょう。
ちなみにAMD製CPUに関しては一番深刻度が高いとされるMeltdownと呼ばれる問題は
無いそうなので、サーバ向け製品を中心に追い風が吹くかもしれません。(^^ゞ
---1/5 22:57 追記---
Apple製品に関しての情報ですが、全てのMacとiPhone、iPad、iTVといった
Apple Watch以外の製品で影響を受けるようです。
・Apple、すべてのMacとiOS製品が「メルトダウン」「スペクター」の脆弱性の
影響をうけると発表
このうちMeltdown(メルトダウン)の問題に関してはiOS 11.2、macOS 10.13.2、tvOS 11.2
にて既に問題を緩和する対策が取られているようです。
・アップル、CPU脆弱性「Meltdown対策は提供済み」。パフォーマンス低下もなし
http://japanese.engadget.com/2018/01/05/cpu-meltdown/
一方、Spectre(スペクター)に関してはmacOSおよびiOS版Safariブラウザに向けた修正が
数日中に提供開始になるようです。
Appleの対応は、少なくともこの件に関しては対応が早いなとと思いました。
…ただ、これでiOSの更新が近日中にある事が確定となり、マイネール@運営事務局さんを
はじめとするmineoスタッフ方々が再びiPhone/iPadの動作確認に追われる事に
なりそうですね。(^^ゞ
私の職場では、取りあえず「帰宅時など不要な時はパソコンの電源を切っておくこと」という応急対策が示されました…
大丈夫かな、いろいろな意味で (^^;
現状は、効果的な対処法が無い状況なので、普段通り使うしか無いような気もします。(^^;
あとは、安定したパッチが出たら早期に当てることでしょうか。
>ネロさん
どこにいったのでしょうね(^^ゞ
CPUやキャッシュメモリを含めて、完全に分離された状態での処理、またはハイバーバイザのようなもので隔離・マスクされないと確かにキャッシュの読み取りは可能になりますが、果たしてどのくらいのデータが取れるのか?に掛かってくると思います。
まあ、穴をふさぐ必要はあると思いますが、アーキテクチャを含めて環境依存の側面はあるともいえますので、あとはカーネルモードの処理が完全に分離されるように OS側で処理をいじることになるでしょうね。そういうパッチが開発され、適用となれば、その関係から確かに処理速度は落ちるといえます。
ただ、仮想環境を含めてリソースを十分に配置している様な構成であれば、そのオーバーヘッドで減じられる処理能力分は織り込み済ともいえます。キャッシュフラッシュ(初期化)までのタイミングが OS側で随時コントロールできれば良いんでしょうけど、今のプロセッサはマルチコアである以上、キャッシュフラッシュを頻発するとパフォーマンスが出なくなるので仕方がないかもしれませんね。
それとも、Intelの言い分としては、単に使い方が悪いということなのでしょうか。Intelのコメントはまだないと書かれていましたね。
難しい話なので、私には細かいことは分かりませんが。(^_^;;;;
> 仮想記憶や特権機構って、20年以上も前からある技術なのに、近年の
> 高速化の段階で、これらの脆弱性は考慮されていなかったということ
> でしょうか?
もともと IA(Intelアーキテクチャ)では多段パイプライン処理実装の先に分岐予測やら色々と突っ込んでいきましたけど、その際にキャッシュメモリのステージングだけはやっていきましたが、メモリエリアを分割しないで共有していた、と言う設計にはなっています。
他のアーキテクチャ(例として IBMの POWERプロセッサや SPARCなど)では明確にキャッシュメモリをスレッド毎分割して設計しているものもあります。
> それとも、Intelの言い分としては、単に使い方が悪いということ
> なのでしょうか。Intelのコメントはまだないと書かれていましたね。
簡単に言えば「プロセッサの設計が悪い」のも一因なんですけど、要は「キャッシュメモリの使用効率を上げるんだったらスレッド毎に分割すると効率悪いよね。だからある程度は共有しちゃった」ってところにあるので。
ただ、これってプリフェッチしたデータが使用されないことを認識した時点で必要以外のデータをキャッシュフラッシュできれば良いんですけど、それを実行するにはプロセッサ側のマイクロコードにその機能を実装するか、または「必要のないキャッシュメモリの領域はどこか?」を常時監視していないとならなくなります。
ハードウェア的な対策ができるまではカーネルモードプロセスが1つ増えて余計に処理を回して対策するしか無いので、結局パフォーマンスは落ちますよね、ってところでしょう。
ただ、昨今はマルチコア・マルチスレッドなので、スレッド使用効率を引き上げるように OS側でパッチを当てればパフォーマンス滅失はある程度抑えられる様に感じます。恒久対策はキャッシュフラッシュ制御を CPU側マイクロコードに組み込んだ製品が出てくるまでお預け、といったところでしょうか?
2009年製初代Core-i5にもパッチお願いします。
そんな感じですね。
ただ、真面目に全ての処理が分離されるようにすると性能が大幅に低下する
為、各社の修正パッチには「緩和策」としてメモリ空間をランダム化して
特定のデータを取り出しにくくするといった対応がされていると思われます。
>アッカリ〜ンさん
昔はセキュリティよりもパフォーマンスを優先していたからではないかと
思います。
それが現代にもそのままの状態で放置され、今になって問題が顕在化した
という所でしょう。
>天井さん
Intelがパフォーマンス優先の設計にして、セキュリティ面がおざなりに
なっていたのは確かだと思います。
対応に関しては、次期製品では対応する予定ではあるものの、それまでは
ソフトウェア側のOSやブラウザの更新で対処する形になりますね。
https://www.google.co.jp/amp/s/japan.zdnet.com/amp/article/35112769/
それってOSとかアプリケーションで何とかできるものなんでしょうか。gccの中の人とかも頑張って下さいな。よろしくお願い申しあげます。
古いハードに関してはOSやアプリケーション上で提供される「緩和策」で
大分対応出来るとは思いますが、完全には無理ではないかと思います。
ただ、悪用するにもハードルが高いものだという印象なので、緩和策の
OSやアプリケーションの修正パッチを当てるだけでもやらないよりは
かなりマシでしょうね。
各社様々対応し始めていますが、結局のところ「共有キャッシュ領域を如何に分離するのか?」と、それに対して「キャッシュメモリ利用効率を稼ぐか?」のせめぎ合いなので、逆に考えて「だったらマルチコアプロセッサを止めるしか無いよね?」が正解ともいえますけどね。
NUMAハードウェアの場合は CPUからの PCI Expressアドレスもある程度共有しているので、やろうと思えば PCI Expressから類推して.....も出来ないわけではないんですけど、それをやると特権命令違反になるので、外部からはNGだけど、内部に残ったキャッシュメモリのガーベージコレクションが終わるまでは残っちゃう、ってことですからね。(Speculative Execution)
こっちは最悪ハイパーバイザーで仮想化することによりかなり穴を塞げます。
ですが分岐予測へのインジェクションはハイパーバイザーで仮想化しておいてもあまり効果がないので、外部からの命令を受け付けない様に CPUマイクロコードで手を打つしか無い、と言う感じですね。
※IAサーバー向けには各メーカーで既に対策済ファームウェア(BIOS)を
出してきていますが、おそらく PCクライアント向けにはそこまで厳密な
ものを出してこないようにも思います。本当は OS・アプリケーションと
ファームウェアorプロセッサ(CPU)の双方で手を打つしか無いんです
けどねえ。個人的には色々頭がいたいです。(苦笑)
ちなみに Intelプロセッサはいわゆるストレージ装置のコントローラにも使われていますが、それらについては「ストレージ装置上で汎用プログラムを動かすわけではないので対象外」としているようです。まあ、納得できるといえば出来ますね。(専用 OS上で専用プログラムしか動かせないように作られているため)
詳しく解説どうもありがとうございます。(^^
さらに詳しい情報がネット上に出てきていますが、Meltdownに関しては、
OSやアプリの更新で対応可能ですが、Specterに関しては、マイクロコード
更新、つまりBIOS(UEFI)の更新が必要になる様です。
・「CPUの脆弱性」に手元のゲームPCは対策できているのか。Windows環境で
簡単にチェックできるツールを作ってみた
http://www.4gamer.net/games/999/G999902/20180110102/
上記のチェックツールでチェックしてみた所、うちのPCではMeltdown対策は
OS更新により対応したものの、Specterに関してはUEFI側の更新版がまだ
登場していない為、OSのみ更新した状態という表示でした。
自作PCでASUS H97-PROというマザーボードを使用している為、一般的な
PCよりは対応が早いのじゃないかと期待していますが、ASUSさん次第
ですね(^^;
メーカー製PCだとBIOS(UEFI)更新はちょっとハードル高めだなと
思いました。
それと、古いPCだと更新自体登場しないケースも多そうです。
その場合は、最低限OSやアプリ(特にブラウザ)の更新をしっかり行う事が
重要だと思います。
改めて記載します。申し訳ありません。
Kanon好きさん>
確かに Rouge Cache Data Load(Meltdown脆弱性に該当するもの)はユーザーモードとカーネルモードの切り離しが明確にできていないプロセッサのキャシュエリアだとガチンコで危険ですが、これはハイパーバイザーなどでマスクさせればなんとかなるレベルではあるんですけどねえ。
SPECTRE脆弱性に該当する Branch Target Injection(分岐予測へのインジェクション)や Bounds Check Bypass(条件付き分岐の境界チェック回避)は最終的に「ハードウェア側のアドレスラインが判ってしまえば直接叩ける(直接ビットシフトしたり云々など)」ので、現状では Firmware(UEFIなり BIOS)での修正が必要ですし、恒久対策は該当しないプロセッサへの交換で対応するしかありませんねえ。
これ、集団訴訟になって Intelが対象 CPUの交換品を提供するとかなったら大変なお話ですけどね。クライアント系 CPUだったら場合によっては既に退役させているものもあるでしょうけど、サーバー系 CPUだとプロセッサ単価が高いので出荷量によっては痛手だと思います。(特に x86_64系の Xeonは IAサーバーの中心なので)
詳しく改めて解説頂きどうもありがとうございます。(^^
大体どんな状況なのかは見えてきた印象です。
また、最近どの程度性能低下するのかという情報もIntelから公表され
ました。
・Intel、第8~6世代CPUで脆弱性対策後のベンチマーク結果を公開
https://pc.watch.impress.co.jp/docs/news/1100839.html
古い世代のCPUに関してはこれよりも性能低下が大きい模様です。
状況によっては昔のPentiumバグの様な事になる事もありえるなとは
私も思いました(^^ゞ
さらに各社対策を updateしてきていますが、ハイパーバイザ側対策だけでは足りない、という情報も出てきていたりと、色々混乱してるようです。
少なからずキャッシュラインの分離ができていない状態では特権命令への割り込みが可能になってしまう、または割り込みを突っ込んでる間に特権命令を発行させてしまえばある程度情報を読み出せる、とも言えるので、現状では「特権命令の不正実行を防御する」しか無いんでしょうね。そのために余計なプロセスは動きますからパフォーマンスさがりますけど。
コンシューマ向けプロセッサの場合は効果も限定的なのでまだ何とか出来るでしょうけど、エンタープライズ向けプロセッサの場合はパフォーマンス第一でもあるので、性能が引き出せない状態だと OEMメーカー間での綱引きに発展しそうです。一部発展しそうなネタは私も目にしています。