Azure での予測実行のサイドチャネルの脆弱性を軽減するためのガイダンスGuidance for mitigating speculative execution side-channel vulnerabilities in Azure

ドキュメントの最終更新日:2019 年 6 月 4 日午後 3:00 PST。Last document update: 4 June 2019 3:00 PM PST.

投機的実行のサイドチャネル攻撃として知られる新たな CPU 脆弱性クラスを開示したところ、よりわかりやすい説明を求めて、お客様からさまざまな質問が寄せられています。The disclosure of a new class of CPU vulnerabilities known as speculative execution side-channel attacks has resulted in questions from customers seeking more clarity.

Microsoft は、クラウド サービス全体に軽減策を展開しました。Microsoft has deployed mitigations across all our cloud services. Azure を実行し、顧客ワークロードを互いに分離するインフラストラクチャは保護されています。The infrastructure that runs Azure and isolates customer workloads from each other is protected. つまり同じインフラストラクチャを使用する潜在的な攻撃者が、これらの脆弱性を利用してお客様のアプリケーションを攻撃することはできません。This means that a potential attacker using the same infrastructure can’t attack your application using these vulnerabilities.

Azure では、可能な限りメモリ保持メンテナンスを利用することで、お客様への影響を極力少なくし、再起動を不要にしています。Azure is using memory preserving maintenance whenever possible, to minimize customer impact and eliminate the need for reboots. システム全体に及ぶ更新をホストに対して行う際は、引き続きこうした手法を活用しながらお客様を保護してまいります。Azure will continue utilizing these methods when making systemwide updates to the host and protect our customers.

Azure にさまざまな角度から組み込まれているセキュリティについて詳しくは、「Azure のセキュリティのドキュメント」サイトをご覧ください。More information about how security is integrated into every aspect of Azure is available on the Azure Security Documentation site.

注意

このドキュメントが初めて公開されて以来、この脆弱性クラスについて同様の記事がいくつか開示されてきました。Since this document was first published, multiple variants of this vulnerability class have been disclosed. Microsoft は今後もお客様の保護とガイダンスの提供に積極的に投資していく予定です。Microsoft continues to be heavily invested in protecting our customers and providing guidance. 引き続き解決策を公開していくために、このページは随時更新されます。This page will be updated as we continue to release further fixes.

2019 年 5 月 14 日、Intel は Microarchitectural Data Sampling (MDS) と呼ばれる、新たな投機的実行サイド チャネルの脆弱性を公開しました。MDS については、Microsoft のセキュリティ ガイダンス ADV190013 を参照してください。これには、複数の CVE が割り当てられています。On May 14, 2019, Intel disclosed a new set of speculative execution side channel vulnerability known as Microarchitectural Data Sampling (MDS see the Microsoft Security Guidance ADV190013), which has been assigned multiple CVEs:

  • CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)
  • CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)
  • CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)
  • CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)

この脆弱性が影響を及ぼすのは Intel® Core® プロセッサと Intel® Xeon® プロセッサです。This vulnerability affects Intel® Core® processors and Intel® Xeon® processors. Microsoft Azure はオペレーティング システムの更新プログラムをリリースしており、この脆弱性からお客様を保護するために、Intel から公開された新しいマイクロコードをすべてのフリートでデプロイしています。Microsoft Azure has released operating system updates and is deploying new microcode, as it is made available by Intel, throughout our fleet to protect our customers against these new vulnerabilities. Azure は Intel と緊密に連携し、プラットフォーム上での正式なリリース前に新しいマイクロコードのテストと検証を行っています。Azure is closely working with Intel to test and validate the new microcode prior to its official release on the platform.

VM 内で信頼されていないコードを実行しているお客様は、すべての投機的実行サイド チャネルの脆弱性に関する追加のガイダンス (Microsoft アドバイザリ ADV 180002180018、および 190013) を参照し、この脆弱性から保護するための対策を講じる必要があります。Customers that are running untrusted code within their VM need to take action to protect against these vulnerabilities by reading below for additional guidance on all speculative execution side-channel vulnerabilities (Microsoft Advisories ADV 180002, 180018, and 190013).

それ以外のお客様は、多層防御の観点から脆弱性を評価し、選択した構成のセキュリティとパフォーマンスに関する関連事項を考慮する必要があります。Other customers should evaluate these vulnerabilities from a Defense in Depth perspective and consider the security and performance implications of their chosen configuration.

オペレーティング システムを最新の状態に保つKeeping your operating systems up-to-date

