MeltdownとSpectreについて知っておくべきこと
「Meltdown」と「Spectre」について知っておくべきことが紹介されています。脆弱性のアナウンス
「Meltdown」と「Spectre」の詳細が明らかになるにつれ、影響を受ける複数のベンダーがより詳細なアナウンスを出すようになってきました。「Canonical」では本脆弱性の対応状況を以下でアナウンスしています。
現在最新の状況では、「Spectre」対応の第一弾である「Spectre」の影響を軽減する「Linux kernel」がリリースされています。
さてベンダーのアナウンスの多くは、修正の適用方法や影響を最小限に抑える方法の案内に焦点があてられており、何が問題なのか、軽減策がどのように機能するのか、脆弱性がユーザーにどのように影響を与えるのかと言った説明に焦点があてられていません。
パフォーマンスとセキュリティーのトレードオフ
脆弱性とその修正内容はCPUに依存しているため、パフォーマンスとセキュリティーがトレードオフ(天秤)の関係になります。この一般的なモデルを理解することは、すべてのシステム管理者と開発者にとって重要なことです。
MeltdownとSpectre
これらの脆弱性の本質は、コンピューター上で動作しているプログラムが、想定されていないメモリーの内容を読み込めることです。メモリー内容の漏洩
これらの脆弱性は任意コード実行の手法と異なり、悪意あるソフトウェアがCPUに働きかけ、アクセスできないメモリーの内容を漏洩させます。CPUに働きかける手法のため、メモリー内容の漏洩スピードは割とゆっくりした速度になります。
ある特定のCPU環境において「Meltdown」によるメモリー内容の漏洩スピードは500KB/s、 「Spectre」によるメモリー内容の漏洩スピードは10KB/sという測定結果があります。
また「Intel Core i5」を搭載したノートPCで単純な「Spectre」のテストを行った結果、メモリー内容の漏洩スピードは平均8.5KB/sという結果が得られています。
- Paste from linkedin.com/in/kikoreis at Sat, 20 Jan 2018 09:22:48 +0000
- Paste from Will at Sat, 20 Jan 2018 09:24:07 +0000
要約すると以下のようになります。
- 攻撃を可能にするためには、CPUが信頼できないコードを実行している必要がある
- 攻撃の直接的な影響に制約はなく、すべてのシステムメモリーに読み込み専用でアクセスできる
- メモリーの内容は非常に速い速度で漏洩することはない
Javascriptによる攻撃
ほとんどのエンドユーザーはウェブブラウジングと信頼できないコードの実行を結びつけて考えることはありません。しかしブラウザーによるJavascriptの実行は、重要な攻撃区分(攻撃元)となります。
「Firefox」では、以下でユーザーに注意とアップデート情報を提供しています。
「Chrome/Chromium」では、ユーザーに注意とアップデート情報を提供しています。
また「Ubuntu/Canonical」でも、以下でブラウザー含む脆弱性に関する情報を提供しています。
攻撃者は「Meltdown」と「Spectre」を利用して直接ディスクからデータを読み取ったり、システム上の何かを変更することはできません。
例えばパスワードを変更したり、ファイルの内容を書き換えることはできません。
問題は、パスワードや秘密鍵などの機密情報が、大抵メモリー内で暗号化が解除された状態で保持されていることです。
つまり「Meltdown」や「Spectre」により機密情報が盗まれると、それらの機密情報を利用して権限の昇格やシステムの変更、そしてさらなる機密情報の入手が可能になります。
脆弱性のデモンストレーション
「Meltdown」や「Spectre」を利用した機密情報漏洩のデモンストレーションが公開されています。そのデモンストレーションでは、以下の振る舞いを実行しています。
- 同じPC上で動作している悪意あるソフトウェアが、別プロセスで動作しているウェブブラウザーで入力されたパスワードを読み取り、アクセスしたウェブページに表示された画像を読み取る
- パブリッククラウドのインスタンスのような仮想化されたゲストOS内で動作している悪意あるソフトウェアが、ハイパーバイザーの資格情報を読み取り、ホストされているあらゆる仮想マシン内の機密情報を読み取る
- ユーザースペースもしくはホストされた仮想マシンのアプリケーションから、他の仮想マシンやハイパーバーザー含むあらゆるカーネルやユーザースペースのメモリーの内容を読み取る
このようなパターンに沿った様々な悪用方法が、今後ほぼ確実に現れることになるでしょう。
誰が最も影響を受けるのか?
実際のところこれらの脆弱性は、サーバー及びエンドユーザーのすべてコンピューターが影響を受けます。しかし攻撃区分(攻撃元)の性質により、異なるユースケース(使い方や分野)による影響の程度は変わります。
以下の表はユースケース別に影響の程度を分類したものです。
この表は「Canonical」による分析に基づいています。
ユースケース | 非常に高い危険性 | 高い危険性 | 中程度の危険性 |
---|---|---|---|
エンドユーザー (デスクトップ/ノートPC) |
● | ||
パブリッククラウドサービスプロバイダー | ● | ||
パブリッククラウド環境で動作している アプリケーション |
● | ||
オープンセルフサービスタイプの プライベートクラウド環境 |
● | ||
より制約されたプライベートクラウド及び 仮想環境 |
● | ||
プライベートクラウド環境で動作している アプリケーション |
● | ||
ベアメタル及び アプリケーション固有のサーバー |
● |
脆弱性はどのように動作するのか?
カーネルなど脆弱性の軽減策がどのように実装されているのかを理解するためには、問題の根底が何であるのかを把握することが大切です。そしてOSとCPUの基本的な仕組みを理解している必要があります。
理解を早める役に立つドキュメント
以下のドキュメントに目を通しておくと、問題に対する理解が早まります。分かりやすい表現で問題の説明が行われています。
またCPUのパイプラインとキャッシュの動作について以下に目を通しておくと、必要な知識が得られます。
問題の根底
問題の根底を要約すると以下のようになります。- すべてのモダンなCPUは、コードを実行する前にシステムメモリーからデータをプリフェッチ(事前に読み込むこと)する
- プリフェッチされたデータは、システムメモリーよりも格段に早く読み込める内部レジスターやCPUキャッシュに配置される
- 1995年来販売されたほぼすべてのCPUは、データをアウトオブオーダー(順不同)でプリフェッチし、加えてそのほとんどを投機的にプリフェッチする
- ここにMeltdownとSpectreの背景にある根本的な問題がある。CPUを騙しCPUに任意のデータをプリフェッチさせ、データを内部レジスターとCPUキャッシュに読み込ませることが可能であり、CPUとOSによる保護機能をある手法で回避する
- その方法はタイミングサイドチャンネル攻撃と呼ばれ、この複雑な手法を用いプリフェッチされたデータを漏洩させることができる
- 後は総当たり攻撃を用い、システムメモリーが保護されているかどうかに関わらずメモリーの内容を徐々に読み取ることが可能である
MeltdownとSpectreの特徴と違い
「Meltdown」と「Spectre」はCPUの設計に起因するものですが、異なる方法でシステムメモリーから内容を読み取ります。Meltdown | Spectre | |
---|---|---|
影響を受けると公表されているCPU | すべてのモダンなIntel CPU(※1) IBM POWER 7世代のCPU IBM POWER 8世代のCPU IBM POWER 9世代のCPU |
すべてのモダンなCPU(※2) |
根本的な原因 | アウトオブオーダーによるデータのフェッチが、 メモリーのパーミッションチェックを回避する。 |
特権コードの投機的実行が権限のない攻撃者によって不用意にデータを漏洩するように制御される |
直接的な影響 | ユーザープログラムは、コンピューター及び仮想マシンのすべてのメモリーの内容を読み取ることができる。 これはカーネルのメモリーの内容も対象である。 もし悪意あるソフトウェアが仮想マシン内にあるなら、仮想マシン内のすべてのメモリーの内容を読み取ることができる。 もし悪意あるソフトウェアがハイパーバイザー上にあるなら、コンピューター及び仮想マシンのすべてのメモリーの内容を読み取ることができる。 |
ユーザープログラムや仮想マシンは、ホスト及びハイパーバイザー、他の仮想マシンのすべてのメモリーの内容を読み取ることができる。 |
デスクトップ環境での攻撃例 | コンピューターにインストールされた悪意あるソフトウェアは、他のアプリケーションで入力したパスワードを捕捉することができる。 | ウェブページに設置された広告内にある悪意あるJavaScriptコードは、ユーザーのGoogleのアカウント情報を取得できる。 |
サーバー環境での攻撃例 | 仮想環境ではない共有されたウェブホスト上で動作するユーザープログラムは、他のユーザーのパスワードや秘密鍵といった機密情報を含むすべてのメモリーの内容を読み取ることができる。 システム上で動作しているユーザープログラムは、システムのカーネルで暗号化されたディスクボリュームの暗号鍵を取得できる。 |
パブリッククラウドの仮想マシン上のユーザープログラムは、同一の物理ホスト上の他の仮想マシンからパスワードを読み取ることができる。 |
攻撃の有用性によるリスク | 攻撃速度により、非常に高いリスクを有する。 | リスクは高い。 メモリーの読み取り速度は遅く、CPUの負荷により気づきやすいため。 しかし全体的に攻撃の有用性は高い。 |
(※1)Pentium Pro以降のすべてのIntel CPUが影響を受ける可能性があります。
ただし2013年より前にリリースされたAtomベースのCPU及びQuarkとItaniumは、インオーダータイプなので影響を受けません。
(※2)技術的には投機的実行を行うCPUのみが影響を受けます。
しかしサーバーやデスクトップ分野で使われるすべてのCPUが影響を受けると想定するほうが現実的です。
これは影響を受けるベンダーリストに以下のベンダーが含まれているためです。
- AMD
- Apple
- ARM
- IBM
- Intel
- Marvell
- Nvidia
- Qualcomm
- Samsung