TapjackingがAndroid Marshmallowでどのように利益を上げたか—誰も気付かなかった

Nexusデバイス用に新しくリリースされたAndroid Nougatに私たちの多くが賛成していますが、ユーザーの大半はまだAndroid Marshmallowを使用しています。 少なくとも2015年の半ばから存在が文書化されたエクスプロイトは、現在でも多くの最新のAndroidデバイスに影響を及ぼしています。

悪意のあるアプリケーションは、アクションをタップジャックして明示的付与したことがない許可を付与することができます これがエクスプロイトの仕組みです。


Tapjackingの復活

Instagramを開いて、休暇中に最近撮った写真を共有しようと想像してみてください。 ギャラリーで画像を閲覧することを選択すると、Instagramはストレージにアクセスする許可を与えるよう求めます。 しかし、「はい」をタップすると、エラーメッセージが表示されます。

アクティブなスクリーンオーバーレイが有効になっているため、Instagramの保存権限を付与することはできません。この場合、画面に色を付ける多くのアプリケーションの1つであるため、夜間でも携帯電話を使用できます。 これは、 意図したとおりに動作するAndroid許可システムの場合です。アプリケーションに機密性の高い許可を付与するには、デバイス上のスクリーンオーバーレイを無効にする必要があります。

マシュマロ許可タップジャック。 [許可]をタップすると、すべての連絡先が表示されます。

画面上に描画する機能を備えたアプリケーションは、潜在的にユーザーをだまして機密データを送り込む可能性があります。 たとえば、スクリーンオーバーレイは、パスワードを収集するために、実際のログイン画面の上に偽のパスワード入力を配置できます。 このようなエクスプロイトは「タップジャック」と呼ばれ、長年にわたってさまざまなAndroidバージョンで発生し、パッチが適用されています。最悪の例の1つはAndroid 4.0.3まで続きます。 しかし最近、この脆弱性はAndroid Marshmallowのランタイム許可モデルで復活しました。

IwoBanaśという名前の開発者は、この悪用を示すアプリケーションを作成しました。 動作方法は非常に簡単です。アプリケーションが許可ダイアログを表示すると、インストールした悪意のあるアプリケーションはシステムオーバーレイを表示して、許可ダイアログのテキストブロックを必要なテキストで覆います。 アクセス許可ダイアログボックスで[許可]をクリックした知らないユーザーは、だまされて、要求されたアクセス許可を付与しますが、その要求はユーザーのビューから隠されています。 このようなエクスプロイトは、Android Marshmallowの許可システムの目的を完全に無効にします。これは、新しいモデルの導入により、ユーザーが明示的に同意した許可のみを許可することになったためです

今、私はあなたが何を考えているか知っています。 Androidがシステムオーバーレイを検出し、Instagramのストレージアクセス許可を付与できなかった場合、この脆弱性の発生を防ぐことはできませんか? 答えはnoです。私のテストでは、許可ダイアログの上にテキストオーバーレイを表示する特定のデバイスでは、安全メカニズムがトリガーされないようです。 概念実証タップジャックアプリケーションの開発者は、APIレベル22以下(Marshmallow以前)をターゲットとするセカンダリの悪意のあるアプリケーションをインストールするユーザーに依存しているため、このエクスプロイトは効果的であると述べています。 これは、Android Marshmallowの前に、インストール中にすべてのアプリケーションに権限が付与されるためです。

さて、マシュマロを使用している場合、必要なことは、オーバーレイを描画する許可を要求する信頼できないアプリをインストールしないことだけです? Androidの許可モデルが当初のレイアウトどおりに機能していた場合、その通りです。 しかし、このエクスプロイトが発見されて以来、オーバーレイアクセス許可を要求するAPIレベル23 (Marshmallow)をターゲットとするアプリさえ 、潜在的なリスクです。


許可モデルのギャップ?

オーバーレイを使用する典型的なアプリ。 経由:中

Facebook Messengerを使用して友だちとチャットする何百万人ものユーザーの1人であれば、Androidの最高の機能の1つ、つまりアプリが他の画面の上に描画できる機能に出くわします。 お気に入りのFacebookグループチャットでバブルを開いて、開いているアプリケーションの上でユーザーをフォローできるのはどれほどクールですか? Facebookのメッセンジャーは「フローティングアプリ」のアイデアを主流に持ち込みましたが、この概念はしばらくの間Androidに存在していました。 AndroidのWindowManagerにTYPE_SYSTEM_OVERLAYが存在するおかげで、アプリケーションはしばらくの間、アプリの上にオーバーレイを作成できました。

「他のアプリを描画する」許可メニュー

Android Marshmallowが登場する前は、画面上部にオーバーレイを表示する前に、インストール中にアプリケーションがSYSTEM_ALERT_WINDOWというアクセス許可を要求する必要がありました。 しかし、6.0の詳細な実行時許可モデルの導入により、これは変わりました。 ユーザーは実際にアプリを実行するときにアプリケーションにアクセス許可を付与する必要があります。これにより、平均的なユーザーは、機能的に無関係と思われるアクセス許可を疑わしく要求するアプリケーションから自分の個人データを保護するようになります。

ただし、SYSTEM_ALERT_WINDOWは他の権限とは異なります。 開発者は、Marshmallowを対象とするアプリに対する他のほとんどの権限のように、エンドユーザーによる権限の付与をプログラムで要求するダイアログを表示できません。 代わりに、設定画面に手動で移動し、自分で許可を有効にする必要があります。 もちろん、Facebook Messengerなどの一部のアプリは、プロセスを支援します。

Googleは、許可を「特に機密」とみなしているため、開発者にこれを要求しています。

特別な許可

