Chrome の Site Isolation で Spectre のリスクを軽減する
2018年8月30日木曜日
この記事は Charlie Reis, Site Isolator による Google Online Security Blog の記事 "Mitigating Spectre with Site Isolation in Chrome" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Spectre に代表される投機的実行のサイドチャネル攻撃は、ウェブブラウザにとって新たなセキュリティ上の脅威です。ウェブサイトでこのような攻撃を使えば、ブラウザが開いている他のサイトのデータやログイン情報を盗むことができます。この攻撃による影響を軽減するために、Windows、Mac、Linux、Chrome OS の Chrome 67 で Site Isolation と呼ばれるセキュリティ機能が有効化されたことをお知らせします。Site Isolation は、Chrome 63 より、試験運用版のエンタープライズ ポリシーとしてオプションで利用できるようになりました。しかしその後、多くの既知の問題が解消されたため、パソコンのすべての Chrome ユーザーに対してデフォルトで有効化されました。
今回のリリースは、Site Isolation プロジェクト全体における一段階です。今後は、Spectre 以外の攻撃(完全に侵害されたレンダラー プロセスからの攻撃など)を軽減する他のセキュリティ アップデートにも注目してください。
Spectre とは
1 月、Google の Project Zero は、一般に Spectre および Meltdown と呼ばれている一連の投機的実行のサイドチャネル攻撃について開示しました。さらに、5 月には Spectre の亜種も開示しています。これらの攻撃は、ほとんどの CPU に搭載されている投機的実行機能を使って、コードがアクセスしてはならないメモリにアクセスし、タイミング攻撃によってそのメモリに保管されている値を取り出すというものです。これは実質的に、信頼できないコードがプロセスのアドレス空間内の任意のメモリを読み出せる可能性があることを意味します。
これによって特に影響を受けるのがウェブブラウザです。ブラウザは、複数のウェブサイトの悪意のある JavaScript コードを実行する可能性があるからです。多くの場合、そういったコードは同じプロセス内で実行されます。理論上、ウェブサイトは、そのような攻撃を使って同一オリジンポリシー(Same Origin Policy)をくぐり抜け、他のサイトから情報を盗むことができます。すべての主要なブラウザは、タイマーの粒度を下げる、JavaScript コンパイラを変更して攻撃を成功しにくくするなど、既に Spectre に対するいくつかの軽減策を導入しています。しかし私たちは、最も有効な軽減策は Site Isolation のようなアプローチによるものだと考えています。つまり、たとえ Spectre 攻撃が起こったとしても、同じプロセス内に盗む価値のあるデータを持たないようにすることです。
Site Isolation とは
Site Isolation は Chrome のアーキテクチャへの大きな変更で、各レンダラー プロセスの影響範囲を 1 つのサイトのドキュメントに制限します。その結果、Chrome はプロセス間の攻撃、すなわちサイト間の攻撃に対する保護をオペレーティング システムに任せることができるようになります。なお、Chrome における「サイト」の具体的な定義は、スキームと登録済みのドメインを含むものである点に注意してください。つまり、https://google.co.uk はサイトであり、https://maps.google.co.uk のようなサブドメインは同じプロセス内に存在します。
Chrome は常に、別のタブは別のレンダラー プロセスを使えるというマルチプロセス アーキテクチャを採用しています。場合によっては、あるタブの中で新しいサイトに移動すると、プロセスが切り替わることもあります。ただしそれでも、攻撃者のページが被害者のページとプロセスを共有できる可能性は残ります。たとえば、ページでクロスサイト iframe やクロスサイト ポップアップが生成される場合、通常、それらは同じプロセス内にとどまります。その場合、Spectre 攻撃を使ってプロセス内の別のフレームやポップアップのデータ(Cookie、パスワードなど)を読み取ることができます。
Site Isolation を有効化すると、各レンダラー プロセスには最大でも 1 つのサイトのドキュメントしか含まれなくなります。つまり、サイトが異なるドキュメントに移動すると、必ずそのタブでプロセスが切り替わることになります。さらに、すべてのクロスサイト iframe は、「プロセス外 iframe」を使って親フレームとは別のプロセスで処理されることになります。1 つのページを複数のプロセスに分割することで、Chrome の動作は大幅に変更されます。そのため、Chrome セキュリティ チームは、Spectre とは別に、この点を数年にわたって追求してきました。プロセス外 iframe は、Chrome 拡張機能のセキュリティ モデルを改善するために、昨年初めて利用されました。
各レンダラー プロセスが 1 つのサイトのドキュメントに制限されている場合でも、攻撃者のページがイメージやスクリプトなどのサブリソースとしてクロスサイト URL をリクエストし、そこから情報にアクセスして、漏洩させるリスクはまだ残されています。通常、ウェブブラウザは、ページに任意のサイトのイメージやスクリプトを埋め込むことを許可しています。しかし、ページがイメージやスクリプトをリクエストするように見せかけて、機密データを含む HTML や JSON の URL をリクエストすることも考えられます。通常、このレンダリングは失敗し、データがページに表示されることはありませんが、そのデータはレンダラー プロセスの中にあるので、Spectre 攻撃によるアクセスが考えられる状態になっています。Site Isolation には、このリスクを軽減する Cross-Origin Read Blocking(CORB)という機能が含まれています。現在、これは Fetch 仕様の一部になっています。CORB は、互換性にはほとんど影響を与えることなく、レンダラー プロセスからのクロスサイトの HTML、XML、JSON レスポンスを透過的にブロックしようとします。ウェブ デベロッパーは、Site Isolation と CORB を活用して最大限の保護を行うために、正しい MIME タイプと nosniff レスポンス ヘッダーをつけてリソースを提供していることを確認する必要があります。
Site Isolation は、Chrome の内部動作にとっては重大な変更ですが、ほとんどのユーザーやウェブ デベロッパーにとっては、目に見える変化は起こりません(いくつかの既知の問題は除きます)。ウェブサイト間の内部的な保護が強化されるだけです。ただし、Site Isolation によって、Chrome が作成するレンダラー プロセスの数は多くなるので、パフォーマンスとのトレードオフが発生します。プラスの面は、それぞれのレンダラー プロセスが小さく短命になり、内部的な衝突も少なくなります。しかし、実際のワークロードでは、プロセス数が増加する影響で、合計約 10~13% のメモリのオーバーヘッドが発生します。私たちのチームは、Chrome の速さと安全性を保つため、懸命にこの動作の最適化を続けています。
Site Isolation のメリット
Chrome 67 では、Windows、Mac、Linux、Chrome OS の 99% のユーザーで Site Isolation が有効になっています。(変更範囲の大きさを考慮し、パフォーマンスの監視と改善のために、1% は保留しています。)つまり、たとえ悪意のあるウェブページで Spectre 攻撃が行われたとしても、通常は他のウェブサイトのデータが同じプロセスに読み込まれていないので、攻撃者が悪用できるデータはかなり少なくなります。これにより、Spectre の脅威を大幅に軽減できます。
それを受けて、PC 向けに正確なタイマーや SharedArrayBuffer(正確なタイマーとして使用可能)などの機能を再び有効化することを検討しています。
現在進行中のその他の作業
現在私たちは、他の既知の問題が残されている Chrome for Android に Site Isolation を拡張する方法について検討しています。Site Isolation を有効化させる試験運用版エンタープライズ ポリシーは、Android 向けの Chrome 68 で利用できるようになり、chrome://flags/#enable-site-per-process から手動で有効化できるようになる見込みです。
現在私たちは、ブラウザのプロセスでさらに別のセキュリティ チェックを行い、Spectre 攻撃だけでなく、完全に侵害されたレンダラー プロセスからの攻撃も軽減できるように Site Isolation を強化する作業も行っています。このような機能強化によって、Chrome が実質的にレンダラー プロセス全体を信頼できないものとして扱うようにするという Site Isolation の当初の目的を実現できます。これらの機能強化についての最新情報にご期待ください!最後になりますが、他の主要なブラウザ ベンダーは、Site Isolation の度合いを上げることによって、Spectre に対する保護を行う関連手法を探っています。私たちは、各ベンダーと協力しており、ウェブ エコシステム全体の進展をうれしく思っています。
Site Isolation の改善にご協力を!
Chrome Vulnerability Reward Program からセキュリティ バグを送信してくださった研究者の皆さんに、報奨金を提供しています。Site Isolation に影響するセキュリティ バグには、期限付きで情報開示バグの通常額の最大 2 倍という高レベルの報奨金が提供される場合があります。詳細については、Chrome New Feature Special Rewards をご覧ください。
Reviewed by Eiji Kitamura - Developer Relations Team
Spectre に代表される投機的実行のサイドチャネル攻撃は、ウェブブラウザにとって新たなセキュリティ上の脅威です。ウェブサイトでこのような攻撃を使えば、ブラウザが開いている他のサイトのデータやログイン情報を盗むことができます。この攻撃による影響を軽減するために、Windows、Mac、Linux、Chrome OS の Chrome 67 で Site Isolation と呼ばれるセキュリティ機能が有効化されたことをお知らせします。Site Isolation は、Chrome 63 より、試験運用版のエンタープライズ ポリシーとしてオプションで利用できるようになりました。しかしその後、多くの既知の問題が解消されたため、パソコンのすべての Chrome ユーザーに対してデフォルトで有効化されました。
今回のリリースは、Site Isolation プロジェクト全体における一段階です。今後は、Spectre 以外の攻撃(完全に侵害されたレンダラー プロセスからの攻撃など)を軽減する他のセキュリティ アップデートにも注目してください。
Spectre とは
1 月、Google の Project Zero は、一般に Spectre および Meltdown と呼ばれている一連の投機的実行のサイドチャネル攻撃について開示しました。さらに、5 月には Spectre の亜種も開示しています。これらの攻撃は、ほとんどの CPU に搭載されている投機的実行機能を使って、コードがアクセスしてはならないメモリにアクセスし、タイミング攻撃によってそのメモリに保管されている値を取り出すというものです。これは実質的に、信頼できないコードがプロセスのアドレス空間内の任意のメモリを読み出せる可能性があることを意味します。
これによって特に影響を受けるのがウェブブラウザです。ブラウザは、複数のウェブサイトの悪意のある JavaScript コードを実行する可能性があるからです。多くの場合、そういったコードは同じプロセス内で実行されます。理論上、ウェブサイトは、そのような攻撃を使って同一オリジンポリシー(Same Origin Policy)をくぐり抜け、他のサイトから情報を盗むことができます。すべての主要なブラウザは、タイマーの粒度を下げる、JavaScript コンパイラを変更して攻撃を成功しにくくするなど、既に Spectre に対するいくつかの軽減策を導入しています。しかし私たちは、最も有効な軽減策は Site Isolation のようなアプローチによるものだと考えています。つまり、たとえ Spectre 攻撃が起こったとしても、同じプロセス内に盗む価値のあるデータを持たないようにすることです。
Site Isolation とは
Site Isolation は Chrome のアーキテクチャへの大きな変更で、各レンダラー プロセスの影響範囲を 1 つのサイトのドキュメントに制限します。その結果、Chrome はプロセス間の攻撃、すなわちサイト間の攻撃に対する保護をオペレーティング システムに任せることができるようになります。なお、Chrome における「サイト」の具体的な定義は、スキームと登録済みのドメインを含むものである点に注意してください。つまり、https://google.co.uk はサイトであり、https://maps.google.co.uk のようなサブドメインは同じプロセス内に存在します。
Chrome は常に、別のタブは別のレンダラー プロセスを使えるというマルチプロセス アーキテクチャを採用しています。場合によっては、あるタブの中で新しいサイトに移動すると、プロセスが切り替わることもあります。ただしそれでも、攻撃者のページが被害者のページとプロセスを共有できる可能性は残ります。たとえば、ページでクロスサイト iframe やクロスサイト ポップアップが生成される場合、通常、それらは同じプロセス内にとどまります。その場合、Spectre 攻撃を使ってプロセス内の別のフレームやポップアップのデータ(Cookie、パスワードなど)を読み取ることができます。
Site Isolation を有効化すると、各レンダラー プロセスには最大でも 1 つのサイトのドキュメントしか含まれなくなります。つまり、サイトが異なるドキュメントに移動すると、必ずそのタブでプロセスが切り替わることになります。さらに、すべてのクロスサイト iframe は、「プロセス外 iframe」を使って親フレームとは別のプロセスで処理されることになります。1 つのページを複数のプロセスに分割することで、Chrome の動作は大幅に変更されます。そのため、Chrome セキュリティ チームは、Spectre とは別に、この点を数年にわたって追求してきました。プロセス外 iframe は、Chrome 拡張機能のセキュリティ モデルを改善するために、昨年初めて利用されました。
1 つのページが、プロセス外 iframe を使う複数のレンダラー プロセスに分割される可能性もあります。 |
各レンダラー プロセスが 1 つのサイトのドキュメントに制限されている場合でも、攻撃者のページがイメージやスクリプトなどのサブリソースとしてクロスサイト URL をリクエストし、そこから情報にアクセスして、漏洩させるリスクはまだ残されています。通常、ウェブブラウザは、ページに任意のサイトのイメージやスクリプトを埋め込むことを許可しています。しかし、ページがイメージやスクリプトをリクエストするように見せかけて、機密データを含む HTML や JSON の URL をリクエストすることも考えられます。通常、このレンダリングは失敗し、データがページに表示されることはありませんが、そのデータはレンダラー プロセスの中にあるので、Spectre 攻撃によるアクセスが考えられる状態になっています。Site Isolation には、このリスクを軽減する Cross-Origin Read Blocking(CORB)という機能が含まれています。現在、これは Fetch 仕様の一部になっています。CORB は、互換性にはほとんど影響を与えることなく、レンダラー プロセスからのクロスサイトの HTML、XML、JSON レスポンスを透過的にブロックしようとします。ウェブ デベロッパーは、Site Isolation と CORB を活用して最大限の保護を行うために、正しい MIME タイプと nosniff レスポンス ヘッダーをつけてリソースを提供していることを確認する必要があります。
Site Isolation は、Chrome の内部動作にとっては重大な変更ですが、ほとんどのユーザーやウェブ デベロッパーにとっては、目に見える変化は起こりません(いくつかの既知の問題は除きます)。ウェブサイト間の内部的な保護が強化されるだけです。ただし、Site Isolation によって、Chrome が作成するレンダラー プロセスの数は多くなるので、パフォーマンスとのトレードオフが発生します。プラスの面は、それぞれのレンダラー プロセスが小さく短命になり、内部的な衝突も少なくなります。しかし、実際のワークロードでは、プロセス数が増加する影響で、合計約 10~13% のメモリのオーバーヘッドが発生します。私たちのチームは、Chrome の速さと安全性を保つため、懸命にこの動作の最適化を続けています。
Site Isolation のメリット
Chrome 67 では、Windows、Mac、Linux、Chrome OS の 99% のユーザーで Site Isolation が有効になっています。(変更範囲の大きさを考慮し、パフォーマンスの監視と改善のために、1% は保留しています。)つまり、たとえ悪意のあるウェブページで Spectre 攻撃が行われたとしても、通常は他のウェブサイトのデータが同じプロセスに読み込まれていないので、攻撃者が悪用できるデータはかなり少なくなります。これにより、Spectre の脅威を大幅に軽減できます。
それを受けて、PC 向けに正確なタイマーや SharedArrayBuffer(正確なタイマーとして使用可能)などの機能を再び有効化することを検討しています。
現在進行中のその他の作業
現在私たちは、他の既知の問題が残されている Chrome for Android に Site Isolation を拡張する方法について検討しています。Site Isolation を有効化させる試験運用版エンタープライズ ポリシーは、Android 向けの Chrome 68 で利用できるようになり、chrome://flags/#enable-site-per-process から手動で有効化できるようになる見込みです。
現在私たちは、ブラウザのプロセスでさらに別のセキュリティ チェックを行い、Spectre 攻撃だけでなく、完全に侵害されたレンダラー プロセスからの攻撃も軽減できるように Site Isolation を強化する作業も行っています。このような機能強化によって、Chrome が実質的にレンダラー プロセス全体を信頼できないものとして扱うようにするという Site Isolation の当初の目的を実現できます。これらの機能強化についての最新情報にご期待ください!最後になりますが、他の主要なブラウザ ベンダーは、Site Isolation の度合いを上げることによって、Spectre に対する保護を行う関連手法を探っています。私たちは、各ベンダーと協力しており、ウェブ エコシステム全体の進展をうれしく思っています。
Site Isolation の改善にご協力を!
Chrome Vulnerability Reward Program からセキュリティ バグを送信してくださった研究者の皆さんに、報奨金を提供しています。Site Isolation に影響するセキュリティ バグには、期限付きで情報開示バグの通常額の最大 2 倍という高レベルの報奨金が提供される場合があります。詳細については、Chrome New Feature Special Rewards をご覧ください。
Reviewed by Eiji Kitamura - Developer Relations Team