投機的ストアバイパスを使用したカーネルのサイドチャネル攻撃 - CVE-2018-3639
この情報は役に立ちましたか?
Red Hat では、現代のマイクロプロセッサーに存在する脆弱性を認識しています。この問題では、Linuxカーネル、仮想化関連のコンポーネントの更新と、マイクロコードの更新が必要となります。権限のない攻撃者はこの不具合を使って制限を迂回し、本来はアクセスできない、権限を必要とするメモリーへの読み取りアクセスを取得することが可能になります。この問題には CVE-2018-3639 が割り当てられており、「Variant (バリアント) 4」または「投機的ストアバイパス (Speculative Store Bypass)」とも呼ばれます。この問題は、AMD、ARM、IBM POWER8、および POWER9、さらに Intel プロセッサーにいたる各種マイクロアーキテクチャーの CPU に影響することが分かっています。現在サポートされているすべてのバージョンの Red Hat Enterprise Linux、Red Hat OpenShift、Red Hat Virtualization および Red Hat OpenStack Platform が影響を受けます。
悪意のある、権限を持たないユーザーがこの不具合を使用すると、権限を必要とするシステムメモリーや、Web ブラウザーや JIT 実行ランタイムといったサンドボックス化された環境の外にあるメモリーに読み取りアクセスが可能になります。
この脆弱性を完全に軽減するには、システム管理者がハードウェアの「マイクロコード」更新と、新機能を有効にするソフトウェアパッチの両方を適用する必要があります。現時点では、マイクロプロセッサーのマイクロコードは各メーカーから提供されることになっていますが、将来的に Red Hat はこれらが提供され次第、テスト済みかつ署名済みの更新をリリースする予定です。
この問題は、2018 年 5 月 21 日に公開されました。
背景情報
CVE-2018-3639 (別名「投機的ストアバイパス」) は、投機的実行とキャッシュベースのサイドチャネル攻撃によって悪用可能な新たな方法 (例: 分岐予測ミス) をもたらすもので、セキュリティー対策の回避と権限を必要とするメモリーへのアクセスを可能にするものです。この問題は CVE-2017-5753 (別名「Spectre v1」) と似ていますが、Spectre v1 では分岐予測ミスを使用していたところに投機的ストアバイパスメモリーの最適化を利用する点が異なります。
現代のコンピュータープロセッサーは非常に複雑なシステムです。その中心部では、命令 (プログラム) のシーケンスを実行し、その結果をメモリーに保存しています。
実行する命令数を最大化し、パフォーマンスを改善するために、プロセッサーは複数の実行コアを追加し、キャッシュメモリーを迅速化するほか、アウトオブオーダー実行、分岐予測、投機的実行、データの事前読み込み、メモリーアクセスの並び替え、メモリーの曖昧さ排除などの各種テクニックを使用しています。
命令が実行される際には、プロセッサーはメインメモリーからデータをロード (読み込み) し、メインメモリーにデータをストア (書き込み) します。ロードおよびストア命令がデータにアクセスできる前に、そのオペランドが与えたアドレスを解決する必要があります。例を示します。
mov [rbx + rcx], 0x0 : ゼロ(0) をメモリー [rbx + rcx] の場所にストア
mov rax, [rdx + rsi] : メモリー [rdx + rsi] の場所からデータを RAX レジスタにロード
これら両方のケースで、データにアクセス可能となる前に、[rbx + rcx] と [rdx + rsi] のアドレスがメモリーの場所に解決される必要があります。
通常のプログラムでは、多くのロード (読み込み) および 保存 (書き込み) 命令があり、時にはその両方が同じメモリーアドレスで操作している場合もあります。メモリー状態を一定に保つために、プロセッサーはロード/ストアキューバッファを使用して、ロード (読み込み) およびストア (書き込み) 命令を処理します。ロード命令とストア命令の両方がキュー待ちなると、キューにあるストア命令のすべてのアドレスが分かるまで、ロード命令は実行されません。
投機的ストアバイパス:
現代のプロセッサーは、ロード/ストア命令をアウトオブオーダーでかつ投機的に実行できます (ロード (読み込み) およびストア (書き込み) 命令がロード/ストアキューにある場合)。
メモリーの曖昧さ排除 (MD) は、先のストア命令に依存しないロードを予測します。そのようなロード (読み込み) 命令は先のストアのアドレスが分からず、ストア命令をバイパスする場合でも投機的に実行され、L1 データキャッシュからデータを読み込みます。こうすることで、ロードの待機時間が避けられ、全体的なパフォーマンスが改善します。最終的には、予測が間違っていて、ロード (読み込み) 命令とストア (書き込み) 命令の間で競合が検出されると、投機的ロード以降 (そのロード自体も含む) の全命令が再実行されます。
謝辞
Red Hat は、この問題の報告について Microsoft Security Response Center (MSRC) の Ken Johnson 氏と Google Project Zero (GPZ) Jann Horn 氏に謝意を表します。
その他の参考資料
ご不明な点に関しては、こちらの動画をご覧ください。 Red Hat video about SSBD
Red Hat ブログ: Speculative Store Bypass explained
How to patch my RHV environment for Kernel Side-Channel Attack using Speculative Store Bypass CVE-2018-3639?
Is CPU microcode is available via the microcode_ctl package?
Google Project Zero Variant 4 website
Intel Analysis of Speculative Execution Side Channels
Speculative Execution Side Channel Mitigation
影響を受ける製品
Red Hat Product セキュリティーチームは、CVE-2018-3639 によるセキュリティー上の影響度を重要と評価しています。
以下の Red Hat 製品バージョンが影響を受けます。
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Atomic Host
Red Hat Enterprise MRG 2
Red Hat Virtualization (RHEV-H/RHV-H)
Red Hat Enterprise Linux OpenStack Platform 6.0 (Juno)
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) for RHEL7
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director for RHEL7
Red Hat OpenStack Platform 8.0 (Liberty)
Red Hat OpenStack Platform 8.0 (Liberty) director
Red Hat OpenStack Platform 9.0 (Mitaka)
Red Hat OpenStack Platform 9.0 (Mitaka) director
Red Hat OpenStack Platform 10.0 (Newton)
Red Hat OpenStack Platform 11.0 (Ocata)
Red Hat OpenStack Platform 12.0 (Pike)
Red Hat Linux コンテナーはカーネル問題の影響を直接受けませんが、そのセキュリティーはホストカーネル環境の整合性に依存しています。Red Hat では最新バージョンのコンテナーイメージを使用することを推奨します。Red Hat Container Catalog の一部である Container Health Index を使用すると、常に Red Hat コンテナーのセキュリティー状態を確認できます。使用中のコンテナーのプライバシーを保護するには、これらの攻撃に対して (Red Hat Enterprise Linux や Atomic Host といった) コンテナーホストを更新する必要があります。Red Hat では、このユースケース用に更新済み Atomic Host をリリースしています。
攻撃の詳細と影響
この投機的ストアバイパスのシナリオは、Spectre バリアント 1 のようなサイドチャネル攻撃を可能にします。ロード (読み込み) 命令が、ストア操作がコミットされていない場所のメモリーから古い値にアクセスできるようになります。これを利用すると、攻撃者がそのメモリーの場所にある古い値を制御できる場合、権限を必要とするシステムメモリーを読み取ることが可能になります。また、Web ブラウザーや、実行前にジャストインタイム (JIT) でソースコードを分析、コンパイルする JVM や実行エンジンといったサンドボックス化された実行環境内で実行しているプロセスも使用することができます。
パフォーマンスへの影響
投機的ストアバイパスやメモリーの曖昧さ排除 (MD) は、投機的実行エンジンの効率性を高めるために使用される最適化です。先のストア (書き込み) 命令を待機せずにロード (読み込み) 命令の実行が可能になるので、ロード待機時間が短縮され、パフォーマンスが改善します。
投機的ストアバイパスの軽減策を有効にすると、実質上はメモリーの曖昧さ排除の最適化を無効にすることになり、システムのパフォーマンスに影響が出る可能性があります。パフォーマンスへの正味の影響は、システムのワークロードによって異なります。
デフォルト設定に関して Red Hat では、ユーザーが自身の環境を評価し、各種の軽減策を選択的に有効、無効にすることで適切な妥協を図ることを可能にする一方で、パフォーマンスよりもセキュリティーを優先するという立場を採用しています。Red Hat では、当初の軽減策によるパフォーマンスへの影響を緩和するために、追加の変更に取り組んでいます。
追加のパフォーマンスデータは、利用可能になり次第、公開いたします。
脆弱性の診断
システムの脆弱性を判断する
以下の診断スクリプトを使用して、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断します。正規のスクリプトであることを確認する場合は 分離されている GPG 署名 もダウンロードします。このスクリプトの現在のバージョンは 1.2 です。
対処方法
影響を受けるバージョンの Red Hat 製品をご使用のお客様は、エラータが利用可能になり次第、更新を行うことが強く推奨されます。適切な更新を早急に適用することが求められます。これらのフィクスは、CPU マイクロコード/ファームウェアの更新も必要となります。プロセッサーに適したマイクロコード/ファームウェアの更新については、ハードウェア OEM ベンダーにお問い合わせください。プロセッサーに適したマイクロコード/ファームウェアの更新がないと、カーネル更新ではこの脆弱性に対して不十分になります。
パッチを適用する順序は重要ではありませんが、ファームウェアおよびハイパーバイザーの更新後は、すべてのシステム/仮想マシンの電源を切って再起動し、新たなハードウェアタイプを認識する必要があります。
影響を受ける製品の更新
製品名 | パッケージ名 | アドバイザリー/更新 |
Red Hat Enterprise Linux 7 (z-stream) | kernel | RHSA-2018:1965 |
Red Hat Enterprise Linux 7 | kernel-rt | RHSA-2018:2003 |
Red Hat Enterprise Linux 7 | kernel-alt | RHSA-2018:1967 |
Red Hat Enterprise Linux 7 | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 7 | libvirt | RHSA-2018:2006 |
Red Hat Enterprise Linux 7 | qemu-kvm | RHSA-2018:2001 |
Red Hat Enterprise Linux 7 | qemu-kvm | RHSA-2018:1633 |
Red Hat Enterprise Linux 7 | openjdk 1.8.0 | RHSA-2018:1649 |
Red Hat Enterprise Linux 7 | openjdk 1.7.0 | RHSA-2018:1648 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | kernel | RHSA-2018:1635 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | libvirt | RHSA-2018:1652 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | qemu-kvm | RHSA-2018:1663 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | kernel | RHSA-2018:1737 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | libvirt | RHSA-2018:1653 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | qemu-kvm | RHSA-2018:1662 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | kernel | RHSA-2018:1637 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | libvirt | RHSA-2018:1668 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | qemu-kvm | RHSA-2018:1661 |
Red Hat Enterprise Linux 6 (z-stream) | kernel | RHSA-2018:1854 |
Red Hat Enterprise Linux 6 | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 6 | libvirt | RHSA-2018:1669 |
Red Hat Enterprise Linux 6 | qemu-kvm | RHSA-2018:1660 |
Red Hat Enterprise Linux 6 | openjdk 1.8.0 | RHSA-2018:1650 |
Red Hat Enterprise Linux 6 | openjdk 1.7.0 | RHSA-2018:1647 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | kernel | RHSA-2018:1826 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | libvirt | RHSA-2018:1667 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | qemu-kvm | RHSA-2018:1659 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | kernel | RHSA-2018:1639 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | libvirt | RHSA-2018:1666 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | qemu-kvm | RHSA-2018:1658 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | kernel | RHSA-2018:1640 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | libvirt | RHSA-2018:1665 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | qemu-kvm | RHSA-2018:1657 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | kernel | RHSA-2018:1641 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | libvirt | RHSA-2018:1664 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | qemu-kvm | RHSA-2018:1656 |
Red Hat Enterprise Linux 5 Extended Lifecycle Support* | kernel | RHSA-2018-2172 (x86 64-bit) |
Red Hat Enterprise Linux 5 Extended Lifecycle Support* | microcode_ctl | メーカーからの更新を待機中 |
Red Hat Enterprise Linux 5.9 Advanced Update Support*** | kernel | RHSA-2018:2171 (x86 64-bit) |
Red Hat Enterprise Linux 5.9 Advanced Update Support*** | microcode_ctl | メーカーからの更新を待機中 |
RHEL Atomic Host | kernel | リスピンの実行 (2018 年 5 月 22 日) |
Red Hat Enterprise MRG 2 | kernel-rt | RHSA-2018:1642 |
Red Hat Virtualization 4 | redhat-virtualization-host | RHSA-2018:1696 |
Red Hat Virtualization 4 | rhvm-setup-plugins | RHSA-2018:1674 |
Red Hat Virtualization 4 | qemu-kvm-rhev | RHSA-2018:2060 |
Red Hat Virtualization 4 | vdsm | RHSA-2018:1675 |
Red Hat Virtualization 4 | ovirt-engine | RHSA-2018:1676 |
Red Hat Virtualization 3 Extended Lifecycle Support* | redhat-virtualization-host | RHSA-2018:1710 |
Red Hat Virtualization 3 Extended Lifecycle Support* | rhev-hypervisor7 | RHSA-2018:1711 |
Red Hat Virtualization 3 Extended Lifecycle Support* | qemu-kvm-rhev | RHSA-2018:1654 |
Red Hat Virtualization 3 Extended Lifecycle Support* | vdsm | RHSA-2018:1690 |
Red Hat Virtualization 3 Extended Lifecycle Support* | ovirt-engine | RHSA-2018:1688 |
Red Hat Virtualization 3 Extended Lifecycle Support* | rhevm-setup-plugins | RHSA-2018:1689 |
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) for RHEL7 | qemu-kvm-rhev | RHSA-2018:1686 |
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director for RHEL7 | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 8.0 (Liberty) | qemu-kvm-rhev | RHSA-2018:1646 |
Red Hat OpenStack Platform 8.0 (Liberty) | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 9.0 (Mitaka) | qemu-kvm-rhev | RHSA-2018:1645 |
Red Hat OpenStack Platform 9.0 (Mitaka) | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 10.0 (Newton) | qemu-kvm-rhev | RHSA-2018:1644 |
Red Hat OpenStack Platform 10.0 (Newton) | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 11.0 (Ocata) | qemu-kvm-rhev | 保留中 |
Red Hat OpenStack Platform 11.0 (Ocata) | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 12.0 (Pike) | qemu-kvm-rhev | RHSA-2018:1643 |
Red Hat OpenStack Platform 12.0 (Pike) | director images | イメージをリスピン済み |
Red Hat OpenStack Platform 12.0 (Pike) | containers | コンテナーをリスピン済み |
*このパッチを取得するには、有効な ELS サブスクリプションが必要です。お持ちのアカウントに有効な ELS サブスクリプションがない場合は、Red Hat の営業部門または営業担当者に お問い合わせ ください。
**このパッチを取得するには、有効な EUS サブスクリプションが必要です。お持ちのアカウントに有効な EUS サブスクリプションがない場合は、Red Hat の営業部門または営業担当者に お問い合わせ ください。
Red Hat Enterprise Linux Extended Update Support サブスクリプションとは何ですか?
*** RHEL AUS のパッチを入手するには、有効な AUS サブスクリプションが必要です。
What is Advanced mission critical Update Support (AUS)?
****RHEL TUS のパッチを入手するには、有効な TUS サブスクリプションが必要です。
***** ハードウェア OEM に連絡して、最新バージョンの CPU マイクロコード/ファームウェアを入手してください。
軽減策
Red Hat では、お客様ができるだけ早期にハードウェアまたは CPU ベンダーが提供するマイクロコード/ファームウェアの更新を適用し、これらの更新済みカーネルをインストールすることを推奨しています。ソフトウェア更新はハードウェアマイクロコードとは別に適用することができますが、CPU ファームウェアが更新されるまで有効にはなりません。
この問題の軽減策については、リスクベースのアプローチが推奨されます。高レベルのセキュリティーと信頼が求められるシステムから対処し、悪用のリスクを低減する対処法がこれらのシステムに適用されるまで、これらのシステムを他の信頼できないシステムから分離してください。
Intel と AMD の x86 プロセッサーには MSR (モデル固有レジスタ) が実装されており、これを使用して投機的ストアバイパス機能を有効、無効にすることができます。この MSR を使用すると、新たなカーネル更新で以下のカーネルコマンドラインパラメーターが提供されます。
- spec_store_bypass_disable=[auto/on/off/prctl]
デフォルト: auto- auto: このオプションで起動すると、プロセッサーが投機的ストアバイパス (SSB) 機能をサポートしているかどうかをカーネルが検出し、適切な軽減策が選択されます。
- on: 投機的ストアバイパスの軽減策を ON にします。プロセッサーは、すべてのストア (書き込み) アドレスが解決されるまで、ロード (読み込み) 命令を投機的に実行しなくなります。
- off: 投機的ストアバイパスの軽減策を OFF にします。プロセッサーは、先のストア (書き込み) 命令の前に、ロード (読み込み) 命令を投機的に実行するメモリーの曖昧さ排除機能を使用するようになります。
- prctl: prctl(2) インターフェースを使用して、投機的ストアバイパスの軽減策をスレッド別で有効にします。
- nospec_store_bypass_disable:
投機的ストアバイパスの脆弱性に対する軽減策をすべて無効にします。
カーネル更新では sysfs インターフェースのサポートも追加され、システムプロセッサーが投機的ストアバイパス問題に脆弱かどうか、また対応する軽減策が実行されているかどうかをレポートします。
- # cat /sys/devices/system/cpu/vulnerabilities/spec_store_bypass
JVM や JIT サンドボックス化環境では、カーネル更新は prctl(2) インターフェースによるプロセス別の制御オプションを導入します。アプリケーションではこれを使用して、プロセス別に投機的ストアバイパスを有効、無効にすることができます。アプリケーションでは、以下のように prctl(2) を起動します。
- prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0);
投機的ストアバイパス機能の有効にして、軽減策を無効にします。 - prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
投機的ストアバイパス機能の無効にして、軽減策を有効にします。
注記: RHEL-5 では、これらの軽減策は 64-bit システムでのみ利用できます。
Comments