Azure 上で実行するアプリケーションを他の Azure ユーザーから切り離すために必ずしも OS の更新は必要ありませんが、ソフトウェアは常に最新に保つことをお勧めします。While an OS update is not required to isolate your applications running on Azure from other Azure customers, it is always a best practice to keep your software up-to-date. Windows の最新のセキュリティ ロールアップには、投機的実行について、いくつかのサイドチャネルの脆弱性に対する軽減策が含まれています。The latest Security Rollups for Windows contain mitigations for several speculative execution side channel vulnerabilities. 同様に、Linux ディストリビューションからも、これらの脆弱性に対処するための更新プログラムが複数リリースされています。Similarly, Linux distributions have released multiple updates to address these vulnerabilities. オペレーティング システムを更新するうえで Microsoft が推奨している対策は以下のとおりです。Here are our recommended actions to update your operating system:

サービスOffering 推奨される操作Recommended Action
Azure クラウド サービスAzure Cloud Services 自動更新を有効にするか、最新のゲスト OS を実行していることを確認します。Enable auto update or ensure you are running the newest Guest OS.
Azure Linux Virtual MachinesAzure Linux Virtual Machines オペレーティング システムの提供元から入手した更新プログラムをインストールします。Install updates from your operating system provider. 詳細については、このドキュメントで後述する Linux に関する情報を参照してください。For more information, see Linux later in this document.
Azure Windows Virtual MachinesAzure Windows Virtual Machines 最新のセキュリティ ロールアップをインストールします。Install the latest security rollup.
その他の Azure PaaS サービスOther Azure PaaS Services これらのサービスを使用している顧客がとる必要のある操作はありません。There is no action needed for customers using these services. Azure では、お使いの OS バージョンが自動的に最新に保たれます。Azure automatically keeps your OS versions up-to-date.

信頼できないコードを実行する場合の追加のガイダンスAdditional guidance if you are running untrusted code

信頼できないユーザーに任意のコードの実行を許可している場合、Azure Virtual Machines または Cloud Services 内に追加的なセキュリティ機能を導入したいことがあります。Customers who allow untrusted users to execute arbitrary code may wish to implement some additional security features inside their Azure Virtual Machines or Cloud Services. 投機的実行に関するいくつかの脆弱性によって説明されるプロセス間の情報漏えいベクターは、こうした機能によって保護することになります。These features protect against the intra-process disclosure vectors that several speculative execution vulnerabilities describe.

追加的なセキュリティ機能が推奨されるシナリオの例を次に示します。Example scenarios where additional security features are recommended:

  • 信頼できないコードに VM 内での実行を許可している。You allow code that you do not trust to run inside your VM.
    • "バイナリまたはスクリプトのアップロードをいずれかの顧客に許可していて、その後、そのコードを自分がアプリケーション内で実行してしまうなど"。For example, you allow one of your customers to upload a binary or script that you then execute within your application.
  • 信頼できないユーザーに、権限の低いアカウントを使って自分の VM にログインすることを許可している。You allow users that you do not trust to log into your VM using low privileged accounts.
    • "リモート デスクトップや SSH を使っていずれかの VM にログインすることを権限の低いユーザーに許可しているなど"。For example, you allow a low-privileged user to log into one of your VMs using remote desktop or SSH.
  • 入れ子になった仮想化を使って導入された仮想マシンにアクセスすることを、信頼できないユーザーに許可している。You allow untrusted users access to virtual machines implemented via nested virtualization.
    • "Hyper-V ホストを管理しているのは自分だが、その VM を信頼できないユーザーに割り当てているなど"。For example, you control the Hyper-V host, but allocate the VMs to untrusted users.

信頼できないコードに関するシナリオが該当しないのであれば、追加のセキュリティ機能を有効にする必要はありません。Customers who do not implement a scenario involving untrusted code do not need to enable these additional security features.

追加のセキュリティの有効化Enabling additional security

信頼されていないコードを実行している場合は、VM 内またはクラウド サービス内で追加的なセキュリティ機能を有効にすることができます。You can enable additional security features inside your VM or Cloud Service if you are running untrusted code. VM 内またはクラウド サービス内でセキュリティ機能を有効にするために、オペレーティング システムが最新の状態になっていることも並行して確認してくださいIn parallel, ensure your operating system is up-to-date to enable security features inside your VM or Cloud Service

WindowsWindows

そうした追加的なセキュリティ機能を有効にするためには、対象のオペレーティング システムが最新の状態にあることが必要です。Your target operating system must be up-to-date to enable these additional security features. 投機的実行のサイドチャネルに関しては、さまざまな軽減策が既定で有効になっていますが、ここで説明する追加的な機能は手動で有効にする必要があり、またパフォーマンスに影響を及ぼすことがあります。While numerous speculative execution side channel mitigations are enabled by default, the additional features described here must be enabled manually and may cause a performance impact.