通常の危険な権限のように動作しない権限がいくつかあります。 SYSTEM_ALERT_WINDOWとWRITE_SETTINGSは特に機密性が高いため、ほとんどのアプリでは使用しないでください。 アプリがこれらのアクセス許可のいずれかを必要とする場合、マニフェストでアクセス許可を宣言し、ユーザーの承認を要求するインテントを送信する必要があります。 システムは、詳細な管理画面をユーザーに表示することにより、意図に応答します。

上記のタップジャックについて知っていることを考えると、これは理にかなっています。 しかし、ここにあります。 Googleは独自のルールさえも守っていません。 Facebook Messengerのスクリーンショットは、上で示したSYSTEM_ALERT_WINDOW許可を付与するプロセスをガイドしていますか? これは、Google Playストアの外部からAPKをインストールした場合にのみ発生します。 Google Playストアからアプリケーションをインストールすると、 SYSTEM_ALERT_WINDOW権限が自動的に付与されます。

Facebook Messengerのマニフェストファイル。 APIレベル23をターゲットにしているにもかかわらず、アプリには自動的にオーバーレイ権限が付与されます。


Googleは利便性のために安全性を犠牲にしました

Android Marshmallowよりも前から、SYSTEM_ALERT_WINDOWは「危険な」許可と見なされていました。 Android Marshmallow 6.0では、許可がsignature | system | appopに変更されました。これは、開発者が許可を得るためにユーザーを設定画面に導く必要があったためです。 ただし、Androidバージョン6.0.1では、SYSTEM_ALERT_WINDOWが変更され、ユーザーに通知せずに Google Playストアが自動的に許可付与できるようになりました Googleがこの変更を行った理由は不明です。 Google自身は出てこず、なぜこの変更を行ったのかを説明していません。これは、Webページにまだ存在するSYSTEM_ALERT_WINDOWの言語を考えると特に奇妙です。

SYSTEM_ALERT_WINDOWの初期変更により、Googleが黙って警告し、それを要求したアプリケーションに許可するだけで、ユーザーが手動で許可する必要があるため、十分な開発者が怒りを覚えた可能性があります。 しかし、そうすることで、Googleは利便性のために安全性を犠牲にしました 。 Google自身が許可を最も長い間危険であると見なしたのには、理由があります。 そして、マシュマロ許可タップジャックエクスプロイトの存在は、この許可をアプリに自動的に付与する際の固有の危険性の十分な証拠です。

このタップジャックのエクスプロイトは、最近数か月間存在していましたが、最近になって注目されました。 ポータルチーム間でのデバイスの内部テストでは、 Android Marshmallowを実行している多くの最新デバイスこのエクスプロイトが機能することを確認しまし 。 以下は、それぞれのデバイスで利用可能な最新のソフトウェアバージョンでテストしたデバイスの簡単な概要と、タップジャックエクスプロイトが機能するかどうかです。 「脆弱性」とマークされたデバイスはタップジャック攻撃の影響を受けやすく、「脆弱性なし」とマークされたデバイスはオーバーレイを表示するアプリを検出し、続行する前に無効にするよう要求できます。

  • Nextbit Robin – 6月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性
  • Moto X Pure – 5月のセキュリティパッチを適用したAndroid 6.0 – 脆弱性
  • 名誉8 – 7月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性
  • Motorola G4 – 5月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性
  • OnePlus 2 – 6月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性なし
  • Samsung Galaxy Note 7 – 7月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性なし
  • Google Nexus 6 – 8月のセキュリティパッチを適用したAndroid 6.0.1 – 脆弱性なし
  • Google Nexus 6P – 8月のセキュリティパッチを適用したAndroid 7.0 – 脆弱性なし

これまでのところ、これらは私がチームにテストしてもらうことができたすべてのデバイスです。 セキュリティパッチのバージョンとエクスプロイトの間に相関関係が見つかりませんでした。 Androidのセキュリティ更新に関する最新の議論からわかるように、多くの人々はいずれにしても最新のセキュリティパッチを実行していないため、この脆弱性やAndroid Security Bulletinで概説されている他の脆弱性に対して脆弱です。


前進する

タップジャックサービスによるオーバーレイ許可の付与

この脆弱性をデバイスでテストして、脆弱かどうかを確認することをお勧めします 。 上記にリンクされたソースコードからAPKをコンパイルし(自分でも実行できます)、AndroidFileHostにアップロードしました。 このエクスプロイトをテストするには、メインのタップジャックアプリケーションとそのヘルパーサービスの両方をインストールする必要があります。 次に、メインアプリケーションを実行し、「テスト」ボタンをクリックします。 許可ダイアログの上部にテキストボックスが表示され、「許可」をクリックすると、デバイスの連絡先のリストが表示される場合、デバイスはタップジャックに対して脆弱です。 フローティングダイアログボックスがアクセス許可ダイアログを完全にカバーしていないことを心配しないでください。この概念実証アプリは、アクセス許可ダイアログをきちんとハイジャックする方法を完全に示すことを意図したものではなく、実際に可能であることを証明することを目的としています。

この脆弱性をすべてのMarshmallowデバイスにパッチする修正が導入され、OEMがすべてのデバイスを最新のセキュリティパッチに更新することを願っています。 現実には、ほとんどの誓約したデバイスがNougatを入手するのに何ヶ月もかかるので、ほとんどのユーザーが害を避けるための唯一の方法は、最新のセキュリティパッチをインストールするか、アプリ自体の許可を監視することです。 しかし、潜在的に危険なSYSTEM_ALERT_WINDOW権限を自動的に付与するというGoogleの決定により、多くのユーザーは、携帯電話をハイジャックしてますます危険な権限を付与する可能性のあるアプリを知らずに実行しています。