国内ユーザーの電話番号を盗むチャットアプリをGoogle Playで発見

日本向けの公式マーケット上に、電話を密かに盗み出すアプリが見つかった。McAfeeの研究者は、Webベースのモバイルの脅威に危機感を募らす。

» 2013年11月22日 14時05分 公開
[中島大輔,マカフィー]

(このコンテンツはマカフィー「McAfeeブログ」からの転載です。一部を変更しています。)

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

日本のGoogle Playで公開されていた2つの不審なチャットアプリ
Google Play上のアプリ説明ページでは「登録不要」をアピールしている

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

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

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

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

電話番号を取得するための独自JavaScriptオブジェクトを実装するJavaコード
独自オブジェクトにより電話番号を取得しサーバに送信する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オブジェクトが悪用される危険もあります。

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

2013年12月5日更新

 本チャットアプリの開発者より、今回のブログで取り上げた電話番号送信機能について目的と経緯の説明のための連絡があり、悪意はなかったこと、該当箇所を修正し情報漏洩の問題が解決された更新版アプリのGoogle Play上での再公開が行われたことを確認しました。よって、更新版アプリについてはMcAfee Mobile Securityでの検出対象から除外しました。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