Azure でのシリコン ベースのマイクロアーキテクチャと投機的実行のサイドチャネルの脆弱性を軽減するためのガイダンス
適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット
この記事では、多くの最新のプロセッサとオペレーティング システムに影響を与える新しいクラスのシリコン ベースのマイクロ アーキテクチャおよび投機的実行サイド チャネルの脆弱性に関するガイダンスを提供します。 これには、Intel、AMD、ARM が含まれます。 これらのシリコンベースの脆弱性の特定の詳細については、次のセキュリティ アドバイザリと CVE で検索することができます:
- ADV180002 - 投機的実行サイドチャネルの脆弱性を軽減するためのガイダンス
- ADV180012 - 投機的Microsoft Store バイパスに関する Microsoft ガイダンス
- ADV180013 - 不正なシステム レジスタ読み取りに関する Microsoft ガイダンス
- ADV180016 - 遅延 FP 状態の復元に関する Microsoft ガイダンス
- ADV180018 - L1TF バリアントを軽減するための Microsoft ガイダンス
- ADV190013 - マイクロ アーキテクチャ データ サンプリングの脆弱性を軽減するための Microsoft ガイダンス
- ADV220002 - Intel プロセッサ MMIO の古いデータの脆弱性に関する Microsoft ガイダンス
- CVE-2022-23816 - AMD CPU 分岐タイプの混乱
- CVE-2022-21123 - AMD CPU 分岐タイプの混乱
これらの CPU の脆弱性の開示により、より明確さを求めるお客様からの質問が発生しています。
Microsoft は、クラウド サービス全体に軽減策を展開しました。 Azure を実行し、顧客ワークロードを互いに分離するインフラストラクチャは保護されています。 つまり同じインフラストラクチャを使用する潜在的な攻撃者が、これらの脆弱性を利用してお客様のアプリケーションを攻撃することはできません。
Azure では、可能な限りメモリ保持メンテナンスを利用することで、お客様への影響を極力少なくし、再起動を不要にしています。 システム全体に及ぶ更新をホストに対して行う際は、引き続きこうした手法を活用しながらお客様を保護してまいります。
Azure にさまざまな角度から組み込まれているセキュリティについて詳しくは、「Azure のセキュリティのドキュメント」サイトをご覧ください。
注意
このドキュメントが初めて公開されて以来、この脆弱性クラスについて同様の記事がいくつか開示されてきました。 Microsoft は今後もお客様の保護とガイダンスの提供に積極的に投資していく予定です。 引き続き解決策を公開していくために、このページは随時更新されます。
VM 内で信頼できないコードを実行しているお客様はすべての脆弱性に関する詳細なガイダンスを以下で参照することで、これらの脆弱性から保護するためのアクションをとる必要があります。
それ以外のお客様は、多層防御の観点から脆弱性を評価し、選択した構成のセキュリティとパフォーマンスに関する関連事項を考慮する必要があります。
オペレーティング システムを最新の状態に保つ
Azure 上で実行されているアプリケーションを他の Azure 顧客から分離する目的で OS を更新する必要はありませんが、ソフトウェアを最新に保つことは常にベスト プラクティスです。 Windows 用の最新のセキュリティ更新プログラムには、これらの脆弱性に対する軽減策が含まれています。 同様に、Linux ディストリビューションからも、これらの脆弱性に対処するための更新プログラムが複数リリースされています。 オペレーティング システムを更新するうえで Microsoft が推奨している対策は以下のとおりです。
サービス | 推奨される操作 |
---|---|
Azure クラウド サービス | 自動更新を有効にするか、最新のゲスト OS を実行していることを確認します。 |
Azure Linux Virtual Machines | オペレーティング システムの提供元から入手した更新プログラムをインストールします。 詳細については、このドキュメントで後述する Linux に関する情報を参照してください。 |
Azure Windows Virtual Machines | 最新のセキュリティ ロールアップをインストールします。 |
その他の Azure PaaS サービス | これらのサービスを使用している顧客は、何も対応する必要はありません。 Azure では、お使いの OS バージョンが自動的に最新に保たれます。 |
信頼できないコードを実行している場合の追加のガイダンス
信頼できないユーザーに任意のコードの実行を許可しているお客様は、Azure Virtual Machines またはAzure Cloud Services 内に追加のセキュリティ機能を実装することをお勧めします。 投機的実行に関するいくつかの脆弱性によって説明されるプロセス間の情報漏えいベクターは、こうした機能によって保護することになります。
より多くのセキュリティ機能が推奨されるシナリオの例を次に示します:
- 自システムの VM 内で、信頼されていないコードの実行を許可する。
- "バイナリまたはスクリプトのアップロードをいずれかの顧客に許可していて、その後、そのコードを自分がアプリケーション内で実行してしまうなど"。
- 自システムの VM 内に、信頼されていないユーザーが低い特権のアカウントを使用してログインすることを許可する。
- "リモート デスクトップや SSH を使っていずれかの VM にログインすることを権限の低いユーザーに許可しているなど"。
- 入れ子になった仮想化を使って導入された仮想マシンにアクセスすることを、信頼できないユーザーに許可している。
- "Hyper-V ホストを管理しているのは自分だが、その VM を信頼できないユーザーに割り当てているなど"。
信頼されていないコードが含まれるシナリオを実装しない顧客は、これらの追加セキュリティ機能を有効にする必要はありません。
追加のセキュリティの有効化
信頼できないコードを実行している場合は、VM またはクラウド サービス内でより多くのセキュリティ機能を有効にすることができます。 VM 内またはクラウド サービス内でセキュリティ機能を有効にするために、オペレーティング システムが最新の状態になっていることも並行して確認してください
Windows
これらの追加のセキュリティ機能を有効にするには、ターゲットオペレーティングシステムが最新である必要があります。 多くの軽減策が既定では有効になっていますが、ここで説明する追加機能は手動で有効にする必要があり、パフォーマンスに影響を与える可能性があります。
方法 1
ステップ 1: KB4072698 の手順に従って、SpeculationControl PowerShell モジュールを使用して保護が有効になっていることを確認します。
Note
このモジュールをダウンロード済みであっても、インストールするのは最新バージョンであることが必要です。
これらの脆弱性に対する有効な保護を検証するには、「Get-SpeculationControlSettings PowerShell スクリプト出力についての解釈」を参照してください。
保護が有効ではない場合は Azure サポートに連絡し、ご利用の Azure VM に対する追加の制御を有効にしてください。
ステップ 2: カーネル仮想アドレス シャドウ処理 (KVAS) とブランチ ターゲット インジェクション (BTI) の OS サポートを有効にするには、KB4072698 の指示に従い、Session Manager
のレジストリ キーを使用して保護を有効にします。 再起動が必要となります。
手順 3: 入れ子になった仮想化を使ったデプロイの場合 (D3 と E3 のみ): これらの手順は、Hyper-V ホストとして使用している VM 内でのみ当てはまります。
- KB4072698 の指示に従い、
MinVmVersionForCpuBasedMitigations
のレジストリ キーを使用して保護を有効にします。 - こちらの手順に従って、ハイパーバイザーのスケジューラの種類を
Core
に設定します。
方法 2
VM 上でハイパースレッディングを無効にする - ハイパースレッド化された VM 上で信頼されていないコードを実行しているお客様は、ハイパースレッディングを無効にするか、ハイパースレッド化されていない VM サイズに移行するかを選択できます。 ハイパースレッド化された VM サイズの一覧についてはこちらのドキュメントを参照してください (ここで、vCPU とコアの比率は 2:1 です)。 VM でハイパースレッディングが有効になっているかどうかを確認するには、VM 内で Windows コマンド ラインを使用して以下のスクリプトを参照してください。
対話型インターフェイスを起動するには、wmic
と入力します。 次に、以下のコマンドを入力して、VM 上の物理および論理プロセッサの量を表示します。
CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List
論理プロセッサの数が物理プロセッサ (コア) よりも多い場合は、ハイパースレッディングが有効になっています。 ハイパースレッド化された VM を実行している場合は、Azure サポートに問い合わせて、ハイパースレッディングを無効にしてください。 ハイパースレッディングが無効になると、VM の完全な再起動が必要になります。 VM コア数が減少した理由を知るために、「コア数」を参照してください。
オプション 3
CVE-2022-23816 と CVE-2022-21123 (AMD CPU 分岐種類の混乱) の場合、上のオプション 1 およびオプション 2 の両方に従います。
Linux
追加的なセキュリティ機能一式を内部で有効にするためには、ターゲットのオペレーティング システムが完全に最新の状態にあることが必要です。 一部の軽減策については、既定で有効になります。 次のセクションで説明している内容は、既定でオフになっている機能や、ハードウェア サポート (マイクロコード) に依存している機能が対象となります。 これらの機能を有効にすると、パフォーマンスに影響が生じることがあります。 詳しい手順については、オペレーティング システムの提供元のドキュメントを参照してください
手順 1: VM 上でハイパースレッディングを無効にする - ハイパースレッド化された VM 上で信頼されていないコードを実行しているお客様は、ハイパースレッディングを無効にするか、ハイパースレッド化されていない VM に移す必要があります。 ハイパースレッド化された VM サイズの一覧についてはこちらのドキュメントを参照してください (ここで、vCPU とコアの比率は 2:1 です)。 ハイパースレッド化された VM を実行しているかどうかを確認するには、Linux VM で lscpu
コマンドを実行します。
Thread(s) per core = 2
の場合、ハイパースレッディングが有効になっています。
Thread(s) per core = 1
の場合、ハイパースレッディングが無効になっています。
ハイパースレッディングが有効になっている VM の出力例:
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 サポートに問い合わせて、ハイパースレッディングを無効にしてください。 ハイパースレッディングが無効になると、VM の完全な再起動が必要になります。 VM コア数が減少した理由を知るために、「コア数」を参照してください。
手順 2: 以下の CPU ベースのメモリの脆弱性を軽減するには、オペレーティング システム プロバイダーのドキュメントを参照してください:
コア数
ハイパースレッド化された VM が作成されると、Azure によってコアあたり 2 つのスレッドが割り当てられます。これらは vCPU と呼ばれます。 ハイパースレッディングが無効にされると、Azure によってスレッドが削除され、1 つのスレッド化されたコア (物理コア) が表示されます。 vCPU と CPU の比率は 2:1 なので、ハイパースレッディングが無効になると、VM 内の CPU 数は半分に減少したように見えます。 たとえば、D8_v3 VM は、8 個の vCPU (コアあたり 2 スレッド × 4 コア) 上で実行されるハイパースレッド化された VM です。 ハイパースレッディングが無効にされると、CPU はコアあたり 1 スレッドの 4 物理コアに低下します。
次のステップ
Azure のあらゆるアスペクトにセキュリティを統合する方法の詳細については、「Azure のセキュリティ ドキュメント」 を参照してください。