セキュリティの脆弱性がどのようにして発見されるのか疑問に思ったことはありますか? 英国に本拠を置く企業 GraphicsFuzz は、Samsung Galaxy S6 のグラフィックス ドライバーのバグに遭遇した経緯について、Google Chrome で開いているタブのデータを表示するために悪用される可能性があると説明しています。
3 月下旬、GPU の信頼性テストを専門とする英国に本拠を置く新興企業から、次のような相談を受けました。 彼らが発見したGPUのバグ それが原因となる クアルコム スナップドラゴン 845サムスンギャラクシーS9/S9+ Web ページにアクセスしたときに再起動します。 と呼ばれる会社 グラフィックスファズ、私たちと協力してこの問題を報告しました クアルコム そして サムスン. 読者の中には、企業がどのような状況にあるのか知りたいと思った人もいました。 グラフィックスファズ はこれらの脆弱性を発見できるため、同社と協力して古い GPU の脆弱性を発見した方法を紹介しました。 すでにパッチが適用されているこの脆弱性により、攻撃者はリモートからコンテンツを「スパイ」することができます。 グーグルクローム のブラウザタブ サムスンギャラクシーS6.
このユーザーは、悪意のある Web ページにアクセスする前に銀行の Web サイトを閲覧していました。 コンテンツはキャプチャされ、リモート サーバーにアップロードされました。 ソース: グラフィックスファズ.
GraphicsFuzz が GPU のバグを見つける方法
グラフィックス ドライバーは、シェーダー プログラムを取得して GPU に送信して実行し、画像をレンダリングすることによって機能します。 シェーダーを GPU に送信する前に、グラフィックス ドライバーはシェーダーを GPU が理解できる形式に変換します。 翻訳に誤りがあると、レンダリングの失敗、プログラムやデバイスのクラッシュ、間違った画像、さらにはセキュリティの問題が発生する可能性があります。 グラフィックスファズ 持っています 自動テストスイート これにより、一連の参照シェーダーに基づいてこれらのバグを見つけることができます。 ユーザーの場合 テストを実行する、結果として得られる画像はすべて同じに見えるはずです。 画像が異なって見える場合は、バグがあったことを意味します。
GraphicsFuzz テスト スイートを実行しているいくつかの一般的なデバイスの結果。 これらのチャートには、Samsung Galaxy S6、Samsung Galaxy S7、および Samsung Galaxy S8 が含まれています。 ソース: グラフィックスファズ.
サムスンギャラクシーS6の場合、 グラフィックスファズ 行の 1 つの画像に、別のテーブルにあるはずの画像が表示されていることを発見しました。 これは、以前のテストの画像が後のテストに漏洩していたことを意味します。 その後、チームは Google Chrome でテスト スイートを再実行したところ、Web ページの一部が画像に表示されていることを発見しました。 さらに、別のタブを開くと、画像に他のタブの一部が表示されることがわかりました。 基本的に、このバグにより、ある Google Chrome タブから別の Chrome タブに関する情報が漏洩する可能性がありました。 後ろのチーム グラフィックスファズ 意図的にセキュリティ バグを探していたわけではありませんが、テストの結果、最終的にセキュリティ バグを発見しました。 (チームは、Galaxy S6 上の標準の Samsung ブラウザでもバグを再現したことに注意してください。 モジラ Firefox.)
バグの仕組み
Samsung Galaxy S6 で長期にわたるバグを引き起こすために使用された画像。 ソース: グラフィックスファズ.
によって作成された「悪意のある」Web ページ グラフィックスファズ は、WebGL を使用して、上に示したようにキャンバス内に空間シーンを描画しようとします。 各ピクセルの色は、GPU 上で実行するために Web ページによって提供されるプログラムであるフラグメント シェーダーによって決定されます。 の グラフィックスファズ フレームワークがフラグメント シェーダーを変更したため、非常に長時間実行されるようになりました。 シェーダーの実行時間が長すぎると、通常、ブラウザーまたはオペレーティング システムはレンダリングを中止します。 ただし、GPU は数ピクセルを描画した後にレンダリングを中止しましたが、GPU ドライバーはこれを Google Chrome に報告しませんでした。 (記事の上部にあるガベージ ビデオ メモリを示す画像を見ると、実際に上部に宇宙シーンの一部が表示されています。 これは、中止前にレンダリングされたピクセルがそのまま残されることを意味します。つまり、最終的にレンダリングされたイメージは、ほとんどがガベージビデオになります。 メモリ。 ビデオ メモリは他の Web ページをレンダリングするために継続的に使用されるため、「ガベージ」データには実際には他の Web ページの以前のレンダリングが含まれています。 したがって、他の Web ページが「悪意のある」Web ページに表示されてしまいます。 重要なのは、WebGL を使用すると、Web ページがレンダリングされているコンテンツをキャプチャできるようになります。 この画像はリモート サーバーにアップロードされます。
Chrome タブのデータの「漏洩」を引き起こす長期にわたる GPU バグを説明する図。 ソース: グラフィックスファズ.
Google Chrome は複数のプロセスを使用するため、さまざまなタブが分離されることが多く、表面的にはこの悪用は不可能に見えます。 ただし、Chrome は単一の「GPU プロセス」を使用して GPU と対話します。これは、すべてのタブが同じ GPU メモリを共有することを意味するため、このエクスプロイトが機能することを可能にします。 上の図はこれをさらに詳しく示しています。
このバグは、このビデオの最初の 22 秒で示されています。 GraphicsFuzz によって発見された他のセキュリティ問題も実証されています。
学ぶべき教訓
WebGL では悪意のある Web ページがコードを GPU に送信して実行できるため、GPU が不正に動作すると、Google Chrome と Android のセキュリティ対策をすべてバイパスする可能性があります。 GoogleはGPUのバグを修正できない 同社はハードウェアとドライバーを管理していないためです。 この場合、バグを修正するのは GPU ベンダー (この場合は ARM) であり、その修正をアップデートに組み込むのはデバイスが影響を受ける OEM (この場合は Samsung) です。 これにキャリアを追加すると、このようなバグの修正にいかに長い時間がかかるかが簡単にわかります。 少なくとも5か月 ほとんどの Samsung Galaxy S6 ユーザーがパッチを受け取ることができます。
グラフィックスファズ GPU ベンダーが、間違ったコードを生成して GPU 上で実行する原因となるコンパイルミスのバグなど、検出が困難なバグを発見するのに役立ちます。 自動テスト フレームワークを使用すると、この記事で紹介したようなバグを見つけることができます。 「悪意のある」Web ページによって引き起こされる長時間ループは、次のような他のデバイスでも問題を引き起こすことが示されています。 HTC ワン M7 そして最近では サムスンギャラクシーS9. グラフィックスファズ 主力スマートフォンをテストし、 結果表 これは、テストのサブセットでのパフォーマンスに基づいてこれらのデバイスをランク付けします。 何百ものクラッシュとレンダリングエラー テスト中に発見されましたが、そのほとんどはセキュリティ上の脅威をもたらすかどうか調査されていません。 ただし、このエクスプロイトで示されているように、GPU の誤動作はセキュリティ リスクであり、1 つ以上の重大なセキュリティ脆弱性が発見を待っている可能性があります。 グラフィックスファズ GPU ベンダーが将来的にドライバーの品質向上を優先することを期待しています。
グラフィックス ドライバーの信頼性の比較。問題の合計数で並べ替えられます。 ソース: グラフィックスファズ.
開示スケジュール
- 2016 年 12 月に、 グラフィックスファズ にバグを報告しました Google Chromium バグトラッカー Chrome 特典プログラムの対象となっていたためです。 GraphicsFuzz が Google Chromium バグ トラッカーにバグを送信した後、そのバグは Google に受け入れられ、パッチ適用のために ARM と Samsung に転送されました。
- グーグル 報告書を転送した ARM および Samsung の連絡先まで。
- Samsung はこのバグにサイレントにパッチを適用し、2017 年 3 月から 6 月にかけてリリースされた Android 7.0 Nougat アップデートで修正を公開しました。 Samsung、Google、または ARM によって作成された CVE はなく、Samsung も ARM もパッチに関する情報をリリースしていませんが、次の点に注意してください。 グラフィックスファズ 経由でバグを報告しませんでした 適切なプロセス.
- 後で、 グラフィックスファズ Samsung と ARM の両方がこのレポートを確認し、ARM がそのレポートのおかげで問題を修正できたことを確認できました。
- 2017 年 8 月に、 グラフィックスファズ バグレポートに対して Google から 2,000 ドルの報酬が支払われました。
- 2017 年 11 月に、 バグレポートが公開されました.