Cloak and Dagger:Androidの穴

2017年6月12日

Androidの全バージョンに影響すると見られる脆弱性が明らかになりました。本記事のオリジナル(英語版)が公開された時点では、この脆弱性のパッチはまだリリースされていません。この脆弱性を利用すれば、Android搭載のスマートフォンやタブレットからパスワードなどのデータを盗むことや、権限一式を持つアプリのインストールが可能になるばかりでなく、利用者による操作や入力内容の監視も可能であると指摘されています。

「Cloak and Dagger」(外套と短剣)と呼ばれるこの攻撃は、ジョージア工科大学とカリフォルニア大学サンタバーバラ校の職員で構成される研究チームによって実演されました。同研究チームはこの問題をGoogleに3回報告しましたが、いずれの場合も、想定内の動作であるという回答でした。最後の手段として、研究チームは発見した事実を公開することにし、cloak-and-dagger.orgというWebサイトを作成しました。

Cloak and Dagger攻撃の核心

一言で言うと、これはGoogle Playのアプリを使った攻撃です。利用者に特定の権限を要求することはないにもかかわらず、このアプリは、アプリのインターフェイスを常に手前に表示して他のアプリを隠す権限と、利用者に怪しまれずにボタンをクリックする権限を手に入れます。

そのようなことが可能な理由は、利用者がGoogle PlayからアプリをインストールするときにSYSTEM_ALERT_WINDOW権限を許可するよう明示的に要求されないこと、また、ACCESSIBILITY_SERVICE(略して「A11Y」)権限の取得がかなり簡単であることです。

SYSTEM_ALERT_WINDOWは、アプリのインターフェイスを別のアプリの上に重ねて表示する権限です。一方のACCESSIBILITY_SERVICEは、視覚や聴覚の不自由な人のための機能セット「ユーザー補助」にアクセスできる権限です。この権限を持つアプリは、他のアプリの動作を監視し、利用者に代わって他のアプリを操作できるようになるので、デバイス上でさまざまなことができるようになります。

では、何がどう危険なのでしょうか。

目に見えないレイヤー

SYSTEM_ALERT_WINDOWを使った攻撃は、利用者に無断で、他のアプリの上に自分のインターフェイスを重ねて表示するというものです。しかも、どのような形のインターフェイスでも表示可能で、たとえば、穴の空いた形なども表示できます。また、タップの検知もできますし、タップを素通りさせ、その下にあるアプリウィンドウに検知させることもできます。

たとえば、透明なレイヤーを作成してAndroidデバイスの仮想キーボードに重ねて表示すれば、画面のタップ操作をすべてキャプチャできます。画面上でタップされた場所の座標とキーボードの文字位置を関連づければ、キーボードの入力内容を正確に突き止めることができます。このタイプの悪意あるプログラムはキーロガーと呼ばれます。ここで、研究チームが披露した攻撃デモをご覧ください(英語)。

SYSTEM_ALERT_WINDOWは、一般的に言ってかなり危険なタイプの権限です。そのためGoogleは、この権限はごく少数のアプリに制限されるべきとの立場を取っています。しかし、この権限を必要とするFacebook Messenger(Facebookのチャットヘッドは他のアプリに重ねて表示される)、Skype、Twitterなどの人気アプリに関しては、利用者に対して明示的な許可を求めずに権限を与えてしまう方が簡単だろう、との判断を下したようです。残念ながら、シンプルさとセキュリティはなかなか両立できません。

ユーザー補助機能に潜む危険

もうひとつの権限であるACCESSIBILITY_SERVICEは、視覚や聴覚の不自由な人が簡単にAndroidデバイスを操作できるようにとの意図で設計されています。しかし、この機能は実に多くの権限をアプリに与えます。そのため、通常Androidでは許可されないようなアクションを実行しようとするアプリが、こうした権限を本来とは別の目的で使用することもしばしばです。

