パンくず

Android/Fake10086はSMSをどのように選択的にブロックするのか - 段階的な手順

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氏が発見しました。ダウンロードして比較いただくことが可能です。

 
 

日本版右カラム