日本のユーザーを狙った、電話番号を密かに盗むAndroidチャットアプリをGoogle Playで発見


ユーザーの個人情報を盗むAndroidマルウェアは今日まで多数報告されており、私たちスマートフォンユーザーのプライバシーに脅威を与え続けています。McAfeeは最近、Android端末の電話番号を密かにアプリ開発者のWebサーバーへ送信する不審な日本ユーザー向けチャットアプリがGoogle Play上で公開されているのを確認しました。また今回のアプリでは、電話番号詐取機能の実装にはJavaScriptが用いられていました。

Fig.1 日本のGoogle Playで公開されていた2つの不審なチャットアプリ

Fig.2 Google Play上のアプリ説明ページでは「登録不要」をアピールしている

Google Play上のアプリ説明ページでは開発者はこのアプリは「登録不要」かつ無料で使用できることを強調し、あたかもユーザー情報を取得しないかのように思わせているにもかかわらず、このチャットアプリはユーザーがチャットサービスに接続する際に端末の電話番号を取得し、ユーザーへの事前通知および承諾確認を行わずに密かに開発者が管理するWebサーバーへ送信しています。電話番号は送信前に暗号化されていますが、暗号化に使用された共通の秘密鍵をアプリ開発者が保持しているため、受信したサーバー側で復号化できることは明らかです。

このアプリ開発者が収集した電話番号リストを実際に悪用しているかどうかまでは私たちにはわかりません。しかし、電話番号のようなユーザーの機密情報を事前承諾なしに勝手に収集することは大きな問題です。しかも、この開発者は意図的にユーザーを騙しているか、少なくとも誤解を招く説明をしていると考えられます。また、このチャットサービス自体、少なくとも私の目の前では一度もチャット接続に成功したことがなく、本当に機能するのか不明です。幸いなことに、これらのアプリのダウンロード数は現在のところ数百回以下であることがわかっています。

Fig.3 チャット画面でユーザーが「接続」しようとすると電話番号が勝手に送信される

ユーザーの個人情報を盗む多くのAndroidマルウェアと異なり、このアプリの情報漏洩コードはサーバーサイドでホストされているHTML/JavaScriptファイルで実装され、それがAndroidのWebViewの機能である独自JavaScriptインタフェース呼出を通じて電話番号取得APIを呼び出しています。このアプリのJavaコード側では、TelephonyManager.getLine1Number()メソッドを呼び出す独自JavaScriptメソッド”getNo()”を定義し、それを”android”オブジェクトとしてJavaScriptから使用できるように公開しています。一方、サーバーサイドのHTML内のJavaScriptコード側では、ユーザーがページ上のボタンをタップすると、この”android.getNo()”により電話番号を取得しXMLHttpRequestオブジェクトの機能(または、もう1つの亜種ではHTMLフォーム経由でのHTTP POSTリクエスト)を使用して同じサーバーに送信しています。

Fig.4 電話番号を取得するための独自JavaScriptオブジェクトを実装するJavaコード

Fig.5 独自オブジェクトにより電話番号を取得しサーバーに送信するJavaScriptコード

ちなみに、このJavaScriptコードはAndroidアプリのWebView上だけでなく通常のWebブラウザから読み込まれた場合でも動作するように実装されています。後者の場合は、独自オブジェクトが使用できないため、単に現在時刻から生成した適当な文字列を電話番号の代わりに使用しています。つまり、そもそもこのチャットサービスは電話番号を取得しなくても動作するようになっているということです。それにもかかわらずAndroidアプリの場合はわざわざユーザーの電話番号を密かに取得しているということからも、何らかの悪意を感じます。

HTML/JavaScriptというWeb技術を駆使してAndroidアプリを開発するためのフレームワークは以前から使用されており、有名なものにはApache Cordova (PhoneGapとしても知られる)等があります。これらのフレームワークではHTML/JavaScriptでアプリ機能を実装しかつAndroidプラットフォームの機能をそこから使用することも可能にしますが、これらも上述のWebViewの独自JavaScriptインタフェース定義機能を内部で使用しています。これらのフレームワークを使用するほとんどの場合、HTML/JavaScriptによる実装コードは、開発フレームワーク・ライブラリとともに、Androidアプリパッケージファイル(APK)に同梱されます。したがって、もし何らかの危険なコードや悪意のあるコードが含まれていたとしても、セキュリティ製品がAPKの内容を静的解析しそれらの存在を検出することは可能です。

一方、今回のアプリの場合、取得した個人情報を密かに外部サーバーに送信する機能の主な部分が、APK内ではなく、サーバーサイドのHTML/JavaScriptコードで実装されています。これらのコードはアプリ使用および特定の操作時に初めてアクセスされる、かつ随時変わりうる、という動的な性質から、問題のあるコードの解析・検出が通常よりも困難と言えます。さらに悪いことには、このアプリのWebView上から別の第三者のサイトがホストする悪意あるコードを含むページに遷移した場合、個人情報を取得するための独自JavaScriptオブジェクトが悪用される危険もあります。

特にモバイル端末向けのアプリ開発言語として注目を浴び、またTizenFirefox OSのような新しいWeb技術ベースのモバイルプラットフォーム向けアプリ開発の主要言語として期待が高まるのに伴い、HTML/JavaScriptベースのモバイル脅威が近い将来さらに増加するリスクに私たちは備えなければならないでしょう。
※本ブログは、Mobile Malware Researcher 中島大輔によるものです。

■本記事はMcAfee Blogを転載したものです。