【悲報】8月に広告が問題になった百度のSimejiアプリにMoPlusと同じ脆弱性がある事が発覚(現在は修正済み)
記事がこんなタイトルですが、本当は、見つからなくてよかったって内容で書く予定でした。
百度のAndroidバックドアが心配ならよく使う中国製ソフトを解析してみよう ひどいよ!Baiduさん(笑)! |
とりあえず、長い文章読むのめんどくさい人向けに
1. SimejiプライバシーロックはDu Apps Studio 2. Simejiプライバシーロックの中身を作ったDU Apps Studioについて調べてみた 3. 全然関係ないアプリだけど、それを売ってロイヤリティ得るために百度がSimejiのブランド名を日本向けに付けた 4. simeji IME自体は全然悪くない 5. あなたの端末が遅くなっていますみたいな詐欺広告でこのアプリをインストールさせようとして8月に問題になっている |
概要のまとめ
1. SimejiプライバシーロックにMoPlusの文字列を発見 2. 百度「『moplus』という関係ない文字を含んでいただけ、削除してリリースしなおしました」 3. 石井氏『Moplusは入ってないがバックドアがあり外部から接続できる』 4. 2の発表を受けて疑問がわいたのででコンパイルして詳しく解析 5. クラスMoPlusからPushServiceへの改名した可能性が濃厚 6. その中に外部からの接続処理が入ってることが判明 7. 石井さんがバックドアと呼んでたのは内部的に MoPlusServiceと 呼ばれていたところに実装されていた。 |
技術まとめ
先日の記事の続き。
百度製のアンドロイド開発キットは数億のデバイスにバックドアを仕込めることが判明
自分で、使ってるアプリに危険性がないか調べてみる方法を紹介します
とりあえず、有名どころとして 次の2つのアプリを調べてみるよ!
※ 3つ目にGIGAZINEさんのおすすめアプリを調べてみたところ、たいへんなことに!
Wifi Analyzer
作者の Kevin Yuan さんは Bitcionで働く 辽宁省大连市(遼寧省大連市) 在住のエンジニア
Simejiプライバシーロック~アプリ、写真などをガード!~ - Google Play の Android アプリ
日本法人の百度さんが作ったセキュリティソフト。
もし入ってるならこの辺が怪しいかなと…
バイドゥの日本法人、「Simeji」ではSDK「Moplus」を使用していないことを発表 | オクトバ
バイドゥ株式会社は、中国のバイドゥ本社が開発したSDK「Moplus」に関する一部報道について、日本法人が提供している「Simeji」ではこのSDKは使用していないと発表しました。 |
うん、きっと大丈夫だね・ω・
Apk Downloader ってアプリを使います
Play Store にないアプリでAPKダウンロードして出所不明のアプリとしてインストールしてます。
(このアプリの最新版使う人はこれも調べてみた方がいいかもね)
このアプリで検索してダウンロードすると apkファイルが公式から直接ダウンロードできます
次にapkを zipにリネームして解凍。 その中から dex って拡張子のファイルを取り出します
dex2jar - Browse Files at SourceForge.net
これを dex2jar ってアプリで jar ファイルに展開
こんな感じ(ちなみに、実際は Baiduが出してる simeji の付くアプリ全部を検証しました)
後は、 moplus という文字列で、大文字小文字区別せずに ANSI/UNICODE で検索して問題なければ安全!
Wifi Analyzer の方は問題なし!
simeji は ・・・・えっ?
com.baidu.moplus.action.start.SERVICEINFO
MoPlusService
思いっきり使ってますやん!
バックドアとされてるのは
『com.baidu.android.moplus.MoPlusService』なんだけど、 Pが大文字なのも同じという
ちなみに、IME版の方の Simejiは確かに使ってませんでした。
が…Simejiブランドで出してる別のアプリに含まれてるのはまずい!
含まれてないってのは、ブランド全部だと思うので、『有名なSimeji IMEだけに含まれていないからセーフ』って訳がない
アプリやデータを個別にロック可能、百度「Simejiプライバシーロック」提供開始 | RBB TODAY
日本でも結構 Yahooとか宣伝してるので相当の人が入れてるはず
調べたのは com.szipcs.simejiprivacylock-2.0.1.63.apk だから最新版の 2.0.1.63 でも修正されていないということ。
あなたのAndroidは古くなっています詐欺広告 Simeji/360 Security導入誘導 ( スマートフォン ) - 無題な濃いログ - Yahoo!ブログ
これ、詐欺広告で話題になったアプリやんかw
もうこれは酷過ぎて何も言えない…。
百歩譲って、百度さんの立場で言うと このアプリ、
DU Privacy Vault - App Lock 1.2.2.38 com.szipcs.duprivacylock
ここのOEMっぽいので、調査しきれてないのが原因なのかなと思うんですが、
ちゃんと調べる義務はあると思う
追記 13:30
デコンパイルでもう少し解析してみた
intent2 = com.baidu.android.pushservice.i.s.b(a, "com.baidu.moplus.action.start.SERVICEINFO"); if(intent2 != null) { String s14 = intent2.getStringExtra("method_version"); if("V1".equals(s14)) { if(com.baidu.android.pushservice.j.b()) com.baidu.a.a.b.a.a.b("RegistrationService", (new StringBuilder()).append("Method Version : ").append(s14).toString()); return false; } } |
呼び出してるコードはこんな感じで MoPlusのサービス情報をチェックしてIntent呼び出しをしてバージョン確認をして一致したら push サービスで何かに登録してる
if(!arraylist1.contains(s1) && arraylist.contains(s1) && (runningserviceinfo.service.getClassName().contains("PushService") || runningserviceinfo.service.getClassName().contains("MoPlusService")) && v(context, s1)) arraylist1.add(runningserviceinfo.service.getPackageName()); |
別の個所では MoPlusService が動作してる存在するのを確認して、動作してるアプリの一覧を取得する処理の気がする
MoPlusService 自体は使ってるたけど、最新版に含まれてるのは、直接害のあるコードではないかなというのが結論。
もしかするとバージョンアップで MoPlus のやばいコードだけ削ってリリースしなおしたのかもしれない。
(なんでかというと、MoPlusServiceをインテントで呼び出してるのに該当するライブラリやファイルが見つからない。
別アプリでMoPlusServiceを使ってるものと連携してるのかもしれないのだけど… )
これは、古いバージョンがないとなんともいえないね
Baidu さんはちゃんと過去のバージョンも確認して、問題があるバージョンはないか発表した方がいいです|・ω・)
結論MoPlus SDK のライブラリとのなんかしらの連携が残ってるのが今回最新版で検出された。直接の危険性は低い
MoPlus って処理は無害だけど、 PushService って名前にリネームされて 外部からの接続を待ってることが判明
12:50 付で アプリを削除して調査すると百度(Baidu)さんから連絡がありました
@BlackWingCat @mitsuaki_i Baidu Japanです。ご報告誠にありがとうございます。ご指摘のあったアプリは12:50時点でGoogle Playから削除いたしました。経緯と詳細については現在調査中です。詳細がわかり次第随時ご報告いたします。 |
追記 18:50
一般ユーザー様よりSimejiプライバシーロックにMoplus SDKが入っていると報告があり 12:50時点でGoogle Playから削除したと報告を受けました。 経緯と詳細については現在調査中です。詳細がわかり次第随時ご報告いたします。 続く→ 続き→なお、日本語入力アプリ#Simeji についてはMoplusは使用しておりません。 【お知らせ】 |
ってことなんだけど
ソースコードに
runningserviceinfo.service.getClassName().contains("MoPlusService"))
って記述があるってことは、過去のバージョンで
com\baidu\android\MoPlus\MoPlusService.(class/java) ってファイルまたは
com\baidu\android\MoPlusService\MoPlusService.(class/java) ってファイルが
存在したってことを意味してるので、使ってないというより、過去に使いかけたけど、社内判断でやめたとか、~以前のバージョンでは使ってたとか、OEMの方では使ってるけどSimeji版では使ってないとかの方が説得力があるので、もうちょっと詳しく確認してほしいんだが…。
runningserviceinfo.service.getClassName().contains("PushService"))
の方はというと
com\baidu\android\PushService\PushService*.(class/java) ってファイルが存在してる
ちなみに、com\baidu\android\moplus\MoPlusService\ のフォルダ構成は思いっきりバックドアのMoPlusService と同じ だけど、この構成はライブラリをインポートしたフォルダ構成で変わるので、moplus フォルダが間にないからと言ってあてにならない。
19:20追記
ちなみにOEM元の DU Privacy Locker を調べてみたところ同じ記述があったので、Simejiに追加されたのではなく、OEM元で昔使っていた可能性が高い
#あれ、これって、ひょっとすると MoplusService って名前使ってたの、名前が被るんで、PushService に置き換えたんじゃね? ・ω・
if(!arraylist1.contains(s1) && arraylist.contains(s1) && (runningserviceinfo.service.getClassName().contains("PushService") || runningserviceinfo.service.getClassName().contains("MoPlusService")) && v(context, s1)) arraylist1.add(runningserviceinfo.service.getPackageName()); |
もう一度コード思い出してみる。置き換えていく過程でこのコードだけ残っちゃったとすると納得が…。
Simejiプライバシーロックに入っているのはMoplusではないようです。しかしバックドアはあります。Moplusが入っていなくてもバックドアがあるバイドゥのアプリが存在するようです@BlackWingCat @Simeji_jp https://t.co/OKaLwyNHLt
ちなみにポートスキャンしPCから端末にリクエストを送信し、バックドアが開くことは確認してます。 |
IO株式会社代表 の石本 光さんからこんな風に言われたので、
・待ち受けするような処理が MoPlus にあると仮定
・MoPlusService を全部 PushService という名前に全部置き換えた
で PushService を調べてみた
public static int a = 80; public static String b = "http://m.baidu.com"; public static ArrayList c = null; public static ArrayList d = null; public static final int e; public static final String f; public static final String g = (new StringBuilder()).append(a()).append("/rest/2.0/channel/channel").toString(); public static final String h; public static String i = "http://lbsonline.pushct.baidu.com/lbsupload"; private static String j = "http://channelapi.tuisong.baidu.com"; private static String k = "agentchannel.tuisong.baidu.com"; private static int l; private static String m; private static final String n[] = { "180.76.2.108" }; private static final String o[] = { "180.76.2.107" }; |
なんかネットワークにアクセスはしてるよね
POST http://statsonline.pushct.baidu.com/pushlog HTTP/1.1" 200 - "-" "Baidu-Frontia-Android" POST http://lbsonline.pushct.baidu.com/lbsupload HTTP/1.1" 200 - "-" "Baidu-Frontia-Android" |
なんだろ。ログと lbs (Location Database Service ?)のアップロードってアクセスがある
まぁ、Push通知なんだからNetにアクセスするのは当たり前なんだけどね
Object obj = m; obj; JVM INSTR monitorenter ; LocalServerSocket localserversocket = i; if(localserversocket != null) break MISSING_BLOCK_LABEL_118; i = new LocalServerSocket(s.t(n)); _L2: if(i != null) break MISSING_BLOCK_LABEL_380; |
問題はここ LocalServerSocket を開いてなんかモニタしてる。
多分これが外部から繋いで、バックドアみたいな働きをするんじゃないかと言われればそうかもしれない・ω・
元々のファイル名クラス名がMoPlus MoPlusService だったわけだからバックドアだと言われると言い逃れができない。
追記: 2015/11/14 15:50
百度からお知らせが来てました
「Simejiプライバシーロック」について | バイドゥ株式会社
<追記>11月14日4:00
本日、さらに調査を進めた結果、以下の内容が判明しました。 すでに削除対応しましたコードは端末にNotification(情報をプッシュ通知)する機能として搭載されておりましたが、このコードによりセキュリティホールが発生する可能性があり、悪意ある第三者がそのセキュリティホールから端末の情報を獲得できる可能性があったことが分かりました。 Simejiプライバシーロックは外部OEM製品を使っており、外部で開発されたソースコードを利用しています。この外部開発のソースコードに対するチェックが弊社内で不十分でした。バイドゥは、このような事象を深く受け止め、OEM製品を利用する場合のチェック体制を強化いたします。体制ができるまではOEM製品の活用を停止します。 |
やっぱり、MoPlusServiceと同じ脆弱性が残ってた模様
ちゃんと書いたほうがいいと思うんだけどね。
隠すと、逆効果っすよ ・ω・;
というわけで、事実確定したのでタイトル変更してこれで固定します
追記:なぜか2か月たってニュースに…。
今更のSimeji問題。読売と百度、両社の発表を添削してみた
「Simejiプライバシーロック」がリンクからでは表示されません。
Google Playで検索しても、英語版しか出てきません。
?ひっこめた?
早期の証拠隠滅に協力しちゃったらな~・・・
より多く証拠が残っている内に広く知ってもらった方が良いかと。
結局無かった事にしたり、ほとぼりが冷めるのを待てば
いずれカモが舞い戻って来るんだけどね。
世間一般の認識としては
「またプライバシー団体か何かの基地外が騒いじゃってるよ!」とか
「みんな使ってるし大丈夫でしょ!」とか
「別に隠す様な事なんにも無いし!」みたいな感じかな。
元々ナイーブな国民性だから、かの国に侵略される方が
自然の理に適ってるのかも(苦笑
今更になってこの話題がまた出てきたようなので、こちらの記事URLを用いて引用紹介させて頂きますね。
もしご迷惑でしたらお手数ではありますが一報頂ければ即刻削除致しますので。