CPUのセキュリティ修正による性能低下を回避する方法

VRではCPUの性能が重要ですが、先日Windows Updateで配布された修正パッチを適用すると性能が低下してしまいます。どの程度性能が低下するのか、性能低下を回避するにはどうすれば良いかを紹介します。

この記事は

IntelのCPUにあるセキュリティ面の欠陥(脆弱性)を修正するため、2018年1月4日にWindows Updateにて修正プログラムKB4056892の配布が開始されました。

この欠陥はMeltdown(またはrogue data cache load)と呼ばれており、対策のためにはWindowsカーネルの挙動(より正確にはメモリ配置)を大きく変更する必要がありました。そのため修正には性能の低下を伴います

Windowsカーネル自体には、この挙動の変更を前の状態に戻し、性能低下を回避する方法が用意されています。この方法はサーバ向けOSであるWindows Server向けに用意されたものですが、クライアントOSであるWindows10にも適用可能な様ですのでその設定方法を紹介します。

注意

本来必要であるセキュリティ修正を敢えて無効にしていますから、この設定にはリスクも存在します。この記事をよく読み、何をやっているのか理解できる人のみが設定を行って下さい。

どれぐらい性能が低下する?

Intelがレポートを出しています。

Skylake移行の最近のCPUにおいて、3Dmarkと呼ばれるゲームのベンチマークで1-3%、PCmarkと呼ばれるビジネス向けベンチマークで8%純粋な計算では10%以上の性能低下が見られます。より昔のCPUでは性能の低下がより激しいそうですが、ベンチマークはまだ公開されていないようです。

i7-8600Kで色々なゲームを動かした場合の動画がありましたので、こちらも紹介しておきます。やはり影響が無いとは言えないようです。

このセキュリティ修正を無効にするとどんな危険がある?

専門家では無いので鵜呑みにはせず、ご自身でも確認してください。

rogue data cache loadと呼ばれる脆弱性は、本来アプリケーションから見えてはいけないWindowsカーネルのメモリが読み取れてしまう、というものです。ウィルスなどのプログラムを直接送り込まれてしまうような脆弱性ではありません。そのため、ブラウザ側に悪意のあるプログラムを受け入れてしまう欠陥(任意コード実行の脆弱性)があったり、出自の怪しいプログラム実行した場合に影響がある、と言えます。

Windowsカーネルのメモリにどのようなものが記録されており、どのような危険性があるのかは把握できていませんが、この脆弱性の報告をした論文ではFirefoxのパスワードマネージャにかかった認証を突破してパスワードマネージャのパスワードを表示状態にする例が掲載されています。

他にも、ログインしているユーザのパスワードだったり、HDDの暗号化を有効にしている場合にその鍵だったりを一般のプログラムから抜き出せてしまう可能性はあります。

もともとユーザのパスワードを設定していない(もしくはすぐに分かるようなぐらい短い)場合や、HDDの暗号化を有効にしていない場合はリスクは低いのかもしれません。しかしながら、PCを完全にVR専用でオフラインでしか使わない、その上信頼できるアプリしかインストールしない、といった限定された状況においてのみ無効化するのが得策です。

設定方法

Windowsのコマンドプロンプトを開き、以下のコマンドを入力して再起動して下さい。

セキュリティ修正の無効化

reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management” /v FeatureSettingsOverride     /t REG_DWORD /d 3 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management” /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

セキュリティ修正の無効化の解除

reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management” /v FeatureSettingsOverride     /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management” /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

設定の確認方法

下準備

確認にはPowerShellと呼ばれる言語で書かれたスクリプトを利用します。

PowerShellプロンプトの起動

Windows10の場合、まずスタートメニューを右クリックし、Windows PowerShell(管理者)を選びます。
成功すると以下のような文字が出力されたウィンドウが開きます。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32>

外部スクリプトの利用設定の変更

ウィンドウにSet-ExecutionPolicy Bypassと入力します。そうすると実行しても良いかを聞かれるのでyを入力します。

PS C:\WINDOWS\system32> Set-ExecutionPolicy Bypass

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

判定スクリプトのインストール

続いてInstall-Module SpeculationControlと入力します。その後、同じように実行しても良いかを聞かれるのでyを2回入力します。

PS C:\WINDOWS\system32> Install-Module SpeculationControl

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\b\AppData\Local\PackageManagement\ProviderAssemblies' に配置する必要があります。'Install-PackageProvider
-Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。今すぐ
PowerShellGet で NuGet プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

判定方法

PowerShellのウィンドウにGet-SpeculationControlSettingsと入力します。

セキュリティ修正が有効な状態の出力例

KB4056892をインストールした直後のセキュリティ修正が有効な状態(=性能が低下している状態)では、以下のような文章が出力されます。

PS C:\WINDOWS\system32> Get-SpeculationControlSettings
Speculation control settings for CVE-2017-5715 [branch target injection]
For more information about the output below, please refer to https://support.microsoft.com/en-in/help/4074629