手順 1:VM 上でハイパースレッディングを無効にする - ハイパースレッド化された VM 上で信頼されていないコードを実行しているお客様は、ハイパースレッディングを無効にするか、ハイパースレッド化されていない VM サイズに移す必要があります。Step 1: Disable hyper-threading on the VM - Customers running untrusted code on a hyper-threaded VM will need to disable hyper-threading or move to a non-hyper-threaded VM size. ハイパースレッド化された VM サイズの一覧についてはこちらのドキュメントを参照してください (ここで、vCPU とコアの比率は 2:1 です)。Reference this doc for a list of hyper-threaded VM sizes (where ratio of vCPU to Core is 2:1). VM でハイパースレッディングが有効になっているかどうかを確認するには、VM 内で Windows コマンド ラインを使用して以下のスクリプトを参照してください。To check if your VM has hyper-threading enabled, please refer to the below script using the Windows command line from within the VM.

対話型インターフェイスを起動するには、wmic と入力します。Type wmic to enter the interactive interface. 次に、以下を入力して、VM 上の物理および論理プロセッサの量を表示します。Then type the below to view the amount of physical and logical processors on the VM.

CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List

論理プロセッサの数が物理プロセッサ (コア) よりも多い場合は、ハイパースレッディングが有効になっています。If the number of logical processors is greater than physical processors (cores), then hyper-threading is enabled. ハイパースレッド化された VM を実行している場合は、Azure サポートに問い合わせて、ハイパースレッディングを無効にしてください。If you are running a hyper-threaded VM, please contact Azure Support to get hyper-threading disabled. ハイパースレッディングが無効になると、VM の完全な再起動が必要になりますOnce hyper-threading is disabled, support will require a full VM reboot. VM コア数が減少した理由については、「コア数」を参照してください。Please refer to Core count to understand why your VM core count decreased.

手順 2:手順 1 と並行して KB4072698 の手順に従い、SpeculationControl PowerShell モジュールを使って、保護が有効になっていることを確認します。Step 2: In parallel to Step 1, follow the instructions in KB4072698 to verify protections are enabled using the SpeculationControl PowerShell module.

注意

このモジュールをダウンロード済みであっても、インストールするのは最新バージョンであることが必要です。If you previously downloaded this module, you will need to install the newest version.

PowerShell スクリプトの出力には、この脆弱性からの保護が有効になっていることを確認するための以下の値が含まれている必要があります。The output of the PowerShell script should have the below values to validate enabled protections against these vulnerabilities:

Windows OS support for branch target injection mitigation is enabled: True
Windows OS support for kernel VA shadow is enabled: True
Windows OS support for speculative store bypass disable is enabled system-wide: False
Windows OS support for L1 terminal fault mitigation is enabled: True
Windows OS support for MDS mitigation is enabled: True

出力に MDS mitigation is enabled: False と示されている場合、使用可能な軽減策のオプションについて Azure サポートに問い合わせてくださいIf the output shows MDS mitigation is enabled: False, please contact Azure Support for available mitigation options.

手順 3:カーネル仮想アドレス シャドウ処理 (KVAS) とブランチ ターゲット インジェクション (BTI) の OS サポートを有効にするには、KB4072698 の指示に従い、Session Manager のレジストリ キーを使用して保護を有効にします。Step 3: To enable Kernel Virtual Address Shadowing (KVAS) and Branch Target Injection (BTI) OS support, follow the instructions in KB4072698 to enable protections using the Session Manager registry keys. 再起動が必要となります。A reboot is required.

手順 4:入れ子式の仮想化でデプロイする場合 (D3 と E3 のみ):これらの手順は、Hyper-V ホストとして使用している VM 内で適用されます。Step 4: For deployments that are using nested virtualization (D3 and E3 only): These instructions apply inside the VM you are using as a Hyper-V host.

  1. KB4072698 の指示に従い、MinVmVersionForCpuBasedMitigations のレジストリ キーを使用して保護を有効にします。Follow the instructions in KB4072698 to enable protections using the MinVmVersionForCpuBasedMitigations registry keys.
  2. こちらの手順に従って、ハイパーバイザーのスケジューラの種類を Core に設定します。Set the hypervisor scheduler type to Core by following the instructions here.

LinuxLinux

追加的なセキュリティ機能一式を内部で有効にするためには、対象のオペレーティング システムが完全に最新の状態にあることが必要です。Enabling the set of additional security features inside requires that the target operating system be fully up-to-date. 一部の軽減策については、既定で有効になります。Some mitigations will be enabled by default. 次のセクションで説明している内容は、既定でオフになっている機能や、ハードウェア サポート (マイクロコード) に依存している機能が対象となります。The following section describes the features which are off by default and/or reliant on hardware support (microcode). これらの機能を有効にすると、パフォーマンスに影響が生じることがあります。Enabling these features may cause a performance impact. 詳しい手順については、オペレーティング システムの提供元のドキュメントを参照してください。Reference your operating system provider’s documentation for further instructions

