「CPUの脆弱性」に手元のゲームPCは対策できているのか。基本的な仕様&いちいち調べるのが面倒な情報まとめゲーム会社が送る,令和のカリキュラム。分からないからこそ面白く,理解したときの驚きがある。【麻央】【莉波】で“評価A+”取ろうぜ解説カオスで自由なRPG「Elin」のアーリーアクセスがついに始まる。PARTY」で“映え写真”を撮ろう。日本語化:デッキ構築型ローグライトなサバイバルホラーRPG。日本語化:巨匠スタニスワフ・レムのSF世界をゆくウォーキングシム風ADV。日本語化:海底が舞台のポイント&クリックSFホラーADV。00:00ニュース「CPUの脆弱性」に手元のゲームPCは対策できているのか。Zero」が発表したCPUの脆弱性について,4Gamerでは先に,脆弱性の概要と,ゲーマーはどうすべきかといった点をまとめている(関連記事)。あれからまだ数日しか経過していないが,関連各社の対応は迅速で,本稿を執筆している1月10日の時点でほぼ出揃った。ゲーマーなら気になるであろう「性能への影響」についても,各社から公式コメントが出つつある状況だ。今回は,4Gamer読者の中でもとくにユーザー数が多いと思われるWindows側の対応を中心に,ここまでの動きをまとめてみよう。Zeroが公表した脆弱性には下の3つがあった。Variant1(CVE-2017-5753):配列の境界チェックバイパスVariant2(CVE-2017-5715):分岐ターゲットインジェクションVariant3(CVE-2017-5754):不正なデータキャッシュ読み込みそれぞれの概要は先の記事を参照してもらうとして,Variant1と2には「Spectre」(スペクター),Variant3には「Meltdown」(メルトダウン)という識別名が与えられている。Variant1とVariant2を組み合わせて使う,つまりSpectreを使うと,JavaScriptからWebブラウザを経由して,重要な情報を盗み出すことができてしまう。Webブラウザを通じた攻撃が可能であって,その点においてSpectreの脅威度はかなり高い。Variant3は,本来ならユーザー権限ではアクセスできない「カーネルメモリ領域」のデータを読み出すことができるため,Meltdownの脅威度も高い。Meltdown“だけ”を使って攻撃を行うのは,Spectreと比べるとやや難しいはずだ。SpectreにおいてはWebブラウザ経由の攻撃がもっとも懸念されるため,Webブラウザレベルでの対応が進んでいる。11」Microsoft「Edge」Mozilla「Firefox」Google「Chrome」Apple「Safari」といった主要なWebブラウザと,HTMLレンダリングエンジン「WebKit」が対応完了済みだ。少なくとも今からであれば,最新版へアップデートすることで,WebブラウザレベルでのSpectre対策は行えるだろう。OS側は,MicrosoftがSpectreとMeltdown,双方に向けた対策を基本的に終えている。Updateを適用してあれば,OSレベルの対応は完了......と言いたいところだが,注意が必要なのは,Variant2へ対策するには,BIOS(UEFI),より厳密に言うとCPUのファームウェアにあたるマイクロコードのアップデートが必要で,それを行って初めてVariant2対策は完了となる。大手メーカー製のゲームPCでは自動でBIOS(UEFI)アップデートまで入る可能性が高いが,中小ブランドやシステムビルダー製PC,自作PCでは,ユーザーが自分でアップデートを行う必要がおそらくあるので,その点は注意が必要だろう。自分のWindows搭載PCで脆弱性対策が完了済みか否かを調べてみよう「自分のWindows搭載PCで脆弱性対策が完了しているか否か」が分からないという読者もいると思うが,そんな人のため,Microsoftは調べるための方法を公開している。Support以下に,当該記事がある「やり方はリンク先のとおりなので,各自やってみましょう」と書くのは簡単だが,さすがにそれでは不親切だと思うので,操作をある程度自動化できるバッチファイルを作ってみた。10環境用」とさせてもらえれば幸いだ。利用にあたって,まずは下のボタンを押してzipファイルをダウンロードし,適当なフォルダにzip内の3ファイルを解凍してほしい。以下本稿では,cドライブ直下に「check」フォルダを作り,そこへ展開する前提で話を進める。“怪しげなバッチファイル”の実行に不安がある人もいると思われることから,ソースコードを2pめに掲載しました。ソースをいずれもテキストエディタへ貼り付け,片方を「check.bat」,もう片方を「check.ps1」として保存すれば,ダウンロードしたファイルと同じように機能します。※2018年1月11日11:25頃追記Microsoftが公開している方法では,ExecutionPolicyを変数として保存し,処理終了後に戻しています。公開したスクリプトではそれを行っていない点に懸念を抱く人がいるかもしれませんが,本バッチファイルではコマンドプロンプト上のPowerShellコマンド引数でExecutionPolicyを一時的に変更しているだけです。コマンドプロンプトのコマンド引数で指定されたExecutionPolicyは,そのセッションのみ有効で永続しません。このバッチファイルを実行してもExecutionPolicyが永続的に変更されたりすることはありません。次に,スタートボタンをクリックして,スタートメニューを開いた状態から「cmd」と入力。「コマンドプロンプト」が出てきたら,右クリック→「管理者として実行」を選ぶ。「ユーザーアカウント制御」が出たら[はい]をクリックすると,「管理者:コマンドプロンプト」のウインドウが開くはずだ。コマンドプロンプトを管理者で実行する「管理者:コマンドプロンプト」のウインドウが開けばOK以下,太字部分は実際に入力する文字列,[Enter][Y]は順に[Enter]キー,[Y]キーの押下を示すが,まず,次のように入力してほしい。1行めは解凍したファイルの在りかを指定し,2行めで実行している。c:\check[Enter]c:\check>check[Enter]ここまでの入力例すると実行が始まり,まず「セキュリティ警告」が出るので,[R][Enter]。待つと「実行にはNuGetプロバイダーが必要です」と出るので,今度は[Y][Enter]だ。待つと「信頼されていないリポジトリ」と出るので,ここでも[Y][Enter]とキーを叩く。信頼できないなら実行してはならないのだが,今回は4Gamerと筆者を信用してもらえればと考えている。ちなみに,本バッチファイルの初回実行時に表示される「信頼されていないリポジトリ」に関する警告は,Microsoftが公開したやり方に従って手動で行っても出てくるので,バッチファイル固有の問題というわけではない。「セキュリティ警告」では[R][Enter],「実行にはNuGetプロバイダーが必要です」と「信頼されていないリポジトリ」の両方では[Y][Enter]を押して先に進むそうすると,ずらずらと文字が並ぶはずだが,これが脆弱性検査結果となる。こんな感じで結果が出るウインドウサイズによっては結果が一部流れてしまうが,スクロールさせれば前に戻れるので安心してほしい。injection]」以下だ。一例をテキストで示しておこう。load]」以下がVariant3への対応状況を示す。(1)のところは,CPUのファームウェア(≒BIOS,UEFI)がアップデートされ,CPUのファームウェアレベルでVariant2対策が終わっていればTrueとなる。ここがFalseの場合は,まだ適切なBIOSアップデートを行えていないか,そもそも対策が不要ということになる。(2)はWindowsにVariant2対策がインストール済みならTrueとなり,(3)はその対策が有効になった状態のWindowsが実行中ならTrueとなる。(1)(2)(3)のすべてがTrueなら,Variant2対策済みというわけだ。1700搭載機でテストした結果。軒並みFalseとなるが,これで正常であるなお,Ryzen環境の場合,そもそもVariant2への対応は不要なので,テストを実行するとすべてFalseとなる。Ryzen搭載環境に手動でアップデートを導入するとWindowsが起動しなくなったりするらしいので,決して施さないようにしてほしい。「Ryzen系は対策不要」だ。話を戻すと,(4)は,CPUがVarian3対策を必要とする場合にTrueとなる。ここがFalseの場合は,「対策そのものが不要」であり,(5)〜(7)は無視して構わない。いうか,対策不要なCPUに対して無理に対策すれば,副作用が生じてしまう可能性のほうが高いだろう。筆者がテストした限り,Ryzenシリーズは(4)がFalseだった。AMDも「(Intelとは)アーキテクチャが違うため,Variant3の脆弱性を持たない」と断言しているので,RyzenはVariant3(=Meltdown)とも無縁ということになる。(5)(6)は先ほどの(2)(3)と同じで,Variant3対策がWindowsにインストールされていれば(5)がTrueに,対策が有効な状態でWindowsが実行中なら(6)がTrueになる。(4)がTrueの場合は,(5)(6)の両方がTrueならVariant3対策済みという理解でいい。2つある(7)については後ほど触れたい。思うかもしれないが,今回紹介する方法でチェックできるのはVariant2&3の対策周りだけである。Variant2と3への対策が済んでいれば(もしくは対策するまでもないなら),Variant1に対しても安全と考えて構わない。いうのも,Variant1とVariant2を組み合わせて初めて,Spectreという重大な脆弱性になるためだ。脆弱性対策による性能への影響はひととおりの対策を行ったMicrosoftは,北米時間1月9日付けで,「脆弱性対策が性能にどれだけの影響を与えるか」についての説明を,同社公式blogに掲載した。それによると,Variant1およびVariant3対策による性能への影響は最小限Variant2対策は性能に大して有意に負の影響があるとのことだ。対象となるCPUについては,大まかに次のとおりまとまっている。10の組み合わせでは,脆弱性対策により,「一部のベンチマーク」で大幅なスコアの低下が見られる。Serverでは,CPUを問わずI/O集約型(IO-intensive)のソフトウェアにおいて性能低下が顕著に見られる全体としては,「PCやOSの買い替えを促す」ような内容になっていると言っていい。最近,バッテリーの“へたった”旧型iPhoneにおける意図的な性能低下が大きな話題になったばかりだけに,「これも意図的なものか」と疑う人が出てきそうな内容とも言えるのではなかろうか。Micorosoftは「どうしてそうなるのか」についても簡単に触れている。Skylakeマイクロアーキテクチャ以降のCPUで性能低下がさほどでもないのは,IntelがSkylake以降に対して,「分岐予測の無効化範囲を間接ジャンプに限定する」という改良を施したことが影響だという。これにより,Variant2対策の影響が軽減したと,Microsoftは説明している。10に比べてカーネルモードとユーザーモードの行き来が頻発するためというのがMicrosoft側の説明だ。8.1における性能低下は,Variant3対策の影響だということが推測できるだろう。本件に関連して,Intelは北米時間1月5日,「脆弱性への対応をまとめた文書」を公開している(※リンクをクリックするとpdfファイルのダウンロードが始まります)ので,こちらも簡単に紹介しておきたい。Variant1対策Variant1に向けてIntelは「ソフトウェア的な対策」を提案している。具体的には「適切な箇所にLFENCE命令を挿入し,メモリの先読みを抑制する」というものだ。LFENCE命令とは,「当該命令以前の命令実行が終わるまで,その先のメモリを読まない」という命令だ。メモリアクセス順序を制御する命令としてはLEFENCE,SFENCE,MFENCEといった命令があるのだが,これらを適切に挿入することでVariant1は防げるというわけである。この対策を行うためにはソフトウェア開発ツール,具体的にはコンパイラの対応が必要で,Intelはコンパイラベンダーと共同で対応を進めるとしている。前述のとおり,Variant2の対策にはマイクロコードのアップデートが必要だが,Intelは文書の中で,マイクロコードに以下のとおり,3つの対策を施したとしている。Barrier(IBPB):コードの挙動によって間接分岐の予測が制御されることを防ぐこの3つがどう異なるのか,Intelは明言を避けているのだが,Microsoftのblogに書かれている内容も踏まえるに,「Skylake以降では,IBRSを使うことで,性能低下を比較的抑えることができている」ということではないかと思う。これら3つのマイクロコードによる対応だけでなく,ソフトウェア的な対策も行っていると,Intelは述べている。Trampoline」(略してretpoline)という方法を使い,リターンアドレスとして分岐先アドレスをスタックにプッシュし,ret命令で分岐するとのこと。トリッキーな,というか笑ってしまうようなやり方である。この方法だと分岐予測は効かない気もするので,性能低下抑制にはなりそうもないが,Intelはコンパイラベンダーと協力してretpolineの実装を進めたいとしている。ID)という仕組みを使ってカーネルアドレス空間とユーザーアドレス空間を分離する,「Dual-page-table」アプローチを推奨している。Intelによると,Dual-page-tableを用いれば,性能低下を抑えつつも,Variant3を悪用した攻撃を完全に防げるそうだ。Isolation)と改名された——という実装を紹介している。KPTIによる性能低下を抑えるには,Haswellマイクロアーキテクチャ以降でサポートされたINVPCIDという命令が必要になる。Bridge-E世代のCPUを搭載する環境でテストを実行した結果。Shadowing」(カーネル仮想アドレス隠し)だ。Shadowingが機能しているときにTrueになるのではないか」と推測している。Bridge以前のCPUではここがFalseになるだろう。検証していないので断言まではしないが,KVAShadowPcidEnabledがFalseになっているIntel製CPUで,Variant3対策による性能低下はかなり大きくなるのではなかろうか。Intel製CPU搭載環境では性能低下を免れ得ないというわけで,多かれ少なかれ性能低下は免れられないとまとめていいだろう。これから,さまざまなアプリケーションで性能低下の有無が検証されることになると思われるので,ゲーマーとしても,まだしばらくは情報を追っていく必要があるのではなかろうか。1単独では攻撃につながりにくく,ソフトウェア的な対策も進んでいるので,基本的には静観していて大丈夫だ。動揺して下手に手動で不要な修正をインストールしたりすると面倒なことになるので,触らぬ神に祟りなしである。脆弱性対策について,AMDから公式のアナウンスがありました。続報を用意したので,合わせて確認してください。本稿の表現は掲載当時のまま残しておきます。Googleが発見した「CPUの脆弱性」とは何なのか。毒物男子プロジェクト「Toxic-a-Holic」情報解禁生配信は11月9日に配信。9800X3D」レビュー。285K」は,ゲーマーが選ぶ価値のあるCPUなのか?[レビュー]単なるノスタルジーではない,あらゆる創作者に向けた愛あるメタフィクション。Song」の開発元にメールインタビュー。復讐のレクイエム」の楽曲を手掛けた気鋭のアメリカ人作曲家[インタビュー]ビーチバレーから恋愛アドベンチャーに。PRISM」は「DOAXVV」から6人の女の子が登場インタビュー一覧へスペシャルコンテンツ注目記事ランキング1「ポケポケ」,ラプラスexやピカチュウなどのカードが手に入る「ラプラスexドロップイベント」を開始。