信頼されないコードの緩和策

2018年初頭、GoogleのProject Zeroの研究者たちは、多くのCPUで使用されている投機的実行の最適化を悪用する新しいクラスの攻撃開示しました。V8はJavaScriptを高速に実行するために最適化JITコンパイラであるTurboFanを使用しているため、特定の状況下では、開示されたサイドチャネル攻撃に対して脆弱になります。

信頼できるコードのみを実行する場合、何も変わりません #

製品が、完全に制御下にあるJavaScriptまたはWebAssemblyコードを実行するためにV8の埋め込みインスタンスのみを使用している場合、V8の使用は投機的サイドチャネル攻撃(SSCA)の脆弱性の影響を受けない可能性が高いです。信頼できるコードのみを実行するNode.jsインスタンスは、そのような影響を受けない例の1つです。

脆弱性を利用するには、攻撃者は埋め込み環境で注意深く作成されたJavaScriptまたはWebAssemblyコードを実行する必要があります。開発者として、埋め込みV8インスタンスで実行されるコードを完全に制御できる場合、それは非常にありそうもないことです。ただし、埋め込みV8インスタンスが任意のまたはその他の信頼できないJavaScriptまたはWebAssemblyコードのダウンロードと実行を許可している場合、または完全に制御されていないJavaScriptまたはWebAssemblyコードを生成して実行する場合(たとえば、コンパイルターゲットとして使用している場合)、緩和策を検討する必要があるかもしれません。

信頼できないコードを実行する場合は… #

最新のV8にアップデートして緩和策を活用し、緩和策を有効にする #

このクラスの攻撃に対する緩和策は、V8 v6.4.388.18からV8自体で利用できるため、埋め込みV8のコピーをv6.4.388.18以降にアップデートすることをお勧めします。FullCodeGenやCrankShaftをまだ使用しているV8のバージョンを含む古いバージョンのV8には、SSCAの緩和策はありません。

V8 v6.4.388.18以降では、SSCA脆弱性に対する保護を提供するのに役立つ新しいフラグがV8に導入されました。このフラグは--untrusted-code-mitigationsと呼ばれ、ビルド時のGNフラグv8_untrusted_code_mitigationsを使用して、実行時にデフォルトで有効になっています。

これらの緩和策は、--untrusted-code-mitigationsランタイムフラグによって有効になります

埋め込みを使用する開発者は、緩和策にパフォーマンスのトレードオフが伴う可能性があることに注意する必要があります。実際の影響は、ワークロードによって大きく異なります。Speedometerなどのワークロードでは影響はごくわずかですが、より極端な計算ワークロードでは最大15%になる可能性があります。埋め込みV8インスタンスが実行するJavaScriptおよびWebAssemblyコードを完全に信頼している場合は、実行時にフラグ--no-untrusted-code-mitigationsを指定して、これらのJIT緩和策を無効にすることができます。v8_untrusted_code_mitigationsGNフラグを使用すると、ビルド時に緩和策を有効または無効にできます。

V8は、Chromiumがサイト分離を使用するプラットフォームなど、埋め込みを使用する開発者がプロセス分離を使用することが前提となるプラットフォームでは、これらの緩和策をデフォルトで無効にすることに注意してください。

信頼されていない実行を別のプロセスでサンドボックス化する #

信頼できないJavaScriptおよびWebAssemblyコードを機密データとは別のプロセスで実行する場合、SSCAの潜在的な影響は大幅に軽減されます。プロセス分離を通じて、SSCA攻撃は、実行中のコードとともに同じプロセス内でサンドボックス化されたデータのみを観察でき、他のプロセスのデータは観察できません。

提供される高精度タイマーの調整を検討する #

高精度タイマーを使用すると、SSCA脆弱性におけるサイドチャネルを観察しやすくなります。製品が信頼できないJavaScriptまたはWebAssemblyコードからアクセスできる高精度タイマーを提供している場合は、これらのタイマーをより粗くするか、ジッターを追加することを検討してください。