Hardware support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is present: True
Windows OS support for branch target injection mitigation is enabled: False
Windows OS support for branch target injection mitigation is disabled by system policy: False
Windows OS support for branch target injection mitigation is disabled by absence of hardware support: True

Speculation control settings for CVE-2017-5754 [rogue data cache load]

Hardware requires kernel VA shadowing: True
Windows OS support for kernel VA shadow is present: True
Windows OS support for kernel VA shadow is enabled: True
Windows OS support for PCID performance optimization is enabled: True [not required for security]

Suggested actions

 * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.


BTIHardwarePresent             : False
BTIWindowsSupportPresent       : True
BTIWindowsSupportEnabled       : False
BTIDisabledBySystemPolicy      : False
BTIDisabledByNoHardwareSupport : True
KVAShadowRequired              : True
KVAShadowWindowsSupportPresent : True
KVAShadowWindowsSupportEnabled : True
KVAShadowPcidEnabled           : True

KB4056892による性能低下部分に関わってくるのは Windows OS support for kernel VA shadow is enabled の部分です。ここがTrueだとセキュリティは高い反面性能が下がるメモリ配置になっています。

セキュリティ修正を無効化状態の出力例

この記事の方法を実行し、セキュリティ修正が無効な状態(=性能が低下を回避している状態)では、以下のような文章が出力されます。

PS C:\WINDOWS\system32> Get-SpeculationControlSettings
Speculation control settings for CVE-2017-5715 [branch target injection]
For more information about the output below, please refer to https://support.microsoft.com/en-in/help/4074629

Hardware support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is present: True
Windows OS support for branch target injection mitigation is enabled: False
Windows OS support for branch target injection mitigation is disabled by system policy: True
Windows OS support for branch target injection mitigation is disabled by absence of hardware support: True

Speculation control settings for CVE-2017-5754 [rogue data cache load]

Hardware requires kernel VA shadowing: True
Windows OS support for kernel VA shadow is present: True
Windows OS support for kernel VA shadow is enabled: False

Suggested actions

 * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
 * Follow the guidance for enabling Windows Client support for speculation control mitigations described in https://support.microsoft.com/help/4073119


BTIHardwarePresent             : False
BTIWindowsSupportPresent       : True
BTIWindowsSupportEnabled       : False
BTIDisabledBySystemPolicy      : True
BTIDisabledByNoHardwareSupport : True
KVAShadowRequired              : True
KVAShadowWindowsSupportPresent : True
KVAShadowWindowsSupportEnabled : False
KVAShadowPcidEnabled           : False

Windows OS support for kernel VA shadow is enabled がFalseになっており、修正が無効化されているので、有効化するような案内が追記されています。

Follow the guidance for enabling Windows Client support for speculation control mitigations described in https://support.microsoft.com/help/4073119

この文章で紹介されているURLである https://support.microsoft.com/help/4073119 の内容はこの記事の元になっています。このページの内容の方がより詳しく説明されていますので、気になる方は読んでみてください。

KB4056892インストール前の出力例

KB4056892をインストールする前はこのような出力になっています。前述の例と一致しない場合はWindows Updateが適用されていないかもしれませんから、この例のような出力になっていないか確認してみてください。

PS C:\WINDOWS\system32> Get-SpeculationControlSettings
Speculation control settings for CVE-2017-5715 [branch target injection]
For more information about the output below, please refer to https://support.microsoft.com/en-in/help/4074629

Hardware support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is enabled: False

Speculation control settings for CVE-2017-5754 [rogue data cache load]

Hardware requires kernel VA shadowing: True
Windows OS support for kernel VA shadow is present: False
Windows OS support for kernel VA shadow is enabled: False

Suggested actions

 * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
 * Install the latest available updates for Windows with support for speculation control mitigations.
 * Follow the guidance for enabling Windows Client support for speculation control mitigations described in https://support.microsoft.com/help/4073119


BTIHardwarePresent             : False
BTIWindowsSupportPresent       : False
BTIWindowsSupportEnabled       : False
BTIDisabledBySystemPolicy      : False
BTIDisabledByNoHardwareSupport : False
KVAShadowRequired              : True
KVAShadowWindowsSupportPresent : False
KVAShadowWindowsSupportEnabled : False
KVAShadowPcidEnabled           : False

Install the latest available updates for Windows with support for speculation control mitigations.

このようにWindows Updateを促す文章が増えています。

最後に

Windows UpdateによるIntel CPUの性能低下を回避する方法を紹介しました。最初に書いたとおり、この設定にはリスクがあります。内容が理解できない場合は設定しないようにしてください。

このような設定を不要にするには今後発売されるIntelのCPU(おそらくCore i7 9700のような9系の型番の物)かAMDのRyzenに乗り換えるしかありません。長期間修正を無効化するのはあまり好ましくはありませんので、乗り換えないにしても性能低下を受け入れる覚悟も必要かもしれません。