手順 1:VM 上でハイパースレッディングを無効にする - ハイパースレッド化された VM 上で信頼されていないコードを実行しているお客様は、ハイパースレッディングを無効にするか、ハイパースレッド化されていない VM に移す必要があります。Step 1: Disable hyper-threading on the VM - Customers running untrusted code on a hyper-threaded VM will need to disable hyper-threading or move to a non-hyper-threaded VM. ハイパースレッド化された VM サイズの一覧についてはこちらのドキュメントを参照してください (ここで、vCPU とコアの比率は 2:1 です)。Reference this doc for a list of hyper-threaded VM sizes (where ratio of vCPU to Core is 2:1). ハイパースレッド化された VM を実行しているかどうかを確認するには、Linux VM で lscpu コマンドを実行します。To check if you are running a hyper-threaded VM, run the lscpu command in the Linux VM.

Thread(s) per core = 2 の場合、ハイパースレッディングが有効になっています。If Thread(s) per core = 2, then hyper-threading has been enabled.

Thread(s) per core = 1 の場合、ハイパースレッディングが無効になっています。If Thread(s) per core = 1, then hyper-threading has been disabled.

ハイパースレッディングが有効になっている VM の出力例:Sample output for a VM with hyper-threading enabled:

CPU Architecture:      x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1

ハイパースレッド化された VM を実行している場合は、Azure サポートに問い合わせて、ハイパースレッディングを無効にしてください。If you are running a hyper-threaded VM, please contact Azure Support to get hyper-threading disabled. ハイパースレッディングが無効になると、VM の完全な再起動が必要になりますOnce hyper-threading is disabled, support will require a full VM reboot. VM コア数が減少した理由については、「コア数」を参照してください。Please refer to Core count to understand why your VM core count decreased.

手順 2:以下のいずれかの投機的実行サイド チャネルの脆弱性を軽減する場合は、お使いのオペレーティング システム プロバイダーのドキュメントを参照してください。Step 2: To mitigate against any of the below speculative execution side-channel vulnerabilities, refer to your operating system provider’s documentation:

コア数Core count

ハイパースレッド化された VM が作成されると、Azure によってコアあたり 2 つのスレッドが割り当てられます。これらは vCPU と呼ばれます。When a hyper-threaded VM is created, Azure allocates 2 threads per core - these are called vCPUs. ハイパースレッディングが無効にされると、Azure によってスレッドが削除され、1 つのスレッド化されたコア (物理コア) が表示されます。When hyper-threading is disabled, Azure removes a thread and surfaces up single threaded cores (physical cores). vCPU と CPU の比率は 2:1 なので、ハイパースレッディングが無効になると、VM 内の CPU 数は半分に減少したように見えます。The ratio of vCPU to CPU is 2:1, so once hyper-threading is disabled, the CPU count in the VM will appear to have decreased by half. たとえば、D8_v3 VM は、8 個の vCPU (コアあたり 2 スレッド × 4 コア) 上で実行されるハイパースレッド化された VM です。For example, a D8_v3 VM is a hyper-threaded VM running on 8 vCPUs (2 threads per core x 4 cores). ハイパースレッディングが無効にされると、CPU はコアあたり 1 スレッドの 4 物理コアに低下します。When hyper-threading is disabled, CPUs will drop to 4 physical cores with 1 thread per core.

次の手順Next steps

この記事では、多くの最新のプロセッサに影響を与える、以下の投機的実行サイド チャネル攻撃のガイダンスを提供しています。This article provides guidance to the below speculative execution side-channel attacks that affect many modern processors:

Spectre Meltdown:Spectre Meltdown:

  • CVE-2017-5715 - ブランチ ターゲット インジェクション (BTI)CVE-2017-5715 - Branch Target Injection (BTI)
  • CVE-2017-5754 - カーネル ページ テーブル アイソレーション (KPTI)CVE-2017-5754 - Kernel Page Table Isolation (KPTI)
  • CVE-2018-3639 - 投機的ストア バイパス (KPTI)CVE-2018-3639 – Speculative Store Bypass (KPTI)

L1 ターミナル フォールト (L1TF):L1 Terminal Fault (L1TF):

  • CVE-2018-3615 - Intel ソフトウェア ガード エクステンションズ (Intel SGX)CVE-2018-3615 - Intel Software Guard Extensions (Intel SGX)
  • CVE-2018-3620 - オペレーティング システム (OS) およびシステム管理モード (SMM)CVE-2018-3620 - Operating Systems (OS) and System Management Mode (SMM)
  • CVE-2018-3646 - Virtual Machine Manager (VMM) への影響CVE-2018-3646 – impacts Virtual Machine Manager (VMM)

Microarchitectural Data Sampling:Microarchitectural Data Sampling:

  • CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)
  • CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)
  • CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)
  • CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)