たとえば、画面で行われていることを目の不自由な人へ音声で説明するような場合、ユーザー補助の権限を与えられたアプリは、どのアプリが開かれているか、何がタップされたのか、いつ通知がポップアップするか、などの情報を入手できます。言い換えると、このアプリは、起きている状況の全容を把握しているのです。それだけではありません。アプリはアクティビティの監視だけでなく、利用者に代わってさまざまなアクションを実行することも可能です。

ユーザー補助の権限を与えられたアプリが考えられうるアクションを何でも実行できることに、Googleは気づいています。だからこそ、利用者がスマートフォンの設定セクションにあるメニューからアプリごとにユーザー補助機能を有効にしなければならない仕様になっているのでしょう。

問題は、SYSTEM_ALERT_WINDOWを使用して画面のほぼ全体([OK]ボタン以外)を覆うインターフェイスを巧みに表示し、利用者には害のなさそうなメッセージに同意していると思い込ませながら、実はユーザー補助機能のオプションを有効にするように仕向けるのが可能なことです。

また、ユーザー補助機能は、利用者に代わって状況を把握して行動を起こす(Google Playストアでの買い物など)ことができるため、攻撃者からすれば、Google Playを使って特別なスパイアプリをダウンロードし、必要な権限を付与するなどお手のものです。しかも、画面がオフのときやビデオクリップの再生中でも、何が行われているのか悟られないまま実行できます。

究極のフィッシング

SYSTEM_ALERT_WINDOW権限とACCESSIBILITY_SERVICE権限を手に入れると、利用者に怪しまれずにフィッシング攻撃を仕掛けることもできます。

たとえば、スマートフォンの利用者がFacebookアプリを開いてログインIDとパスワードを入力しようとしているとき、ACCESSIBILITY_SERVICE権限を持つ別のアプリが状況を察知して介入してくるかもしれません。続いて、SYSTEM_ALERT_WINDOW権限と、他のアプリに重ねて表示する機能を活用して、Facebookのパスワード入力画面にそっくりなフィッシングウィンドウを表示したなら、利用者は何も気付かずに自分のIDとパスワードを入力してしまうでしょう。

アプリの開発者は状況を把握していますから、利用者がパスワードを入力しようとしているまさにそのとき、適切な場所にフィッシング画面を表示することができます。利用者にしてみれば、Facebookへのログイン手順はいつも通りなので、何かおかしいとはみじんも疑わないのです。

ここで説明した攻撃は、セキュリティリサーチャーにとって目新しいものではありません。「タップジャック」という名前も付いているほどです。Googleは対抗措置として、他のアプリが重ねて表示されているかどうかを確認するオプションをAndroidアプリの開発者に提供しました。アプリの画面が重ねて表示されていると、一部の操作を実行できません。大半のバンキングアプリがCloak and Daggerのようなオーバーレイによる攻撃から保護されているのは、このためです。しかし、アプリがこのような攻撃に対するリスクに晒されていないことを確かめるには、開発者に問い合わせるしかありません。

Cloak and Daggerからデバイスを守るには

研究チームは、Androidの主要3バージョンでこの攻撃をテストしました。テスト対象のAndroid 5、Android 6、Android 7は、全Androidデバイスの70%を占めています。これらのバージョンは、Cloak and Daggerの攻撃に対して脆弱であることが判明しました。これ以前のバージョンも同様である可能性は高く、つまり、Androidデバイスを持っているなら、自分にもリスクがあると考えた方がよいでしょう。

では、この攻撃から身を守るにはどうすればいいでしょうか?

  1. まず、Google Playなどのストアからアプリを入手するときには、知らないアプリ、特に無料アプリをインストールしないようにしましょう。正当に開発されたアプリならば、Cloak and Daggerを使って攻撃してくることはないでしょうが、無害なアプリと有害アプリをどう区別するかの問題は未解決です。
  2. 自分のデバイスにインストールされているアプリの権限を定期的にチェックし、不要な権限は無効にしましょう。手順については、こちらの記事をご覧ください。

また、Androidデバイスにセキュリティ製品をインストールすることもお忘れなく。カスペルスキー インターネット セキュリティ for Androidには、無料で利用できるバージョンもあります。