web-dev-qa-db-ja.com

JavaScript以外の動的言語のVMでSpectreおよびMeltdownの緩和策が必要ですか?

SpectreおよびMeltdownの緩和策は、JavaScript VMに ChromeFirefoxIE/Edge および WebKit で追加されています。 。

他の動的言語のVMでも同様の緩和策が必要ですか?

たとえば、JavaScriptエンジンと同様に、LuaJITは信頼できないコードのJITコンパイルをサポートするため、緩和策が必要だと思います。 PUC Luaもこれらの緩和策を必要としますか、それとも単なるインタープリターであるため、これらの攻撃の影響を受けませんか?

CPython、PyPy、Ruby MRI)などの他のVMにも緩和策が必要ですか?これらのVMは信頼できないコードの安全な実行をサポートしようとしないため、これらの攻撃を無視できると思いますか? ?

4
user200783

VMが信頼できないコードを実行しない限り、noです。

「信頼できないコードを実行する」には、Github、StackOverflowなどからコードスニペットを取得し、次のようなあらゆる種類のサンドボックスで実行することが含まれることに注意してください:chroot、隔離されたコンテナーまたは仮想マシン(ただし、適切なブラウザー緩和策が講じられた後の、BrythonやEmscriptenなどのブラウザーサンドボックスを除く)。

VMが信頼できないコードを実行できる状況であれば、答えはitdependsです。 JSエンジンが現在備えている緩和策 のすべてまたは一部を必要としない可能性もありますが、脅威モデルははるかに複雑になります。

現在、VMがメルトダウンまたはSpectreの効果に理論的にさらされるためには、いくつかの要件を満たす必要があります。

  1. VMは、少なくとも外部にメッセージを送信できる信頼できないコードを実行します。

    攻撃者が後でアクセスできる場所にデータを表示または書き込むためのインターネットアクセスまたはアクセス許可を含みますが、これらに限定されません。

  2. VMを使用すると、それぞれのプログラミング言語命令の相対実行時間を測定するために使用できる高精度タイマーまたはツールを使用できます。

    同時スレッド間で共有されるバッファを含みますが、これに限定されません。

  3. VMは、少なくとも理論的には、信頼できないコードをコンパイル済みコードとほぼ同じ効率で実行できるようにする最適化手法を備えています。

    ジャストインタイム(JIT)コンパイルまたは最適化されたバイトコード生成を含みますが、これらに限定されません。

    信じられている[引用が必要]、少なくともCVE-2017-5715の場合、特定の状況(システムライブラリ内の特定のバイナリ命令シーケンスの存在や一連の不幸なイベントなど)では、この特定の要件はさらに緩和または解除される可能性があります。

  4. 次のいずれかの条件が満たされている。

    • MeltdownのOS緩和策は適用されません
    • VMは、信頼できないコードスニペットが実行される可能性があるのと同じプロセスで機密情報を読み込みます
    • 攻撃者は、信頼できないコードの実行中に、信頼できないコード自体から、またはその他の方法で、他のプロセス(メモリに機密情報があり、信頼できないコードが実行されるのと同じ物理システムで実行される)に何らかの入力を提供できます。その他の手段、直接的または間接的

上記の4つの条件がすべて当てはまる場合、理論的にはVMを使用して、SpectreやMeltdownの影響に基づいてシステムから機密情報を抽出できます。

事実上サードパーティのコードを実行しているにもかかわらずSpectreに公開されていない仮想マシンの簡単な例は、TrueTypeグリフヒンティング言語VMであり、スレッド化や命令のタイミングを一切許可しません。したがって、少なくとも要件#2に違反しています。

システムアップデートに関する重要な注意事項

Javascript PoCの場合、MeltdownやSpectreは、カーネルメモリや他のプロセスのメモリの読み取りには使用されません。それらは可能ですが、JavaScriptでのSpectreの主な問題VMは、機密データを含むブラウザプロセス内のVMがサンドボックスで実行されることです(以前は隔離され、安全である必要があります)。 (Webサイトのパスワード、Cookieなど)。

OSの更新(LinuxのKPTIなど)は、問題を完全に軽減するのに役立ちません。

  1. 彼らはメルトダウンをターゲットにしていますが、主な問題はSpectreです。
  2. KPTIが保証する唯一のことは、プロセスがカーネルメモリ(およびMeltdownのみを介してカーネルスペースにマップされた他のプロセスのメモリ)を読み取ることができないことです。 KPTIは、プロセス内のスレッドが、オペレーティングシステムの観点から、プロセス全体が読み取ることができるメモリを読み取ることを禁止していません。これは、同じブラウザープロセスに保存されているパスワードとCookieがJSサンドボックスの場合です。走る。

また、100%正確にするために、他の言語のVMで "similar mitigations"(JS VM onesへ)が必要かどうかを尋ねました。最新のブラウザー内JS VMは、ファイルシステム、IPC、アセンブリ言語、およびその他のシステムリソースへのアクセスが制限された、全体的に適切に設計されたサンドボックスをすでに備えています。 VM(たとえば、Node.jsプラットフォームに同梱されているV8 JS VM)にブラウザー内のJS VMが持っているよりも多くの権限または機能がある場合、それはsimilarではなくさらにより厳密な緩和を必要とするかもしれません。

2018年1月14日現在、これは理論上のものです。しかし、あなたの質問も理論的です。

3
ximaera