StrandHogg 2.0 エクスプロイトの説明

StrandHogg 2.0 は、Android の危険な新しい脆弱性です。 これがユーザーにどのような影響を与えるか、また開発者がそれからアプリを保護する方法について説明します。

午後10時です。 自分のアクティビティがどこにあるか知っていますか? 何百万もの Android デバイスで悪用される可能性のある新しい脆弱性があり、これもかなり厄介です。 簡単に言うと、この設計上の欠陥により、攻撃者は別のアプリの上に独自のアクティビティ (ページ) を表示することができ、ユーザーを混乱させて個人データを漏らす可能性があります。 この脆弱性は StrandHogg 2.0 と呼ばれており、最近、 プロモン、ノルウェーの警備会社。

StrandHogg 2.0 の脆弱性は理論的には、Honeycomb (3.0) から Android 9 Pie (9.0) までの Android バージョンを実行しているすべての Android デバイスに影響を与えます。 に基づく 最新の Android バージョンの配布統計、つまり、 すべての Android デバイスの約 91.8% が StrandHogg 2.0 に対して脆弱です. 脆弱性が割り当てられました CVE-2020-0096 そして与えられたのは 重大度レベルは「重大」です。 動作するために特別な権限は必要なく、ほぼ完全にユーザーの操作なしで機能します。 ユーザーがしなければならないことは、悪意のあるコードが隠されたアプリを開くことだけであり、その後は悪用されやすくなります。

Promon は、私たちが最善を尽くすことができるよう、概念実証アプリとそのソース コードを親切にも私たちに送ってくれました。 エクスプロイトがどのように機能するか、それがユーザーにとって重要な理由、開発者がアプリを保護する方法を説明する それに対して。


使い方

Gmail を使用していて、Web リンクをクリックしたとします。 最近使用したアプリ画面にアクセスすると、Web ページが Gmail の「内部」にあるように見えるかもしれません。 プレビューには Web サイトが表示されますが、アプリのアイコンと名前は Gmail のもののままです。 これは、アプリ/アクティビティが同じタスク内の別のアプリ/アクティビティを起動するときに発生します。 ここで、そのリンクを意図的に開いたわけではないと想像してください。 あなたにとって、それは Gmail アプリの一部にすぎないように見えます。 これは StrandHogg 2.0 が利用する動作です。

ここではいくつかの詳細を省略する必要がありますが、このエクスプロイトがどのように機能するかを大まかに説明します。 以下では、攻撃者がユーザーの Gmail ログインを取得しようとしていると仮定します。

  1. ユーザーは悪意のあるアプリを (もちろん、悪意があるとは知らずに) ダウンロードして開きます。
  2. アプリはバックグラウンドで Gmail を開き、その上に類似したログイン アクティビティを配置し、別のアクティビティを起動します。
  3. ユーザーが Gmail を開くと、Gmail のログイン画面のように見えますが、実際には攻撃者のフィッシング活動です。

ステップ 2 で開始される最後のアクティビティは、疑惑を回避できるものであれば何でもかまいません。 アプリはクラッシュを装ってホーム画面に戻ることも、何も起こらなかったかのようにメインのアクティビティを開くこともできます。 ユーザーが目にする可能性のある唯一の不審な点は、すべてのアクティビティが起動するときに表示される大量のオープニング アニメーションです。 最悪の部分: Gmail が開かれたようにも見えません。

出典:プロモン

もちろん、攻撃者は偽のログイン画面を表示するだけではありません。 悪意のあるアプリは、代わりにアクセス許可のプロンプトを表示し、ユーザーをだまして望まないアクセス許可を付与する可能性があります。 アクセシビリティなどの特別なアクセス許可を要求すると、ユーザーが不審に思う可能性がありますが、ストレージ アクセスなどでは多大な損害を与える可能性があります。


技術的な豆知識

次のセクションでは、StrandHogg 2.0 がどのように動作するかについての概要を説明します。 Promon はあと数か月間完全な詳細を公開しないため、このエクスプロイトがどのように実装されているかを正確に共有することはできません。 ただし、技術的な詳細についてはお話しできることがいくつかあります。

