比葫蘆娃還可怕的百度全系A(chǔ)PP SDK漏洞
"You can’t have a back door in the software because you can’t have a back door that’s only for the good guys.“ - Apple CEO Tim Cook
“你不應(yīng)該給軟件裝后門因?yàn)槟悴荒鼙WC這個(gè)后門只有好人能夠使用。” – 蘋果CEO 庫(kù)克
0x00 序
最早接觸網(wǎng)絡(luò)安全的人一定還記得當(dāng)年RPC沖擊波,WebDav等遠(yuǎn)程攻擊漏洞和由此產(chǎn)生的蠕蟲病毒。黑客只要編寫程序掃描網(wǎng)絡(luò)中開放了特定端口的機(jī)器,隨后發(fā)送對(duì)應(yīng)的遠(yuǎn)程攻擊代碼就可以控制對(duì)方主機(jī),在控制對(duì)方主機(jī)后,程序可以繼續(xù)掃描其他機(jī)器再次進(jìn)行攻擊。因?yàn)槁┒闯鲈谥鳈C(jī)本身,想要修復(fù)漏洞必須安裝補(bǔ)丁才行,但因?yàn)楹芏嗳瞬⒉粫?huì)及時(shí)升級(jí)系統(tǒng)或者安裝補(bǔ)丁,所以漏洞或者蠕蟲會(huì)影響大量的機(jī)器非常長(zhǎng)的時(shí)間,甚至有的蠕蟲病毒可以感染全世界上億的服務(wù)器,對(duì)企業(yè)和用戶造成非常嚴(yán)重的損失。
Android發(fā)布后,我們就一直幻想著能發(fā)現(xiàn)一個(gè)像PC上的遠(yuǎn)程攻擊一樣厲害的漏洞,但是Android系統(tǒng)默認(rèn)并沒(méi)有開放任何端口,開放socket端口的APP也非常稀少,似乎出現(xiàn)像PC那樣嚴(yán)重的漏洞是不太可能的。但可惜的是,世界上并沒(méi)有絕對(duì)的安全,就在這么幾個(gè)稀少的端口中,我們真的找了一個(gè)非常嚴(yán)重的socket遠(yuǎn)程攻擊漏洞,并且影響多個(gè)用戶量過(guò)億的APP,我們把這個(gè)漏洞稱之為WormHole蟲洞漏洞。
0x01 影響和危害
WormHole蟲洞漏洞到底有多嚴(yán)重呢?請(qǐng)看一下我們統(tǒng)計(jì)的受影響的APP列表(還沒(méi)有統(tǒng)計(jì)全):
百度地圖 檢測(cè)版本8.7
百度手機(jī)助手 檢測(cè)版本6.6.0
百度瀏覽器 檢測(cè)版本6.1.13.0
手機(jī)百度 檢測(cè)版本6.9
hao123 檢測(cè)版本6.1
百度音樂(lè) 檢測(cè)版本5.6.5.0
百度貼吧 檢測(cè)版本6.9.2
百度云 檢測(cè)版本7.8
百度視頻 檢測(cè)版本7.18.1
安卓市場(chǎng) 檢測(cè)版本6.0.86
百度新聞 檢測(cè)版本5.4.0.0
愛(ài)奇藝 檢測(cè)版本6.0
樂(lè)視視頻 檢測(cè)版本5.9
...完整列表見(jiàn)附錄
這個(gè)列表是2015年10月14號(hào)統(tǒng)計(jì)的百度系A(chǔ)PP的最新版,理論上所有小于等于檢測(cè)版本的這些百度系的APP都有被遠(yuǎn)程攻擊的危險(xiǎn)。根據(jù)易觀智庫(kù)的統(tǒng)計(jì)排行:

