CVE-2019-11135 - TSX (Transactional Synchronization Extensions) の非同期アボート
概要
TSX (Transactional Synchronization Extensions) の非同期アボートは、これまで MDS 関連の脆弱性の影響を受けたバッファーに影響する MDS 関連の不具合です。カスタムコードを使用するローカル攻撃者は、この不具合を悪用して、SMT (同時マルチスレッド、Simultaneous multithreading) と TSX をサポートするプロセッサーや、それらのプロセッサーの兄弟論理プロセッサーのキャッシュコンテンツから情報を収集できます。
この不具合は、TSX リージョンの実行時間を監視できる認証されたローカル攻撃者が、アボート実行時間を比較してメモリー状態を推測できる Intel TSX アボートの実装で見つかりました。
これにより、攻撃者はトランザクションのアボートのタイミングを監視できる間、監視されたサイドチャネルを経由して情報を公開することが可能になります。
この問題には CVE-2019-11135 が割り当てられ、「中程度の影響」があると評価されました。
背景
TSX は、トランザクション実行のコード領域を指定するためにソフトウェアインターフェースを提供する CPU 機能です。この機能により、プロセッサーは、同時に実行されているスレッドをシリアライズする必要があるかどうかを判断し、ロック競合を防ぐことができます。
TSX は、実行されているすべてのスレッドでメモリーアクセスの競合を監視し、競合を発見したときにトランザクションをアボートすることで、マーク付けされたトランザクションコード領域のパフォーマンスを向上します。
トランザクションがアボートされると、実行されたコードは既存の従来のロックメカニズムにフォールバックされ、ソフトウェアによって定義された方法でトランザクションを完了します。
TSX リージョンの実行時間を監視できる認証されたローカル攻撃者が、アボート実行時間を比較してメモリー状態を推測できる Intel TSX アボートの実装で不具合が見つかりました。
これにより、攻撃者はトランザクションのアボートのタイミングを監視できる間、監視されたサイドチャネルを経由して情報を公開することが可能になります。
MDS の影響を受けるカーネル更新済みのシステムで、カーネルに適用されたこれまでの MDS パッチが有効になっていれば、この不具合を軽減することができます。
MDS の影響を受けない新しい CPU では MDS の軽減策が有効になっていないため、カーネルを更新してこの問題を完全に軽減する必要があります。
TSX 非同期アボート (TAA) の問題を軽減する方法の 1 つが、CPU の TSX 機能を無効にすることです。これにより、TAA は発生しないため、推測的なサイドチャネルを介した情報漏えいは発生しません。カーネルを更新すると、CPU の TSX (Transactional Synchronization Extensions) 機能を有効または無効にする新しいカーネルブートパラメーター 'tsx=on/off/auto’ が導入されます。これには、マイクロコードの更新をインストールする必要があります。
tsx=on TSX 機能を有効にする。 <= RHEL のデフォルト
tsx=off TSX 機能を無効にする。
tsx=auto CPU が影響を受ける場合に TSX を無効にし、その他の場合は TSX を有効にする。
2 つ目の軽減方法は、コンテキストの切り替え時に CPU を消去にすることです。ストアバッファーやフィルバッファーなどのバッファーは命令の実行中にデータを保持します。カーネルの更新を適用すると、別のパラメーター ‘tsx_async_abort=off/full/full,nosmt’ が導入されます。これは、カーネルが CPU バッファーを消去して TAA の問題を軽減する方法を制御します。
tsx_async_abort=off TAA 問題の軽減策を無効にする。
tsx_async_abort=full TAA 問題の軽減策を有効にし、CPU バッファーを消去する。
tsx_async_abort=full,nosmt TAA 問題の軽減策を有効にし、SMT を無効にする。
このパラメーターを指定しないと、tsx_async_abort=full で軽減策が有効になります。 SMT が有効な場合、CPU コアの 1 つの論理プロセッサー上のスレッドが、同じコアのシブリングスレッドのデータを推測できる可能性があります。 このような場合のために、tsx_async_abort=full,nosmt が用意されています。
更新されたカーネルによって以下の sysfs インターフェースが提供されます。これにより、ユーザーはシステムへの影響の有無や適用された軽減策の状態を確認することができます。
$ cat /sys/devices/system/cpu/vulnerabilities/tsx_async_abort
Vulnerable
Vulnerable: Clear CPU buffers attempted, no microcode
Mitigation: Clear CPU buffers, SMT vulnerable
Mitigation: TSX disabled
Not affected
影響を受ける製品
以下の Red Hat 製品のバージョンが影響を受けます。
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 8
- Red Hat Atomic Host
- Red Hat OpenShift Online
- Red Hat Virtualization (RHV)
- Red Hat OpenStack Platform (イメージ同梱カーネル)
Red Hat Linux コンテナーは、サードパーティーハードウェアの脆弱性の影響を直接受けませんが、そのセキュリティーはホストカーネル環境の整合性に依存しています。Red Hat は、最新バージョンのコンテナーイメージを使用することを推奨します。Red Hat Container Catalog の一部である Container Health Index を使用すると、常に Red Hat コンテナーのセキュリティー状態を確認できます。使用中のコンテナーのプライバシーを保護するには、これらの攻撃に対して (Red Hat Enterprise Linux、RHEL CoreOS、Atomic Host といった) コンテナーホストを更新する必要があります。
脆弱性の判断
脆弱性の診断
以下の診断スクリプトを使用して、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断します。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。
診断スクリプトのダウンロード
現在のバージョン: 1.0
解決策
影響を受けるバージョンの Red Hat 製品をご使用のお客様は、エラータが利用可能になり次第、更新を行うことが強く推奨されます。適切な更新を直ちに適用し、再起動してこの不具合を適切に軽減することが求められます。
よくある質問
問: 更新はゲストとホストの両方に適用する必要がありますか。
答: 両方に適用する必要があります。spectre v1 と同様に、この不具合を悪用すると論理兄弟を共有する VM すべてに攻撃を行うことが可能です。
問: カーネルの更新後に再起動する必要はありますか。
答: 再起動する必要があります。
問: これまでの Spectre-v1、Spectre-v2、および MDS の修正を適用しましたが、これも適用する必要がありますか。
答: 適用する必要があります。MDS の修正は一部のシステムでこの不具合を軽減できますが、MDS の影響を受けない新しい CPU にはこの更新を適用する必要があります。よく分からない場合は、この更新を適用してください。これには、他のセキュリティー修正も含まれています。
問: この更新には他のセキュリティーパッチも含まれていますか。
答: はい、i915 グラフィックカード CVE が必要なプラットフォームに含まれています。
問: このセキュリティー軽減策を無効にできますか。
答: 軽減策の 1 つは、起動時に TSX を無効にして機能します。この軽減策を無効にするには、起動時に tsx=on パラメーターをカーネルに渡して TSX を明示的に有効にします。実行時に変更することはできません。
もう 1 つの軽減策は、VERW メカニズムで CPU バッファーをクリアすることで機能します。この軽減策を無効にするには、tsx_async_abort=off を設定します。
謝辞
Red Hat はこの問題を報告した Intel 社および業界のパートナーに感謝します。さらに、Red Hat は Intel-SA-00270 に記載されている研究者に感謝します。
追加情報
Transactional Synchronization Extensions (英語)
Intel-SA-00270 (英語)
Comments