一言で言えば、StrandHogg 2.0 は Android をハイジャックします。 Context.startActivities() 3 つのインテントを使用する API メソッド。

  • 最初のインテントは、この例の場合、Gmail を起動するインテントです。 フラグが付いています Intent.FLAG_ACTIVITY_NEW_TASK.
  • 2 番目の意図は悪意のあるものです。 この例では、類似したログイン アクティビティが対象です。 このインテントにはフラグがありません。
  • 3 番目の意図は気を散らすことです。 これにより、ユーザーがタップしたアプリ (つまり、攻撃を開始したアプリ) ではなく、Gmail がランダムに開いているだけではないかと疑われないようにします。 フラグが付いています Intent.FLAG_ACTIVITY_NEW_TASK.

これらのインテントはすべて、配列で startActivities() 方法。

2 番目のインテントにフラグがないことがここでの鍵となります。 そうすることで、基本的には上記の Gmail の例を複製したことになります。 このタスクは厳密には Gmail のものですが、最上位のアクティビティは攻撃者のものです。 ユーザーが Gmail のホーム画面アイコンをクリックすると、Gmail の代わりに攻撃者のアクティビティが表示されます。


コンセプトの証明

Promon から送信された情報により、私たちは彼らの概念実証を再現することができました。 これは、Android 9 Pie を実行している Samsung Galaxy Note8 の動作を示す画面録画です。


緩和手法と問題点

上記をコード内で単純に複製するだけでは、実際には機能しません。 これは完全な例ではなく、これを機能させるために攻撃者が実行しなければならないことが他にもいくつかありますが、それについては共有できません。 しかし、これらは自分で推測するのが特に難しいわけではなく、それがこの攻撃を非常に危険にしている理由の 1 つです。 StrandHogg 2.0 は比較的簡単に実装できますが、軽減するのは困難です。

軽減策としては、次の機能を使用するすべてのアプリをブラックリストに登録するだけでは不十分です。 startActivities()正当な用途がたくさんあるからです。 また、その検出アルゴリズムを自動化することも非常に困難です。 悪意のある開発者は、あらゆる種類のトリックを使用して、StrandHogg 2.0 の実装を Google Play プロテクトなどのサービスから事実上認識できないようにする可能性があります。 StrandHogg 1.0 では、攻撃者は悪意のあるアプリの AndroidManifest.xml に属性を追加する必要がありましたが、これは比較的簡単に検出できました。 一方、StrandHogg 2.0 は完全に Java/Kotlin で機能します。

難読化、リフレクション、さらにはコーディング スタイルの違いを考慮すると、このエクスプロイトを利用するアプリを自動的に適切に検出することは非現実的であるように思われます。 さらに、ユーザーが StrandHogg 2.0 攻撃の対象になっている場合、ユーザーはそれを知らない可能性があります。 Gmail を開いてログイン画面が表示された場合、セッションの有効期限が切れたと思い、何も考えずにログインの詳細を入力してしまう可能性があります。

Google に返答を求めたところ、広報担当者は次のような声明を出しました。

「私たちは研究者の取り組みに感謝し、彼らが特定した問題の修正をリリースしました。 さらに、Google Play プロテクトは、この技術を使用したアプリを含む悪意のあるアプリを検出してブロックします。」

これは良いことのように聞こえますが、StrandHogg 2.0 攻撃に対して少なくともある程度の効果があることを願っています。 ただし、Google Play プロテクトは注目に値します。 しなかった 手動スキャンを実行した後でも、概念実証アプリを悪意のあるものとして検出します。

プロモン氏は「彼らは」と言う。StrandHogg 2.0 の脆弱性を利用した実際のマルウェアは観察されていません」と書かれていますが、このエクスプロイトが初めて発見されたという保証はありません。 そのため、Promon では、開発者がランチャーのアクティビティを設定してアプリを保護することを推奨しています。 launchMode どちらかにフラグを立てる singleTask または singleInstance. これらのフラグはいずれも、StrandHogg 2.0 が依存しているタスク インジェクションを防止します。 ただし、アクティビティでこれらのフラグのいずれかを使用すると、特定のアプリ フローで問題が発生する可能性があるため、常に望ましいとは限りません。