可以看到手機(jī)百度、百度手機(jī)助手、百度地圖等百度系A(chǔ)PP有著上億的下載安裝量和加起來(lái)超過(guò)三億的活躍用戶。
安裝了百度的這些APP會(huì)有什么后果和危害呢?
無(wú)論是 wifi 無(wú)線網(wǎng)絡(luò)或者3G/4G 蜂窩網(wǎng)絡(luò),只要是手機(jī)在聯(lián)網(wǎng)狀態(tài)都有可能受到攻擊。攻擊者事先無(wú)需接觸手機(jī),無(wú)需使用DNS欺騙。
此漏洞只與app有關(guān),不受系統(tǒng)版本影響,在google最新的android 6.0上均測(cè)試成功。
漏洞可以達(dá)到如下攻擊效果:
遠(yuǎn)程靜默安裝應(yīng)用
遠(yuǎn)程啟動(dòng)任意應(yīng)用
遠(yuǎn)程打開任意網(wǎng)頁(yè)
遠(yuǎn)程靜默添加聯(lián)系人
遠(yuǎn)程獲取用用戶的GPS地理位置信息/獲取imei信息/安裝應(yīng)用信息
遠(yuǎn)程發(fā)送任意intent廣播
遠(yuǎn)程讀取寫入文件等。
下面是視頻DEMO:
俺們做的視頻效果太差,下面demo視頻是從雷鋒網(wǎng)上看到的:
http://www.leiphone.com/news/201510/abTSIxRjPmIibScW.html
0x02 漏洞分析
安裝百度系app后,通過(guò)adb shell連接手機(jī),隨后使用netstat會(huì)發(fā)現(xiàn)手機(jī)打開了40310/6259端口,并且任何IP都可以進(jìn)行連接。

原來(lái)這個(gè)端口是由java層的nano http實(shí)現(xiàn)的,并且這個(gè)http服務(wù),百度給起名叫immortal service(不朽/不死的服務(wù))。為什么叫不朽的呢?因?yàn)檫@個(gè)服務(wù)會(huì)在后臺(tái)一直運(yùn)行,并且如果你手機(jī)中裝了多個(gè)有wormhole漏洞的app,這些app會(huì)時(shí)刻檢查40310/6259端口,如果那個(gè)監(jiān)聽40310/6259端口的app被卸載了,另一個(gè)app會(huì)立馬啟動(dòng)服務(wù)重新監(jiān)聽40310/6259端口。

我們繼續(xù)分析,整個(gè)immortal service服務(wù)其實(shí)是一個(gè)http服務(wù),但是在接受數(shù)據(jù)的函數(shù)里有一些驗(yàn)證,比如 http 頭部remote-addr字段是否是”127.0.0.1”,但是會(huì)一點(diǎn)web技巧的人就知道,只要偽造一下頭部信息就可把remote-addr字段變成”127.0.0.1”。

成功的和http server進(jìn)行通訊后,就可以通過(guò)url給APP下達(dá)指令了。拿百度地圖為例,以下是百度地圖APP中存在的遠(yuǎn)程控制的指令的反匯編代碼:

geolocation 獲取用戶手機(jī)的GPS地理位置(城市,經(jīng)度,緯度)
getsearchboxinfo 獲取手機(jī)百度的版本信息
getapn 獲取當(dāng)前的網(wǎng)絡(luò)狀況(WIFI/3G/4G運(yùn)營(yíng)商)
getserviceinfo 獲取提供 nano http 的應(yīng)用信息
getpackageinfo 獲取手機(jī)應(yīng)用的版本信息
sendintent 發(fā)送任意intent 可以用來(lái)打開網(wǎng)頁(yè)或者與其他app交互
getcuid 獲取imei
getlocstring 獲取本地字符串信息
scandownloadfile 掃描下載文件(UCDownloads/QQDownloads/360Download...)
addcontactinfo 給手機(jī)增加聯(lián)系人
getapplist獲取全部安裝app信息
downloadfile 下載任意文件到指定路徑如果文件是apk則進(jìn)行安裝
uploadfile 上傳任意文件到指定路徑 如果文件是apk則進(jìn)行安裝
當(dāng)我們看到這些遠(yuǎn)程指令的時(shí)候嚇了一跳。你說(shuō)你一個(gè)百度地圖好好的導(dǎo)航行不行?為什么要去給別人添加聯(lián)系人呢?添加聯(lián)系人也就算了,為什么要去別的服務(wù)器下載應(yīng)用并且安裝呢?更夸張的是,安裝還不是彈出對(duì)話框讓用戶選擇是否安裝,而是直接申請(qǐng)root權(quán)限進(jìn)行靜默安裝。下圖是代碼段:

