Google Chrome/Chromium で発見された Spook.js サイドチャネル攻撃とは?

Spook.js – New side-channel attack can bypass Google Chrome’s protections against Spectre-style exploits

2021/09/10 DailySwig — Google Chrome を標的とする、サイドチャネル攻撃が新たに発見された。攻撃者は、この Web ブラウザのセキュリティ保護機能を回避し、Spectre 型攻撃を用いて機密情報を取得できる。この、Spook.js と名付けられたサイドチャネル攻撃は、投機的実行 (Spectre) 攻撃に対するChromeの防御機能を回避し、認証情報や個人情報などを盗み出すことができます。

この、Spook.js と呼ばれる「一時的実行サイドチャネル攻撃」は、投機的実行(Spectre) のエクスプロイトに対する Chrome の保護機能を回避し、資格情報や個人データなどを盗むことができる。Spook.js: Attacking Chrome Strict Site Isolation via Speculative Execution と題された論文 (PDF) には、そのように記されている。

Spectre の攻撃

2018年に世界的な話題となった Spectre は、最新の CPU における最適化機能の欠陥を悪用して、異なるプロセスが互いのメモリー空間にアクセスするのを防ぐ、セキュリティ・メカニズムを回避させる脆弱性だった。この脆弱性により、Web アプリを含む多様なアプリケーションに対する広範な攻撃が可能となり、それぞれのアプリケーションやプロセスが、プロセッサやオンチップ・メモリとやり取りする仕組みを悪用して、さまざまな Web サイトで機密情報が盗まれることになった。

その後に、ブラウザ・ベンダーたちは、Spectre スタイルの攻撃を困難にするために、様々な対策を導入した。Google Chrome では、異なる Web ページが同じプロセスを共有することを防ぐ、Strict Site Isolation が導入された。また、64 Bit のアプリケーションであるにもかかわらず、各プロセスのアドレス空間を、個々の 32 Bit サンドボックスに分割した。つまり、すべての値を 32 Bit に限定することで、Spectre 攻撃者がパーティションの境界を越えられないようにして、情報漏洩の制限を高めることを目的としていた。

もはやアイソレーションが保たれない

このような対策が施されているにもかかわらず、ミシガン大学/アデレード大学/ジョージア工科大学/テルアビブ大学の研究者たちは Spook.js について、「ブラウザ・ベースの投機的実行攻撃からユーザーを保護するには、これらの対策では不十分だと示されている」と述べている。具体的には、Chrome の Strict Site Isolation 実装が、eTLD+1ドメインに基づいて Web ページを統合するため、攻撃者が操作するページから、他のサブドメイン上のページの機密情報を抽出できるという。

研究者たちは、「続いて、Chrome の 32Bit サンドボックスを回避する方法も紹介する。それは、Chrome の JavaScript エンジンに、一時的に誤ったタイプのオブジェクトを操作させる、タイプ・コンフュージョン攻撃により実現できる。この方法では、複数の 32 Bit 値を、1つの 64Bit ポインタにまとめることが可能であり、プロセスのアドレス空間全体を読み取ることができる。最後に、初期の PoC エクスプロイトを超えて、開いているページのリストや内容、さらにはログイン情報などの機密情報を抽出す、るエンド・ツー・エンドの攻撃を実証する」と述べている。

PoC エクスプロイト

研究者チームは、Chrome ビルトイン証明書マネージャーを攻撃し、ユーザーの認証情報を盗むことで、Tumblr のアカウントを乗っ取ることを実証した。また、Spook.js が、Chrome Extension である LastPass のマスター・パスワードを回復することで、ユーザーのパスワード保管庫に保存されている、すべての認証情報にアクセスできることを示した。ユーザー名やパスワードに加えて、Chrome ブラウザや Chrome Extension でレンダリングされる Web サイトから、メモリに保存された数多くの機密データにもアクセスすることが証明された。

研究者たちによると、その時にユーザーが開いている Web サイト内の、タブリスト/電話番号/住所/銀行口座情報に加え、証明書マネージャーにより自動入力されたユーザー名/パスワード/クレジットカード番号などにアクセスできた。また、特定の状況下では、その時にユーザーが閲覧している、Google Photos の画像にもアクセスできたとのことだ。

この種の攻撃は、Google Chrome に限ったものではない。Microsoft Edge や Brave などの、Chromium ベースのブラウザでも起こり得る。これを受けて Google は、複数の拡張機能がメモリ圧迫下では、同一プロセスに集約されることを防ぐ機能 Strict Extension Isolation を導入し、Spook.js が他の拡張機能のメモリを読み取ることができないようにしている。この Strict Extension Isolation は、Chrome Ver 92 以上で、すでに有効になっている。

また、研究者たちは、「Web 開発者は、信頼できないユーザーが提供する JavaScript コードを、Web サイト内のすべてのコンテンツから直ちに分離し、別の eTLD+1 のドメインでホスティングできる。この方式により、攻撃者から提供されたコードと潜在的な機密データが、Strict Site Isolation により同じプロセスに集約されることはなくなり、プロセスの境界を越えられないようになるため、Spook.js であっても手が届かなくなる」とアドバイスしている。

さらに、「それぞれのサイトは、自分のドメイン名を Public Suffix List (PSL) に登録できる。PSL は Mozilla により管理され、ユーザーがダイレクトに名前を登録できるドメインのリストである (そのドメインが真のトップレベル・ドメインでなくても)。
Chrome は、eTLD+1 ドメインが PSL に存在する場合は、ページを統合しない。つまり、x.publicsuffix.com と y.publicsuffix.com は 常に分離される」と付け加えている。

Spook.js 緩和のためのアドバイス

ジョージア工科大学の Jason Kim は、Spook.js からユーザーを守る方法について、「今回の攻撃を受けて、Google は Strict Extension Isolation を導入し、複数の拡張機能が1つの Chrome プロセスに統合されないようにした。したがって、Chrome 92 にアップグレードすることで、一連の攻撃の1つのバージョンからは身を守ることができる。しかし、Strict Site Isolation がサイトを分離すべきかどうかを判断するロジックを使用しているため、いくつかの Spook.js 亜種は、依然として攻撃力を持ち続けるかもしれない」と述べている。

さらに Kim は、「このようなケースでは、対策のデプロイメントは、個々のユーザーではなく、Web サイトの管理者や開発者により行われる必要がある。幸いなことに、Spook.js を効果的に使用するためには、サイドチャネルに関する相当な専門知識が必要となるため、攻撃者となる者にとってハードルは高い」と、The Daily Swig に語っている。

なぜ、Chrome でサイドチャネル攻撃なのかという疑問を抱えつつ、また、文中の「最新の CPU における最適化機能の欠陥を悪用」は Intel だと推測しつつ、難解な記事でしたが最期まで訳すことができました。Intel の視点では、「異なるプロセスが互いのメモリー空間にアクセス」であり、Chrome の視点では「プロセッサとやり取りの仕組みを悪用されて機密情報が盗まれた」ということなのでしょう。その後に、Chrome 92 (現行は 93) には Strict Site Isolation が導入されたけど、それでもダメだった、というのが状況のようです。なお、Chrome 92.0.4515.107 へのアップデートは、Stable Channel Update for Desktop – July 20, 2021 で行われていますが、このサイドチャネル攻撃を特定することはできませんでした。悪用には、相当な専門知識が必要とのことなので、少し安心できますね。