Promon は、ライブラリのような独自の「In-App Protection by Promon SHIELD」製品も宣伝しています アプリ開発者がアプリのプロセス内のタスクを監視し、異常がないかをチェックするために実装できます。 挿入。 本当に効果的な開発者またはユーザーの軽減戦略は存在しないため、メーカーがこの問題を修正するパッチをできるだけ早く実装することが非常に重要です。

ありがたいことに、Promon はこのエクスプロイトを公開する前に、責任ある開示ガイドラインに従っていました (そして まだ完全には公開されていません。Promon は StrandHogg 2.0 がどのように機能するかを完全に公開するまで 90 日待っています。 動作します)。 Google はそれ以来、このエクスプロイトのパッチを Android 8.0 Oreo、Android 8.1 Oreo、および Android 9 Pie にバックポートしました。 2020 年 5 月の Android セキュリティ パッチ レベル (SPL). Android 10 以降を使用しているユーザーは脆弱ではありませんが、その理由は完全にはわかりません。 これはおそらく、アクティビティの起動に関する Android 10 の新しい制限と、Google がそれをタスク スタックにどのように統合したかに関係があると考えられます。 Promon 氏は、「Android 10 では攻撃はまったく効果がなく、アクティビティはさまざまなタスクに分割され、規定に従って別個のタスク スタックに分割されます」と述べています。 adb shell dumpsys activity activities."

デバイスの製造元がまだセキュリティ アップデートを提供している場合 (詳しくは、 ここでのセキュリティパッチプロセスの仕組み)、できるだけ早くアップデートするようせがむ必要があります。 それ以外の場合は、どのアプリをダウンロードして実行するかに注意する必要があります (ただし、そうする必要があります)。

StrandHogg 2.0 の詳細と使用例については、 プロモンのウェブサイトで正式発表. カスタム ROM 開発者向けに、StrandHogg 2.0 攻撃を防ぐための関連する AOSP コミットを見つけることができます。 ここ そして ここ.


開示スケジュール

Promon が StandHogg 2.0 文書で共有した開示スケジュールは次のとおりです。

  • 2019年12月4日 – Google に問題を報告
  • 2019年12月4日 – PoC「悪意のあるアプリ」とビデオをGoogleと共有
  • 2019年12月4日 – Googleは報告書を受け取ったことを確認した
  • 2019年12月9日 – Google は検出結果の重大度を「緊急」に設定しました
  • 2019年12月9日 – Google は問題を再現できることを確認しています
  • 2020年2月14日 – 3 月初旬に 90 日間の開示が近づいていることを Google に通知し、状況を尋ねます
  • 2020年2月14日 – Googleは、修正を公開できるのは最も早くて4月であると回答
  • 2020年2月14日 – 緩和策に取り組んでいることを Google に通知します
  • 2020年2月14日 – Google が返答します。 彼らは修復に取り組んでおり、私たちが推奨している緩和策を共有できるかどうか尋ねてきました。
  • 2020年2月17日 – 4 月まで開示を保留できると Google に通知します。 CVE番号を要求します
  • 2020年2月17日 – 私たちは緩和戦略と、プラットフォームの緩和をどのように想定しているかを共有します。
  • 2020年3月23日 – Google は CVE ID (CVE-2020-0096) で応答します
  • 2020年3月23日 – Google は、Android 向けの修正プログラムの一般提供は 5 月に利用可能になると回答しています
  • 2020年3月23日 – Googleは、開示を5月まで延期することを検討するかどうか尋ねています
  • 2020年3月27日 – 5月まで開示を延期すると回答します
  • 2020年4月22日 – Google は、5 月のセキュリティ情報にこの脆弱性に対するパッチが含まれる予定であると通知しました。