可以看到下載完app后會(huì)有三個(gè)判斷:
手機(jī)助手為系統(tǒng)應(yīng)用直接使用android.permission.INSTALL_PACKAGES權(quán)限靜默安裝應(yīng)用
手機(jī)助手獲得 root 權(quán)限后使用 su 后執(zhí)行 pm install 靜默安裝應(yīng)用
非以上二種情況則彈出引用安裝的確認(rèn)框
一般用戶是非常相信百度系A(chǔ)PP,如果百度系A(chǔ)PP申請(qǐng)了root權(quán)限的話一般都會(huì)通過(guò),但殊不知自己已經(jīng)打開了潘多拉的魔盒。
如果手機(jī)沒(méi)root就沒(méi)法靜默安裝應(yīng)用了嗎?不是的,downloadfile和uploadfile可以選擇下載文件的位置,并且百度系app會(huì)從”/data/data/[app]/”目錄下動(dòng)態(tài)加載一些dex或so文件,這時(shí)我們只需要利用downloadfile或uploadfile指令覆蓋原本的dex或so文件就可以執(zhí)行我們想要執(zhí)行的任意代碼了。比如說(shuō),利用dex或者so獲取一個(gè)反彈shell,然后把提權(quán)的exp傳到手機(jī)上執(zhí)行獲得root權(quán)限,接下來(lái)就可以干所有想干的任何事情了。
0x03 POC
因?yàn)橛绊戇^(guò)大,暫不公布,會(huì)在WormHole漏洞修復(fù)完后更新。
0x04 測(cè)試
簡(jiǎn)單測(cè)試了一下WormHole這個(gè)漏洞的影響性,我們知道3G/4G下的手機(jī)其實(shí)全部處于一個(gè)巨大無(wú)比的局域網(wǎng)中,只要通過(guò)4G手機(jī)開個(gè)熱點(diǎn),就可以用電腦連接熱點(diǎn)然后用掃描器和攻擊腳本對(duì)全國(guó)甚至全世界連接了3G/4G的手機(jī)進(jìn)行攻擊。在家遠(yuǎn)程入侵一億臺(tái)手機(jī)不再是夢(mèng)。
我們使用獲取包名的腳本,對(duì)電信的下一個(gè) C 段進(jìn)行了掃描,結(jié)果如下:
Discovered open port 6259/tcp on 10.142.3.25 "com.baidu.searchbox","version":"19"
Discovered open port 6259/tcp on 10.142.3.93 "packagename":"com.baidu.appsearch"
Discovered open port 6259/tcp on 10.142.3.135 "com.hiapk.marketpho","version":"121"
Discovered open port 6259/tcp on 10.142.3.163 "packagename":"com.hiapk.marketpho"
Discovered open port 6259/tcp on 10.142.3.117 "com.baidu.browser.apps","version":"121"
Discovered open port 6259/tcp on 10.142.3.43 "com.qiyi.video","version":"20"
Discovered open port 6259/tcp on 10.142.3.148 "com.baidu.appsearch","version":"121"
Discovered open port 6259/tcp on 10.142.3.196 "com.baidu.input","version":"16"
Discovered open port 6259/tcp on 10.142.3.204 "com.baidu.BaiduMap","version":"20"
Discovered open port 6259/tcp on 10.142.3.145 "com.baidu.appsearch","version":"121"
Discovered open port 6259/tcp on 10.142.3.188 "com.hiapk.marketpho","version":"21"
Discovered open port 40310/tcp on 10.142.3.53 "com.baidu.BaiduMap","version":"122"
Discovered open port 40310/tcp on 10.142.3.162 "com.ting.mp3.android","version":"122"
Discovered open port 40310/tcp on 10.142.3.139 "com.baidu.searchbox","version":"122"
Discovered open port 40310/tcp on 10.142.3.143 "com.baidu.BaiduMap","version":"122"
Discovered open port 40310/tcp on 10.142.3.176 "packagename":"com.baidu.searchbox"
255個(gè)IP就有16手機(jī)有WormHole漏洞。
除此之外,我們發(fā)現(xiàn)華為,三星,聯(lián)想,金立等公司的某些機(jī)型在中國(guó)出廠的時(shí)候都會(huì)預(yù)裝百度系app,突然間感到整個(gè)人都不好了。。。
0x05 總結(jié)
我們已經(jīng)在2015年10月14日的時(shí)候?qū)ormHole的漏洞報(bào)告通過(guò)烏云提交給了百度,并且百度已經(jīng)確認(rèn)了漏洞并且開始進(jìn)行修復(fù)了。但這次漏洞并不能靠服務(wù)器端進(jìn)行修復(fù),必須采用升級(jí)app的方法進(jìn)行修復(fù),希望用戶得到預(yù)警后盡快升級(jí)自己的應(yīng)用到最新版,以免被WormHole漏洞攻擊。
0x06 受影響的app列表
足球直播
足球巨星
足彩網(wǎng)
卓易彩票
助手貼吧
中國(guó)足彩網(wǎng)
中國(guó)藍(lán)TV
中國(guó)藍(lán)HD
珍品網(wǎng)
掌上百度
悅動(dòng)圈跑步
優(yōu)米課堂
音悅臺(tái)
移動(dòng)91桌面
央視影音
修車易
小紅書海外購(gòu)物神器
俠侶周邊游
物色
萬(wàn)達(dá)電影
貼吧看片
貼吧飯團(tuán)
視頻直播
生活小工具
上網(wǎng)導(dǎo)航
全民探索
窮游
途牛網(wǎng) (新版本已經(jīng)修復(fù))
汽車之家 (新版本已經(jīng)修復(fù))
拇指醫(yī)生(醫(yī)生版)
萌萌聊天
美西時(shí)尚
么么噠
螞蟻短租
旅游攻略
樂(lè)視視頻
酷音鈴聲
口袋理財(cái)
經(jīng)理人分享
購(gòu)車族
歌勇賽
鳳凰視頻
風(fēng)云直播Pro
多米音樂(lè)
都市激情飆車
懂球帝
蛋蛋理財(cái)
穿越古代
彩票到家
彩票365
爆猛料
百姓網(wǎng)
百度桌面Plus
百度云
百度游戲大全
百度音樂(lè)2014
百度新聞
百度團(tuán)購(gòu)
百度圖片
百度貼吧青春版
百度貼吧簡(jiǎn)版
百度貼吧HD
百度輸入法
百度手機(jī)助手
百度手機(jī)游戲
百度視頻HD
百度視頻
百度瀏覽器
百度翻譯
百度地圖DuWear版
百度地圖
百度HD
百度
安卓市場(chǎng)
愛(ài)奇藝視頻
VidNow
Video Now
T2F話友
Selfie Wonder
PPS影音
PhotoWonder
hao123特價(jià)
CCTV手機(jī)電視
91桌面
91助手
91愛(ài)桌面
91 Launcher
365彩票
PS:
1.文章是提前編輯好打算漏洞公開后再發(fā)布,趨勢(shì)已經(jīng)發(fā)文所以跟進(jìn).
http://blog.trendmicro.com/trendlabs-security-intelligence/setting-the-record-straight-on-moplus-sdk-and-the-wormhole-vulnerability/
2.網(wǎng)上公布的一些 app 列表大多是根據(jù)百度 moplus SDK 的特征指令靜態(tài)掃描得來(lái)這樣會(huì)有一定誤報(bào)導(dǎo)致無(wú)辜 app 躺槍,比如漫畫島app 雖然集成了此 SDK 但是因?yàn)榇a混淆策略,指令實(shí)現(xiàn)類名被混淆后 findClass 無(wú)法找到,所以 exp 都會(huì)提示404.
3.關(guān)聯(lián)漏洞
WooYun: 百度輸入法安卓版存在遠(yuǎn)程獲取信息控制用戶行為漏洞(可惡意推入內(nèi)容等4G網(wǎng)絡(luò)內(nèi)可找到目標(biāo))
WooYun: WormHole蟲洞漏洞總結(jié)報(bào)告(附檢測(cè)結(jié)果與測(cè)試腳本)