JVNTA#96129397
Web Rehosting サービスにおいて複数ウェブサイトに跨ったコンテンツの改ざん・盗聴等が行われる問題
NTT セキュアプラットフォーム研究所および早稲田大学の研究チームにより、Web Rehosting と呼ばれるサービスを利用するユーザのブラウザ上で複数ウェブサイトのコンテンツを跨ったコンテンツ改ざんや盗聴などが可能となるセキュリティ上の問題が発見されました。この問題は研究チームにより NDSS 2020 において公表されました。
Web Rehosting サービスとは、本研究において提唱されたウェブサービス群の名称であり、指定された他のウェブサイトからコンテンツを取得し、変換などの処理を加えた後に自らのサーバに再度ホスティングして表示させる(再ホストする)機能を持っています。Web Rehosting サービスに該当するサービスとして、ウェブインターフェースから閲覧したいURLを指定する Web プロキシ、ウェブサイト全体を翻訳する Web 翻訳、ウェブサイトのスナップショットを保存する Web アーカイブなどが含まれます。
Web Rehosting に該当するサービスが対策を講じていない場合、ユーザのブラウザリソースの一部が悪意ある第三者によって不正に操作され、セキュリティ・プライバシー上の被害を受ける可能性があります。Web Rehosting の運用者が対策を講じる上では、当記事の「対策方法」を参照してください。
Web Rehosting サービス利用者のブラウザ
Web Rehosting について
Web Rehosting サービスとは、他のウェブサイトのコンテンツを再ホストした上でユーザに閲覧させるサービスであり、インターネットのオープン性を担保するための機能を提供するサービスとして広くインターネットのユーザに利用されています。例えば、フィルタリングや検閲を回避するための Web プロキシ、言語の壁を超えるための Web 翻訳、過去のコンテンツを閲覧するための Web アーカイブなどの Web Rehosting サービスがあります。ユーザが直接アクセスして閲覧することができないウェブサイトのコンテンツであっても、Web Rehosting サービスが一度コンテンツをそのサービス上にホストするため、ユーザは Web Rehosting サービスを介してコンテンツにアクセス・閲覧することができます。
Web Rehostingに対する攻撃の原理
Web Rehosting サービスは、異なるウェブサイトのコンテンツを Web Rehosting サービスのドメインのウェブサイト上に再ホストします。ウェブブラウザには、URL スキーム・ドメイン名・ポート番号の組み合わせで識別されるオリジンに基づいて、アクセス制御を行う同一オリジンポリシー(Same Origin Policy, SOP)という機構が備わっています。SOP は、ブラウザ上で読み込まれたコンテンツに対して、そのリソースから他のオリジンのリソースにアクセスできないように制限します。しかし、Web Rehosting サービスでは、異なるオリジンの複数コンテンツが、同一のオリジンとして統合された上で再ホストされてユーザに送信されることにより、ブラウザ上では Web Rehosting 経由で受信した複数のコンテンツが同一オリジンと見なされるため、これらコンテンツ間では SOP によるアクセス制御が機能しなくなります。この現象を悪用することで、悪意のあるウェブサイトのコンテンツが正規のコンテンツに影響を与えることが可能になります。
研究チームにより公開された論文 Melting Pot of Origins: Compromising the Intermediary Web Services that Rehost Websites では、Web Rehosting サービスにおけるオリジン統合によって可能となる、以下の5種類の攻撃について説明しています。
(I) Persistent-MITM: 継続的な中間者攻撃による通信内容の盗聴・改ざん
(II) Privilege Abuse: リソースアクセス権限の濫用による情報漏洩
(III) Credential Theft: パスワードマネージャの自動補完機能を悪用したパスワード情報の漏洩
(IV) History Theft: Cookie や localStorage などのリソースファイルによるブラウザの閲覧履歴漏洩
(V) Session Hijacking and Injection: ログイン情報を保持するCookieを悪用した HTTP セッションのハイジャック・インジェクション
攻撃(I)は、標的ユーザが Web Rehosting サービス経由で悪性ウェブサイトにアクセスした後に、正規のウェブサイトに Web Rehosting サービス経由でアクセスした際に発生するものです。逆に、攻撃(II)〜(V)は、標的ユーザが正規のウェブサイトに Web Rehosting サービス経由でアクセスした後に、悪性ウェブサイトにアクセスした際に発生するものです。
(I) Persistent-MITM
5つの攻撃のうち、最も脅威の深刻度が高いといえるのが Persistent-MITM です。この攻撃では、ユーザが Web Rehosting 上に再ホストされた悪意あるウェブサイトにアクセスした際に、ユーザのブラウザに悪性なスクリプトが登録されます。登録されたスクリプトは Web Rehosting のオリジンに紐付けられ、以後ユーザが Web Rehosting を経由して正常なウェブサイトを閲覧した際のあらゆるリクエスト・レスポンスを監視し、攻撃者による中間者攻撃を可能とします。このスクリプトは、ブラウザに保存されたデータの削除または再インストールが行われるまでの間、半永続的に作用し続けます。
具体的には、攻撃者は Service Worker と呼ばれるウェブ機能を用いて Persistent-MITM を実行します。Service Worker は、JavaScript で記述されたイベント駆動型のスクリプト(Service Worker スクリプト)をユーザのブラウザに登録させることで、ブラウザとウェブサービス間の通信をコントロールすることができる強力な機能です。通常の用途では、管理者が自身のウェブサービスのオリジンに紐付いた Service Worker スクリプトを登録させることが想定されており、第三者によって作成されたスクリプトがユーザのブラウザに登録されることはありません。しかし、攻撃者はさまざまなファイルを再ホストすることができる Web Rehosting の特性を悪用することで、悪意あるスクリプトを Web Rehosting のオリジンに紐づけて、ユーザのブラウザに登録させることができてしまいます。
また攻撃者は、Service Worker の代わりに Application Cache (AppCache) と呼ばれるウェブ機能を用いて同様の攻撃を行うことができます。AppCache による攻撃では、Service Worker スクリプトではなく、キャッシュマニフェストと呼ばれるファイルがユーザのブラウザに登録されます。2020年7月現在、AppCache は W3C の標準から削除されていますが、現行の主要なブラウザで動作することが確認されています。
(II) Privilege Abuse
Privilege Abuse は、ユーザが Web Rehosting を経由して閲覧したウェブサイトにおいて許可したパーミッションを、悪意あるウェブサイト上で許可なく再利用される攻撃です。
パーミッションによって保護されたリソースには、位置情報、マイク、カメラといったプライバシー情報などが含まれます。
通常、ウェブサイト側がパーミッションで保護されたリソースに初めてアクセスを試みる際、ブラウザの画面上に確認ダイアログが表示されます。一度ユーザが許可を行うと、同じウェブサイト(オリジン)上でこの許可状態が保存され、次にリソースにアクセスを試みる際にはユーザへの確認なくプライバシー情報を取得することができます。しかし、ユーザが Web Rehosting を介して閲覧しているウェブサイト上でこうしたリソースへのアクセスを許可した場合、許可状態は Web Rehosting のオリジン全体に対して保存されます。攻撃者はこの許可状態を利用し、再ホストされた悪意あるウェブサイトに訪れたユーザのプライバシー情報を、確認ダイアログなしで窃取することができてしまいます。
(III) Credential Theft
Credential Theft は、攻撃者によってユーザの ID やパスワードといった認証情報が窃取される攻撃です。この攻撃は、ユーザが Web Rehosting を経由してウェブサイトにログインした際に、ブラウザ等に搭載されたパスワードマネージャーに ID およびパスワードを保存することを前提とします。このとき、ID とパスワードは Web Rehosting のオリジンに紐付けられて保存されます。後にユーザが再ホストされた悪意あるウェブサイトにアクセスした際、パスワードマネージャーは悪意あるウェブサイトに設置された偽のログインフォームに対して ID とパスワードを自動的に補完してしまい、これらの認証情報が攻撃者のもとに送信されます。
この攻撃は、Web Rehosting の中でも主に Web プロキシを利用するユーザに対して成立するものであり、ウェブサイトへのログインをサポートしていない Web 翻訳や Web アーカイブでは成立しません。また、ユーザがパスワードマネージャーを利用していない場合や、パスワードマネージャーが ID およびパスワードをログインフォームに自動的に補完しない場合、この攻撃は成立しません。
(IV) History Theft
History Theft は、Web Rehosting 経由で表示したウェブサイトの閲覧履歴が推測される攻撃です。一般に、ウェブサイトは JavaScript によってCookie あるいは localStorage といったブラウザ上のストレージに文字列データを書き込むことがあります。こうしたウェブサイトをユーザが Web Rehosting 経由で閲覧すると、Cookie や localStorage のデータは Web Rehosting のオリジンに紐付いて書き込まれます。したがって、ユーザが再ホストされた悪意あるウェブサイトを訪れた際に、攻撃者は他のウェブサイト上で書き込まれた Cookie や localStorage のデータを収集することができます。Cookie や localStorage に設定される文字列のセットはウェブサイトごとに様々ですが、ユーザのブラウザストレージに特定のウェブサイトにおいてのみ書き込まれるユニークな文字列が含まれていた場合、攻撃者はユーザがそのウェブサイトに訪問したことがあると推定することができます。
この攻撃は、Web Rehosting 経由で閲覧されたウェブサイトが JavaScript によって Cookie および localStorage にデータを書き込まない場合や、記録される文字列のセットが複数のウェブサイトで用いられており、一つのウェブサイトに特定されないような場合には成立しません。
(V) Session Hijacking and Injection
Session Hijacking は、ユーザのログイン状態等を管理するセッションCookieが窃取される攻撃です。再ホストされたウェブサイトへのログインをサポートしている Web Rehosting は、ウェブサイトで発行されたセッション Cookie を中継し、ユーザのブラウザに保存します。このとき、セッション Cookie の Domain 属性はもともとのウェブサイトから Web Rehosting のドメインへと変換されます。セッション Cookie に第三者からのアクセスを防止する HTTPOnly 属性が設定されていない場合、再ホストされた悪意あるウェブサイトはこの Cookie にアクセスできるため、クロスサイトスクリプティング等と同様の手法によって窃取されます。ユーザのセッション Cookie を取得した攻撃者は、ユーザのログイン状態を引き継いだ状態で SNS やショッピングサイトを利用できてしまいます。
また、この攻撃を応用した Session Injection は、ユーザのブラウザに意図的にセッション Cookie を保存させ、攻撃者があらかじめ用意したアカウントへ強制的にログインさせる攻撃です。検索エンジンや動画サイトでは、ログインしているアカウントにユーザの検索履歴や視聴履歴といった情報が集積されるため、Session Injection は攻撃者がユーザの行動を追跡し、プライバシー情報を得るために有効です。
(III)と同様に、この攻撃は主に Web プロキシを利用するユーザに対して成立するものであり、ウェブサイトへのログインをサポートしていない Web 翻訳や Web アーカイブでは成立しません。
(I) Persistent-MITM
Web Rehosting サービス経由でアクセスした悪性ウェブサイトのコンテンツに Service Worker もしくは AppCache が含まれている場合に、ブラウザ上でそれらが永続的に動作し、以降の Web Rehosting を経由したあらゆるウェブサイトへのアクセスに対して中間者攻撃を受ける可能性があります。
(II) Privilege Abuse
Web Rehosting サービス経由でアクセスしたウェブサイトに対してカメラや位置情報等のリソースへのアクセスを許可した場合、それ以降に Web Rehosting サービス経由でアクセスする悪性ウェブサイトのコンテンツにも同様のアクセス権限が付与されることから、そのアクセス権限を悪用してカメラや位置情報を利用される可能性があります。
(III) Credential Theft
Web Rehosting サービス経由でアクセスしたウェブサイトの認証情報(ID・パスワード情報)をブラウザに保存した場合、それ以降に Web Rehosting サービス経由でアクセスする悪性ウェブサイトのコンテンツでもブラウザの自動補完機能によって上記の認証情報を送信するため、その認証情報を悪用される可能性があります。
(IV) History Theft
Web Rehosting サービス経由でアクセスしたウェブサイトで Cookie や localStorage などのリソースを保存する場合、それ以降に Web Rehosting サービス経由でアクセスする悪性ウェブサイトのコンテンツが Cookie や localStorage の内容が漏洩し、これまでアクセスしたウェブサイトの履歴を推測され、トラッキングや個人特定につながる可能性があります。
(V) Session Hijacking and Injection
Session Hijacking において、ユーザのセッション Cookie を取得した攻撃者は、ユーザのログイン状態を引き継いだ状態で SNS やショッピングサイトを利用できてしまうため、登録されている個人情報の窃取や、ユーザになりすました投稿などが可能となります。Session Injection において、攻撃者が用意したアカウントへ強制的にログインさせられたユーザは、検索履歴、動画視聴履歴、商品閲覧履歴といったプライバシー情報を窃取されます。
Web Rehostingサービスが実施できる対策
再ホストされるウェブサイトごとに異なるドメイン名を設定する
この対策は攻撃(I)〜(V)のすべてに対して有効です。
再ホストされるウェブサイトごとに異なるサブドメインを設定することで、オリジンが分割され、Same Origin Policy による保護が有効になります。
(例)
<https://rehosted.example/?url=a.example>
<https://rehosted.example/?url=b.example>
↓
<https://a-example.rehosted.example/>
<https://b-example.rehosted.example/>
再ホストしたページの URL を一時リンクにして第三者からのアクセスを防ぐ
この対策は攻撃(I)〜(V)のすべてに対して有効です。
一時的なトークン等を用いて、再ホストしたページの URL を、第三者からアクセスできないようにします。ただし、Web アーカイブのように、URL を第三者と共有することを想定しているサービスでは採用できません。
Service Worker と AppCache を無効化する
この対策は攻撃(I)に対して有効です。
Service Worker を読み込む際に、コンテンツのリクエストヘッダに Service-Worker: script が含まれます。リクエストヘッダに含まれる Service-Worker: script を削除することで、悪性な Service Worker をユーザのブラウザへインストールさせることを防ぐことができます。
同様に、AppCache を利用するために宣言されるキャッシュマニフェストファイルの再ホストを拒否することで、ユーザのブラウザ上での悪性な AppCache の動作を防ぐことができます。
一般的な Web Rehosting サービスは Service Worker や AppCache を利用しているウェブサイトに対応していません。これは、コンテンツの再ホストによって URL が変更されるため、Service Worker や AppCache を利用するためにあらかじめ指定した Service Worker スクリプトの URL や AppCache のキャッシュマニフェストファイルに記述した URL が無効になるためです。攻撃者が、Service Worker スクリプトおよびキャッシュマニフェストがどういった URL に再ホストされるかを予測して指定した場合にのみ、有効となります。つまり、Service Worker や AppCache が正規には利用できない一方で、悪用は可能になります。したがって、上記のような対策を施したとしても、一般的な Web Rehosting サービスにおいては本来の機能を阻害することはありません。ただし、Service Worker や AppCache をサポートする Web Rehosting サービスについては、対策によって Service Worker や AppCache が動作しなくなることを考慮してください。
再ホストしたコンテンツを、sandbox 属性を宣言した iframe 内に格納する
この対策は攻撃(III)に対して有効です。
sandbox 属性を宣言した iframe 内のコンテンツはサンドボックス化されておりパーミッションの要求を挙げることができません。よって、再ホストされたコンテンツを iframe 内で表示することによって悪意のあるパーミッション要求を防ぐことができます。なお、iframe 内で再ホストされたコンテンツを表示する方法はいくつかの Web Rehosting サービスではすでに導入されています。
セッションを管理する Cookie に対して HttpOnly 属性を付与する
この対策は攻撃(V)に対して有効です。
Web Rehosting サービスが HTTP ヘッダの Cookie を中継する際に、セッションを管理する Cookie に対して HttpOnly 属性を付与することで、JavaScript から Cookie 情報にアクセスすることを防止できます。Cookie の HttpOnly 属性付与は従来の XSS によるセッションハイジャック対策として推奨されているものです。
ユーザが実施できる対策
ブラウザのプライベートモードを利用する
この対策は攻撃(I)〜(V)のすべてに対して有効です。
ブラウザのプライベートモード機能を有効にして Web Rehosting サービスを利用した場合、攻撃に Service Worker や Cookie などのリソースに保存されるデータは、ブラウザを閉じる度にすべて削除されるため、各攻撃が極めて成立しにくいものとなります。
Web Rehosting を介して閲覧しているウェブサイト(SNSやショッピングサイトなど)へのログインを行わない
この対策は攻撃(III)、(V)に対して有効です。
Web Rehostingを介して閲覧しているウェブサイト上で、位置情報やカメラ等へのパーミッション要求に対して許可しない
この対策は攻撃(II)に対して有効です。
-
NDSS Symposium 2020
Melting Pot of Origins: Compromising the Intermediary Web Services that Rehost Websites
本文書はサービス事業者やユーザへの注意喚起を目的として、NTT セキュアプラットフォーム研究所の渡邉卓弥氏、塩治榮太朗氏、秋山満昭氏、および JPCERT/CC が共同で執筆しました。