VMware環境におけるL1TF(CVE-3646, CVE-3620, CVE-3615 /esx.problem.hyperthreading.unmitigated )への対処について

 

ご存知の方も多いと思いますが、2018年後半に
Intel社より重要な脆弱性の報告がありました。

上記の問題に対し現在もご質問を受ける事が多い為、今一度情報をまとめてみます。

 

対象のCVE番号

今回記事の対象としているCVE番号は以下の3つです。

・CVE-2018-3646 (今回主に紹介する脆弱性、foreshadow-VMMとなります)
・CVE-2018-3620 (foreshadow-OS)
・CVE-2018-3615 (foreshadow)

一連のCVEに関する問題

本問題に気付かれるタイミングとして、以下のどちらかが多い印象です。

・定期的なセキュリティ診断時
・ESXiアップデート完了に後出現した警告  ( esx.problem.hyperthreading.unmitigated )

 

では実際に本問題の脆弱性とはどのようなものなのでしょうか。

 

本問題は"L1TF (L1 Terminal Fault)" と総称されております。
※ この"L1"とは CPUのL1 Cacheを指しております。
 参考程度にテスト用筐体のsmBiosDump情報を持ってきました。

Processor Info: #1024
Payload length: 0x2a
Socket: "CPU1"
Socket Type: 0x2b (Socket LGA2011-3)
Socket Status: Populated
Type: 0x03 (CPU)
Family: 0xb3 (Xeon)
Manufacturer: "Intel"
Version: "Intel(R) Xeon(R) CPU E5-4610 v4 @ 1.80GHz"
Processor ID: XXXXXXXXXXXXXXX
Status: 0x01 (Enabled)
Voltage: 1.3 V
External Clock: 6400 MHz
Max. Speed: 4000 MHz
Current Speed: 1800 MHz
L1 Cache: #1792
L2 Cache: #1793
L3 Cache: #1794
Core Count: #10
Core Enabled Count: #10
Thread Count: #20

 

Cache Info: #1792
Level: L1
State: Enabled
Mode: 0x01 (Write Back)
Location: 0x00 (Internal, Not Socketed)
ECC: 0x04 (Parity)
Type: 0x05 (Unified)
Associativity: 0x07 (8-way Set-Associative)
Max. Size: 640 kB
Current Size: 640 kB
Supported SRAM Types: 0x0002 (Unknown)
Current SRAM Type: 0x0002 (Unknown)

 

CVE-3615として報告されている内容の実演があります。

https://foreshadowattack.eu/

このCVE-3615は"foreshadow" と命名され、このCVE-3615のいわば"亜種"として
CVE-3620 / CVE-3646が報告されています。

 

脆弱性の内容について報告されているリンクは以下となります。

CVE-3615:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3615

Systems with microprocessors utilizing speculative execution and Intel software guard extensions (Intel SGX) may allow unauthorized disclosure of information residing in the L1 data cache from an enclave to an attacker with local user access via a side-channel analysis.

 

CVE-3620:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3620

Systems with microprocessors utilizing speculative execution and address translations may allow unauthorized disclosure of information residing in the L1 data cache to an attacker with local user access via a terminal page fault and a side-channel analysis.

 

CVE-3646:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3646

Systems with microprocessors utilizing speculative execution and address translations may allow unauthorized disclosure of information residing in the L1 data cache to an attacker with local user access with guest OS privilege via a terminal page fault and a side-channel analysis.

 

 

今回問題の根幹となっている"投機的実行"とは一体どのようなものなのでしょうか。
この"投機的実行"とは、ざっくり言うと
"ある計算の実行中に、推測される実行結果後の作業を前もってやっておく"
"前もって作業した結果のうち、当てはまらなかった分岐の作業は破棄する"

 文字で読んで何となく想像できるように、この機能はCPUの効率的な使用と
パフォーマンスの向上に一役買っている機能となります。

 

本問題に関する対処について

本問題についてはそれぞれ以下のレイヤで対処が必要となります。

1. ハードウェアレイヤ (BIOS)
2. ハイパーバイザ
3. GuestOS

本問題の対処について、本記事ではハードウェア・ESXiに焦点を当て確認します。

 

1. ハードウェアレイヤ (BIOS)

こちらはサーバ・クライアント製品をご使用されている各ベンダーにて
確認が必要です。

例えばDELL EMC社からは以下外部KBが公開されております。https://www.dell.com/support/article/jp/ja/jpbsd1/sln318303/ja

PowerEdge等のサーバ製品・Precision等のPC製品について、
必要なマイクロコードはBIOSのアップデートが必要です。

サーバ製品向け:
https://www.dell.com/support/article/jp/ja/jpbsd1/sln309851/ja

クライアント製品向け:
https://www.dell.com/support/article/jp/ja/jpbsd1/sln309853/ja

 

 

