- 本文はフォーティネット セキュリティ ブログの抄訳です。
執筆者:Axelle Apvrille
2011年3月10日9:18
2011年3月10日午前9時18分。Android端末は引き続き、Android/Fake10086.A!trを用いたマルウェア作者のターゲットとなっています。 AegisLabは、この悪意あるトロイの木馬を中国のインザワイルドで発見し、これに関する興味深い記事を投稿しています。
この記事の概略は次のとおりです。Android/Fake10086.A!trは、便利なホテル予約アプリケーション(com.hotel apkなど)に見えますが、実はバックグラウンドでリモートのWebサーバーと通信し、受信する一部SMSメッセージをブロックします。 最も注目すべきは、Fake10086が、大手中国通信事業会社のカスタマーサービスポータルである10086から受信するSMSメッセージをブロックしていることです。恐らくは、被害者への警告発信を阻止するためです。 これはどのように実行されているのでしょうか? 本ブログ投稿では、この点に注目します。
AndroidManifest.xmlには、FakeLanucherActivityクラス(サンプルにあるようにこれはスペルミス)が起動していることが示されています。

トロイの木馬のAndroidManifest.xmlの一部
これは、FakeLanucherActivityのonCreate()メソッドを呼び出し、ひいては、getInstance()メソッド経由でSettingManagerオブジェクトのインスタンスを作成します。
SettingManager.getInstance(this).log("FakeLanucherActivity::onCreate");
SettingManagerのコンストラクターは、(当該アプリケーションのshared_prefsプライベートディレクトリにおいてsetting.xmlという名前の)アプリケーションのためのプライベート設定ファイルを作成します。

SettingManagerのコンストラクター - 設定ファイル(setting.xml)の作成
後で(SMSのブロッキングとは無関係な箇所すべてを省略)、この設定ファイルは編集されますが、これは10086を第1パラメーターとして、1を第2パラメータとして用いて、setSMSTempBlockNumAndTimes()を呼び出すことによって実行されます。

setting.xmlの既定値
メソッドの名前から、第1パラメーターはブロックするSMSの番号を、第2パラメーターはこのメッセージのブロック回数だとフォーティネットでは推測しています。
setSMSTempBlockNumAndTimesメソッドが行うのは、setting.xmlファイルのsms_temp_block_num_and_times XMLタグの中の構成への書き込みだけです。

setting.xmlへのSMSブロック番号および回数の書き込み
典型的なsetting.xmlファイルは、次のようになります。

サンプルのsetting.xmlファイル
sms_temp_block_num_and_timesを読み取るための関数も存在し、getSMSTempBlockNumAndTimes()と名付けられている点に留意してください。SettingManagerクラスは、SMSのブロックとは無関係です。 では、SMSのブロックはどのように行われるのでしょうか?
SMSメッセージは、受信されるたびに、PrivilegedSmsReceiverクラスにあるonReceive()メソッドによって処理されます。このクラスは、トロイの木馬によってSMS レシーバーとして登録されます。 このメソッドの要部が以下に貼り付けられています(smaliによる逆アセンブルの出力)。

PrivilegedSmsReceiverのonReceive()メソッドの、Smaliによる逆アセンブル
そのため、onReceive()メソッドは、sms_temp_block_num_and_timesを検索し、(それを内部のデバッグファイルに記録し、)受信SMSの発信元である電話番号を取得し(getDisplayOriginatingAddress())、その番号がブロック対象の番号(10086)で終わっているかどうかを確認し、"times"カウンタをデクリメントして、それが正数であることを確認します。 恐らく、バグ原因で、setting.xmlファイルがデクリメントされた値で更新されることはないため、10086は永遠にブロックされます。 端末が10086からSMSを受信した際のトロイの木馬のログは、以下のとおりです。
更新情報: 対応するソースコードをMario Bellano氏が発見しました。ダウンロードして比較いただくことが可能です。