日に公式発表があり、脆弱性「Meltdown」と「Spectre」の影響がどの程度のものか明らかになりました。両方とも、不正なコードが通常はアクセスできないメモリ領域にアクセスすることが可能になる脆弱性です。処理しているすべての情報が窃取される可能性があります。ような主要オペレーティングシステム(OS)に採用されている基本的なセキュリティの仕組みを大きく揺るがせています。Concept(概念実証型エクスプロイト、PoC)」が公開されていますが、実際の攻撃は確認されていません。本記事では、これらの脆弱性の詳細と攻撃手法、および各ベンダの対策について解説します。基本的なセキュリティの仕組みの1つです。これによって各ユーザアカウントが使用するメモリを分離し、別のユーザが使用するデータへのアクセスや修正を不可能にしています。今日ではこの仕組みはページング方式で実装されています。Table(ページテーブル、PT)」と呼ばれる大きくて複雑なカーネルツリー構造が各プロセスに存在し、メモリの仮想アドレスと物理アドレスをマッピングした情報を格納し、アクセス権を定義しています。Unit(メモリ管理ユニット、MMU)」が可能な限り効率よくアドレスの変換を処理します。Buffer(トランスレーション・ルックアサイド・バッファ、TLB)」と呼ばれるいくつかのレイヤがあり、アドレスの変換データを保持しています。辿ってアドレスを変換します。この処理には時間がかかります。ようなモバイル向けの派生バージョンも含めてすべて同じ仕組みを採用しています。当初、ユーザデータへのカーネルコードのアクセスを単純化するために、カーネル権限を持つコードとデータは各プロセスにおいて同一の仮想アドレスにマッピングすることが想定されていました。フラッシュが伴います。このようなマッピングの変更はコンテキストの切り替えに際して必ず発生します。つのレジスタを割り当てています。このレジスタはコンテキストを切り替える際に書き込まれます。ポインタ用に割り当てられています。アクセス管理により、カーネルのコードやデータはユーザのコードから直接アクセスすることができないように保護されています。制御を可能にするためにカーネルコードの欠陥を突く方法が確認されています。つのことを知っている必要があります。関連するカーネルコードとデータの両方またはいずれか一方についてです。Randomization(アドレス空間配置のランダム化、ASLR)」が実装されました。ASLR(KASLR)」と呼ばれています。この対策は、ユーザのプロセスからカーネル構造のアドレスを隠ぺいする仕組みになっています。ヒットとの統計的な差異を測定することによって行われます。実装に基づくため、秘匿が困難です。つに分割する提案を公開しました。本来の用途のようにプロセスがカーネルコードを実行する際に使用します。ユーザのページと、コンテキストの切り替えやシステムコール、割り込みハンドラなどに必要なその他のカーネルページの部分的なコピーです。攻撃に対応することが可能です。実装する作業が始まりました。Isolation(KPTI)」の実装が緊急かつ静かに開始されました。コードを記述する前に十分な時間をかけて議論が行われ、カーネルの当該部分が断続的に変更されました。実装作業はその特異な性質からいくらかの関心を集めました。カーネルの当該部分の変更はパフォーマンスに大きな影響を与える可能性があります。初期のテストではほとんどの場合5%の低下が確認されましたが、最悪の場合には50%にも及びました。日にカーネルに追加されました。ような機能が実装されたことが明らかになっています。実装された理由はすぐに明らかになりました。脆弱性「Meltdown」への対策として有効だったからです。投機的実行におけるセキュリティ欠陥に基づく脆弱性です。順番に実行してく場合、メモリへのアクセスのために数百クロックサイクル程度の待機時間が発生します。メモリの読み書きを待つ間、先に実行可能な命令を実行します。内部状態とメモリへの影響は削除されます。このような仕組みとして「投機的実行」と「アウト・オブ・オーダー実行」があります。残念なことに、投機的実行にはローレベルにおけるCPUの状態に副作用をもたらします。ワード長のデータをレジスタに移動する命令を投機的に実行し、その結果が不要となった場合、レジスタは元の値を保持していますが、キャッシュはリードサイクルで修正されます。カーネルメモリと物理メモリに完全にアクセスすることが可能になる脆弱性です。上で自身のプログラムを実行するだけです。上で不正プログラムを実行させる必要があるということです。さまざまな攻撃シナリオの中で最も可能性が高いのはクラウドサービスのような共有システムへの攻撃です。仮想マシンを利用する他のユーザの情報にアクセスすることが可能になります。CVE-2017-5715)はより影響範囲の広い脆弱性です。利用した攻撃は投機的実行に関する欠陥に基づいています。比べてより複雑であり、実現のハードルは高いものとなっています。攻撃者と対象が同じコードを共有していることです。サブシステムが当該コードに実行を移すようにする必要があります。この攻撃はCPUのバージョンに強く依存します。予測アルゴリズムと予測バッファの深さはベンダだけではなくCPUの世代によって異なるためです。Spectreには2つの亜種が知られています。1つは単一プロセス空間への攻撃に限定され、もう1つの攻撃にはスーパーユーザのアクセス権が必要です。eBPFのようなJITコンパイラを組み合わせている点です。これにより攻撃者は、投機的に実行するコードを作成しカーネルのコンテキスト内で直接実行することが可能になります。Meltdownと同様です。関する真の難題はその緩和策です。ハードウェア自体の変更を必要とします。回避策として、IntelのプラットフォームにおけるLFENCE命令のような同期基本命令を挿入するという方法があります。これにより投機的な実行を効果的に止めることが可能です。他にも、「Retpoline」と呼ばれるトランポリンを使用する回避策があります。この手法はコンパイラの修正と慎重な問題箇所の特定を必要とします。これは簡単ではなく人々の議論無しに容易に実行することはできない上、重大なパフォーマンスの低下をもたらす可能性もあります。影響を受けると考えられます。対策には高額な費用がかかり、技術業界全体にとって長期的な課題となっています。製造業者にかかっています。ハードウェアおよびチップのマイクロコードには投機的実行とアウト・オブ・オーダー実行の最適化ロジックが実装されており、これが今回の脆弱性の要因です。この種の最適化について、コードを生成するコンパイラに重きを置いて実現しているため、今回の脆弱性は直接的には影響しません。的な設計を取り入れオンチップで投機的なロジックに対応した複雑な実行パイプラインの機能を追加しているため、今回の脆弱性の影響を受けます。投機的実行機能がハードウェア的に実装されていることによって、今回の脆弱性への対処が難しいものとなっていることは明らかです。それぞれマイクロアーキテクチャにおける状態変化のパフォーマンスを測定するためのさまざまな指標の収集に対応しています。利用した攻撃を検出することが可能です。パフォーマンス・カウンター・モニターについてはこちらを参照してください。攻撃中には、キャッシュミス、命令リタイアの中断、分岐予測の失敗などの逸脱が確認されることがあります。現状ではこれが攻撃を検出するためのもっとも信頼できる方法です。対して最新のマイクロコードを公開しており、それらは順次リリースされます。更新を通して適用されますが、この方法には手続き上の手間がかかります。マイクロコードを更新できるような形でリリースしています。マイクロコードを更新します。投機的実行に関連した脆弱性への仮想環境における対策について多くの質問があがっています。異なるプロセス間およびユーザとシステムの間でアドレス空間が分離されており、この仕組みによってメモリ空間を仮想的に管理しています。ハイパーバイザが管理する仮想マシンでは、異なるゲスト間およびホストとゲストの間にもう一段階の分離が導入されています。ハードウェア的に仮想化を支援する仕組みが組み込まれています。ハイパーバイザによる仮想マシンの管理を容易にし、複数段階の仮想化を可能にするために「VMX」と呼ばれる動作モードを備えています。レベルを増やすことで実現されています。ミス発生時のアドレス変換が可能になります。攻撃は、仮想空間の境界を越えて権限による制限を回避し、カーネルメモリと、間接的には物理メモリ全体にアクセスすることが可能です。残念なことに、仮想環境における境界と権限にも同じことが当てはまります。非仮想環境で仮想メモリやカーネル空間にアクセスするのと同じ方法で、仮想環境においても異なるゲストまたはホストのメモリにアクセスすることが可能です。対する更新プログラムの適用に加えて、仮想環境上のハイパーバイザにも更新プログラムを適用する必要があります。仮想化技術および製品を扱う企業「VMware」はセキュリティ勧告「VMSA-2018-0002.1」と「VMSA-2018-0004.1」を公開しています。仮想化ソフトウェア「Xen」のセキュリティ勧告はこちらを参照してください。仮想化製品についてはこちらを参照してください。■被害に遭わないためにはここまで述べてきたように、この脆弱性を攻撃に利用するためには条件があり、直ちにすべての環境に甚大な影響を与えるものではありません。対応する更新プログラムを計画的かつ確実に適用することが推奨されます。ベンダはファームウェアの一部としてマイクロアーキテクチャの更新プログラムをリリースしています。ベンダはカーネルおよびコンパイラの更新プログラムをリリースしています。狙った攻撃に対応するために各ブラウザにも更新プログラムが適用されるでしょう。ユーザおよびシステム管理者は攻撃のリスクを軽減するためにこれらの更新プログラムを迅速に適用してください。近いうちにソフトウェアやファームウェアに対するより多くの更新プログラムのリリースが見込まれています。残念なことに、攻撃の検出は非常に困難です。マイクロアーキテクチャレベルでの兆候や、異常に高いページフォールト発生率、低いキャッシュヒット率のようなパフォーマンスに関する統計情報以外には攻撃の目印がありません。修正した不正コードが直ぐに出てくることも十分考えられます。サーバ版とクライアント版について以下の文書を公開しています。レジストリキーを登録する必要があることに留意してください。詳細はこちらの記事を参照してください。月の更新ですでに対応されています。カーネルに反映されています。各ディストリビューションの更新は個々のベンダが行います。ようないくつかのベンダは必要に応じた告知と更新プログラムを公開しています。(「TROJ64_CVE20175753.POC」として検出)がいくつか公開されています。DPIルールによってこの脆弱性を利用する脅威から保護されています。