2. ハイパーバイザ(ESXi)

ESXiレイヤで作業をする事で対処可能な脆弱性はCVE-3646 となります。 

Security Advisoriesページは以下となります。

https://www.vmware.com/security/advisories/VMSA-2018-0020.html

URL内の表に "Replace_with/Apply_Patch" 行がありますので
当てはまる製品において、最低でもこのバージョンへのアップデートが必要です。

 

ESXiでの対処全般については以下に記載があります。
上記のAdvisoryページと合わせて確認をしましょう。

https://kb.vmware.com/s/article/55636

・CVE-2018-3646 (L1 Terminal Fault - VMM)
Mitigation of CVE-2018-3646 requires Hypervisor-Specific Mitigations for hosts running on Intel hardware.
・CVE-2018-3620 (L1 Terminal Fault - OS)
Mitigation of CVE-2018-3620 requires Operating System-Specific Mitigations.
・CVE-2018-3615 (L1 Terminal Fault - SGX)
CVE-2018-3615 does not affect VMware products and/or services. See KB54913 for more information.logical processor of the hyperthreading-enabled processor core.

 

CVE-3646の詳細については以下KBに記載がされています。
https://kb.vmware.com/s/article/55806

 

CVE-3646で報告されている攻撃方法は以下の二つです。
・Sequential-context attack vector:
a malicious VM can potentially infer recently accessed L1 data of a previous context (hypervisor thread or other VM thread) on either logical processor of a processor core.

・Concurrent-context attack vector:
a malicious VM can potentially infer recently accessed L1 data of a concurrently executing context (hypervisor thread or other VM thread) on the other logical processor of the hyperthreading-enabled processor core.

 

このCVE-3646は以下を満たしてしまうことで危険に晒されるものとなります。

・同一コアに2つのVMが同時に存在する
・そのうち片方が悪意あるVMである

本来ESXiは"vCPU"の形でコアごとに分割して割り当てるため、
一見問題は無いように見受けられますが
ハイパースレッディング機能がこの条件を満たしてしまうと報告されています。

一つの物理コアが、ハイパースレッディング機能により論理コアに分割され
その論理コアを最小単位としてVMに割り当ててしまうことができる為
一つの物理コアを、二つのVMが同時に掴んでしまう状況が発生しうる...という事です。

片方の悪意あるVMがL1TFを意図的に引き起こすことで保護機能が一時的に停止し、
もう片側のVMに関するL1 Cache情報を抜き取る事が出来てしまいます。

 

ESXiレイヤで対処をするためには上記2つへの攻撃対処が必要となり、
基本はアップデートが対処策となります。
しかしながらアップデートだけで作業は終わりではありません。

まず"Sequential-context attack vector"ですが、こちらはESXiのアップデートにより
自動で対処完了の状態となります。
※ アップデートバージョンについては上述のAdvisoryページを確認ください。

 

問題は"Concurrent-context attack vector" です。
このConcurrent-context attack vectorに関する対処をする際、パフォーマンスの大きな低下が想定されるケースが存在すると
vmware社公式の見解として発表されています。

参考:https://kb.vmware.com/articleview?docid=55767

理由は単純で、ハイパースレッディング機能を無効にするのと非常に近しい設定を
ESXi上で設定する事が理由です。

パフォーマンスの低下が見込まれる以上、アップデートで自動有効にされていないのも頷ける状況です。

KB55806にも以下記載があるように、あくまで使用者で責任をもって有効無効を決定し
vmware社はその決定に責任を負わない事が明記されています。
This is NOT RECOMMENDED and VMware cannot make this decision on behalf of an organization.

なおKB55806の中には2種類の記載があります。
これはESXi 6.7U2未満であるか否かにより手順が変わると記載されているものです。

a. Enable the ESXi Side-Channel-Aware Scheduler in ESXi 5.5, 6.0, 6.5, and 6.7 prior to 6.7u2.
b. Enable the ESXi Side-Channel-Aware Scheduler (SCAv1) or the ESXi Side-Channel-Aware Scheduler v2 (SCAv2) in ESXi 6.7u2 (13006603) or later

ESXi6.7 U2未満はaを、6.7U2を含むそれ以降はbを確認する必要があります。

なおどちらの手順であってもHostの再起動が必要となります。

 

他方、パフォーマンス低下を容認せず、対処をしない選択をする事も可能です。
その場合はこのアラートをサイレンス処理する事も可能です。

参考となる外部公開KBは以下です。 
 https://kb.vmware.com/articleview?docid=57374

 

具体的には、"UserVars.SuppressHyperthreadWarning" の値を
VMで"0"から"1"へ変えておきます。

この詳細設定の変更はESXiの再起動を必要としませんが、各ホストの台数分作業が
必要となるので気を付けておきましょう。