概要パスワードや暗号キーなどの機密データがメモリから盗まれる可能性がある Intel マイクロプロセッサの重大な設計上の欠陥は事実であり、その詳細が明らかになりました。
火曜日に、Intel製CPUのブループリントの欠陥により、アプリケーション、マルウェア、そしてウェブブラウザで実行されるJavaScriptが、本来アクセスを許可されていない情報、つまりOSカーネルのプライベートメモリ領域の内容を取得できる可能性があると警告しました。これらの領域には、ディスクからキャッシュされたファイル、マシンの物理メモリ全体へのアクセス権、その他の機密情報が含まれていることがよくあります。これらの情報は、通常のプログラムからは見えないはずです。
Intel の失態 (現在はコード名 Meltdown) により、そのデータに潜在的にアクセスできるようになり、悪質な Web サイトやマルウェアがコンピューターのメモリをくまなく探して認証情報、RNG シード、個人情報などを入手しようとする可能性がある。
以下は、Meltdown 攻撃を説明するビデオです。
#Meltdown を使用してリアルタイムでパスワードを盗む #intelbug #kaiser #kpti /cc @mlqxyz @lavados @StefanMangard @yuvalyarom https://t.co/gX4CxfL1Ax pic.twitter.com/JbEvQSQraP
— マイケル・シュワルツ (@misc0110) 2018年1月4日
パブリッククラウドサーバーなどの共有システムでは、構成によっては、ゲスト仮想マシン内のソフトウェアがホストマシンの物理メモリに侵入し、他の顧客の仮想マシンからデータを盗み出す可能性があります。XenおよびVMwareハイパーバイザーのアップデートの詳細については、以下をご覧ください。
影響を受けるのはIntelだけではありません。ArmとAMDのプロセッサも、程度の差はあれ、影響を受けています。AMDは、自社のチップが攻撃を受けるリスクは「ほぼゼロ」であると主張していますが、他のシナリオでは同社のCPUが脆弱である可能性があります。同社は、これらのバグが自社のハードウェアに与える影響を軽視する簡潔なページを公開しています。
Armは、スマートフォン、タブレット、その他の携帯型ガジェットに搭載されている、影響を受けるコアのリストを公開しました。このリストには、Linuxベースのシステム向けの回避策パッチへのリンクも掲載されています。Intelからは今のところ有益な情報は提供されていません。
これは本質的に、半導体業界による大失態と言えるでしょう。CPUを高性能化し、互いに競い合う中で、一つだけ置き去りにしてしまったものがあります。それはセキュリティです。
CPUセキュリティバグのPR悪夢から逃れようとするインテルのくだらない試みを翻訳しました
続きを読む
ライバルプロセッサが他社との差別化を図り、競合よりも高速なパフォーマンスを実現する方法の一つは、投機的実行を利用することです。内部パイプラインに命令を格納し続けるため、CPUは次に実行される命令を推測し、メモリから取り出して実行します。もし推測が間違っていた場合、CPUは投機的に実行したコードを元に戻し、実際に必要な処理を実行する必要があります。
残念ながら、デスクトップPC、ノートパソコン、スマートフォン、フォンドルスラブ、バックエンドサーバーに搭載されているチップは、誤ったコードパスを辿ったことに気付いたとしても、実行したすべてのステップを完全に元に戻すことはできません。つまり、本来取得すべきではなかったデータの残骸が一時キャッシュに残り、後でアクセスできてしまうのです。
秘訣は、通常のユーザープロセスに命令を並べ、セキュリティチェックを実行する前に、プロセッサが保護されたカーネルメモリから投機的にデータを取得するようにすることです。Meltdownを悪用する重要なx86-64コードは、次のように単純なものになることがあります…
; rcx = カーネルアドレス ; rbx = プローブアレイ 再試行: mov al, byte [rcx] shl rax, 0xc jz 再試行 mov rbx, qword [rbx + rax]
ユーザー プロセスとしてカーネル アドレスからバイトをフェッチしようとすると例外が発生しますが、後続の命令はすでに投機的に順序どおりに実行されておらず、フェッチされたバイトの内容に基づいてキャッシュ ラインにアクセスします。
例外が発生し、アウトオブオーダー命令が既にバイトの内容に作用している間に、他の場所で致命的ではない形で処理されます。キャッシュに対してFlush+Reloadという魔法のような処理を実行すると、どのキャッシュラインがアクセスされたかがわかり、カーネルメモリバイトの内容が分かります。これを何度も繰り返すことで、最終的にカーネルメモリの内容をダンプできます。
水曜日、多数の科学者による研究の結果、現代の CPU における投機的実行の悪用に関連する 3 つの密接に関連する脆弱性の詳細が公開されました。
- CVE-2017-5753: バリアント1として知られる境界チェックバイパス
- CVE-2017-5715: バリアント2として知られる、分岐ターゲットインジェクション
- CVE-2017-5754: バリアント3として知られる不正なデータキャッシュの読み込み
これらの脆弱性は、Meltdown(亜種3)とSpectre(亜種1および2)という2つのロゴ付き脆弱性に分類されています。どちらのリンクからも、攻撃の詳細な仕組みを知りたい場合は、詳細な技術論文が掲載されたウェブサイトにアクセスできます。
より詳細な点については、Google Project Zeroのブログ記事でも解説されています。最後に、Windowsで動作する概念実証用のエクスプロイトコードをご紹介します。
2 つのブランド バグの概要は次のとおりです。
- メルトダウン
- これは火曜日に報告された大きなバグです。
- 通常のプログラムによってこれを悪用され、プライベートカーネルメモリの内容が読み取られる可能性があります。
- この脆弱性は、Itaniumおよび2013年以前のAtomを除く、1995年以降のアウトオブオーダー実行Intelプロセッサすべてに影響を与える可能性があります。2011年以降のアウトオブオーダーx86-64 Intel CPUには確実に影響を与えます。この脆弱性を解消するための回避策パッチが、WindowsおよびLinux向けに現在公開されています。Appleのオペレーティングシステムにもパッチが適用されています。お使いのOSに最新のアップデートをインストールして有効にすることで、修正が適用されるはずです。ぜひお試しください。Windows Insiderユーザーの方は、既にパッチが適用されている可能性があります。Windows Server管理者は、カーネルとユーザー空間の分割機能をインストールしたら、必ず有効にする必要があります。この機能はデフォルトでは有効になっていません。
- Amazonは、顧客をMeltdownから保護するため、AWS Linuxゲストカーネルを更新しました。Googleは、クラウドユーザーに必要なパッチを適用し、仮想マシンを再起動することを推奨しています。MicrosoftはAzureに修正プログラムを展開しています。パブリッククラウドプロバイダーをご利用の場合は、セキュリティアップデートをご確認ください。
- 回避策では、オペレーティングシステムのカーネルを別の仮想メモリ空間に移動します。Linuxでは、これはカーネルページテーブル分離(KPTI)と呼ばれ、起動時に有効化または無効化できます。プロセッサモデルと実行しているソフトウェアの種類によっては、パフォーマンスが低下する可能性があります。デスクトップを頻繁に使用したり、ゲームをしたりする程度のユーザーであれば、ほとんど気にならないでしょう。ストレージへのアクセス、ネットワークへの負荷増大、あるいはカーネルシステムコールの連続実行などが発生する場合は、速度低下が顕著になります。パフォーマンスの低下は、状況によって異なります。
- この問題は、まだ提供されていないArm Cortex-A75コアにも影響します。Qualcommの次期Snapdragon 845は、A75コアを搭載した製品の一例です。この問題を軽減するためのLinuxカーネルKPTIパッチが利用可能です。パフォーマンスへの影響は不明ですが、最小限に抑えられると予想されます。
- さらに、Cortex-A15、Cortex-A57、およびCortex-A72コアは、メルトダウンの亜種の影響を受けています。つまり、ユーザープロセスはカーネルメモリではなく、保護されたシステムレジスタにアクセスできてしまうのです。Armは、脆弱なコア、リスク、および緩和策について詳細に説明したホワイトペーパーと製品一覧をこちらに掲載しています。
- Meltdown はAMD プロセッサには影響しません。
- Google の社員は、Intel Haswell Xeon CPU では通常のユーザー プログラムがカーネル メモリを読み取ることができることを確認しました。
- この脆弱性は、Jann Horn (Google Project Zero)、Werner Haas、Thomas Prescher (Cyberus Technology)、Daniel Gruss、Moritz Lipp、Stefan Mangard、Michael Schwarz (グラーツ工科大学) の 3 つの独立したチームによって発見され、報告されました。
- スペクター
- Spectre は、ユーザーモードアプリケーションが同じシステム上で実行されている他のプロセスから情報を抽出することを可能にします。また、コードが自身のプロセスから情報を抽出するのにも利用されます。ウェブページ内の悪意のある JavaScript が Spectre のバグを利用して、ブラウザのメモリから他のサイトのログイン Cookie を抽出しているところを想像してみてください。
- これは非常に厄介な脆弱性であり、パッチ適用は困難であるだけでなく、悪用も容易ではありません。前述のKPTI機能をインストールするだけではほとんどのプラットフォームでは意味をなさないため、パッチ適用は困難です。他のプログラムからの攻撃を回避するために、対策を施したソフトウェアを再コンパイルするか、チップセットのマイクロコードのアップグレードを待つ必要があります。IntelおよびAMDデバイス向けのSpectreに対する確実な修正プログラムはまだ提供されていません。
- Intelに関しては、Googleの研究者たちはHaswell Xeon CPUがユーザープロセスから任意のメモリへのアクセスを可能にすることを発見しました。ただし、概念実証は1つのプロセス内でのみ動作しました。さらに重要なのは、Haswell Xeonでは標準的なLinuxインストールにおいて、ユーザーモードプログラムが4GBの範囲内のカーネルメモリを読み取ることもできたことです。
- ここが本当に厄介なところです。KVM上のゲスト仮想マシン内の管理ユーザーが、特定の条件下でホストサーバーのカーネルメモリを読み取ることができる可能性があります。Googleによると、
- AMDは、自社のプロセッサはカーネルからデータを盗み出すSpectre攻撃(Variant 2)に対して実質的に耐性があると主張しています。Variant 1に関しては、マイクロコードのアップデートを待つか、Spectreウェブサイトの技術論文に記載されている今後の対策を適用してソフトウェアを再コンパイルする必要があります。
- 研究者らによると、AMDのRyzenファミリーはSpectreの影響を受けるとのことです。Googleの研究者らは、AMD FXコアとAMD Proコアがユーザープロセスによる任意のデータの取得を許す可能性があることを確認しました。ただし、概念実証は1つのプロセス内でのみ動作しました。また、デフォルト以外の構成(BPF JITが有効)でLinuxを実行しているAMD Proでは、通常のユーザープロセスが4GBのカーネル仮想メモリから読み取ることも可能です。
- Armの場合、Cortex-R7、Cortex-R8、Cortex-A8、Cortex-A9、Cortex-A15、Cortex-A17、Cortex-A57、Cortex-A72、Cortex-A73、およびCortex-A75コアがSpectreの影響を受けます。Cortex-Rシリーズのコアは、非常に特殊かつ厳密に管理された組み込み環境向けであり、信頼できないコードが実行される可能性は極めて低いことにご留意ください。Armにパッチを適用するには、前述のKPTI修正をカーネルに適用するか、上記リンク先のホワイトペーパーに記載されている新しい防御策を適用してコードを再コンパイルしてください。
- Googleの社員は、Arm Cortex-A57を悪用し、キャッシュスニッフィングを介してメモリから任意のデータを読み取れることをテストしました。ただし、この概念実証は1つのプロセス内でのみ機能しました。Googleは、最新のセキュリティアップデートを実行しているARM搭載Androidデバイスは、攻撃を阻止する対策(具体的には、攻撃に必要な高精度タイマーへのアクセスを制限すること)により保護されていると確信しています。ChromeとChromeOSを含むGoogle製品のセキュリティパッチ、緩和策、アップデートについては、こちらをご覧ください。
- この脆弱性は、Jann Horn (Google Project Zero)、Paul Kocher の各チームによって発見および報告され、アルファベット順に Daniel Genkin (ペンシルバニア大学およびメリーランド大学)、Mike Hamburg (Rambus)、Moritz Lipp (グラーツ工科大学)、Yuval Yarom (アデレード大学および Data61) の協力により解決されました。
Intel、AMD、Armは昨年6月にこれらのセキュリティホールについて警告を受けていたと聞いています。私たちからのアドバイスは、落ち着いて対応し、OSとファームウェアのセキュリティアップデートをできるだけ早く適用し、信頼できないコードを実行せず、Chromeでサイト分離を有効にすることを検討して、これらの設計上の欠陥を悪用してブラウザプロセスからセッションCookieを盗もうとする悪意のあるウェブページを阻止することです(Firefoxには独自の緩和策があります)。
Xenハイパーバイザーを使用している場合は、セキュリティパッチがリリースされたらすぐに適用してください。IntelとAMDのプロセッサが影響を受けており、Armも影響を受けるかどうかは現在調査中です。
ハイパーバイザープロジェクトチームによると、これらのプロセッサセキュリティホールにより、「Xenゲストは、他のゲストに割り当てられたメモリを含む任意のホストメモリの内容を推測できる可能性があります」とのことです。パブリッククラウドプロバイダーによる大量再起動を経験したことがある、あるいは予定されている場合は、これが原因かもしれません。
一方、VMware の ESXi、Workstation、Fusion ハイパーバイザーには、基礎となるハードウェア設計の欠陥に対処するためのパッチを適用する必要があります。
最後に、私たちメディア関係者がこの設計ミスに大騒ぎしていると思っているなら、次の点を確認してください。CERT は、この問題を本当に解決するには、CPU を捨てて脆弱性のない CPU を購入することを推奨しています。®
追加更新
CERT はアドバイスを「CPU を交換する」から「アップデートを適用する」に格下げしました。