※本ブログは、Mobile Malware Researcher 中島大輔によるものです。
先日のブログでMcAfeeは、密かに電話番号を盗む、日本ユーザー向けの不審なAndroidチャットアプリをGoogle Play上で発見したことを報告しました。私たちはまた、それに類似したJavaScriptによる手法で電話番号を盗む、約120個ものAndroidアプリがGoogle Play上で公開されていることを確認しました。これらのアプリは主に韓国ユーザーをターゲットとしています。また、これらはJavaScriptベースのハイブリッド・モバイルアプリ開発フレームワークの1つである「Appspresso」を用いて開発されています。
Fig.1 韓国ユーザーを標的としたGoogle Play上の不審なアプリの例
これらのアプリは、今年11月初めからGoogle Play上で公開され続けており、Google Playでの統計によると、ダウンロード総数は少なくとも170,000件、最大で640,000件に達しているようです。ユーザーインタフェースが韓国語のみをサポートしていることから、これらのアプリは主に韓国ユーザーを対象にしていると思われます。しかし、ここ日本でもGoogle Play上でアダルト関連の日本語キーワードでアプリを検索すると結果リストに現れるため、日本のユーザーも注意する必要があります。なお、これらのアプリのほとんどがアダルト・コンテンツに関するものです。
Fig.2 壁紙設定アプリとして公開されている不審アプリの例(非アダルト)
ユーザーが起動するとすぐに、これらのアプリは事前の通知や承諾確認なしに端末の電話番号を取得し、密かにアプリ開発者のWebサーバーに送信します。電話番号の取得はアプリの機能の実現には全く不要であるため、これらのアプリは初めから電話番号詐取を目的として設計されていると言えます。
Fig.3 アプリケーション起動時の画面
これらのアプリは全て、クロスプラットフォームのハイブリッド・モバイルアプリ開発フレームワーク「Appspresso」を用いて開発されています(注:この開発フレームワーク自体に悪意があるわけではありません)。このフレームワークを使用すると、開発者はアプリの主要なロジックをHTMLやJavaScriptを用いて記述することができ、またJavaScript経由で端末プラットフォーム(この場合はAndroid)の機能を呼び出すこともできます。つまり、このフレームワークがJavaとJavaScriptのコードの連携を可能にしています。また、独自のJavaScript APIを定義したプラグインを開発者が追加することもできます。
これらのアプリでは、AndroidのJava APIであるTelephonyManager.getLine1Number()メソッドを使用して端末の電話番号を取得する”phone()”メソッドを独自プラグインに実装し、アプリのJavaScriptコードからそれを呼び出せるようにしています。そして、JavaScriptコードでは、この”phone()”を使用して電話番号を取得し、アプリ起動時にWebView上でアクセスするURL内のクエリパラメータにそれを指定することでWebサーバーに送信します。
Fig.4 JavaScriptから電話番号取得するためのphone()メソッドを定義したJavaコード
なお、Javaコードでは、取得した電話番号が「+82」(韓国の国番号)から始まる場合のみ特殊な処理を行っています。
Fig.5 電話番号を取得し外部サーバーに送信するためのJavaScriptコード
McAfee Mobile Security はこれらのアプリをAndroid/AxLeaker.Aとして検出します。
関連記事
- [2013/11/22] 日本のユーザーを狙った、電話番号を密かに盗むAndroidチャットアプリをGoogle Playで発見
※本ページの内容はMcAfee Blogの抄訳です。
原文:JavaScript Apps on Google Play Steal Korean Phone Numbers