主要發(fā)現(xiàn)
百度瀏覽器是微軟和安卓平臺上的一種網(wǎng)絡(luò)瀏覽器,個人用戶在向服務(wù)器傳輸數(shù)據(jù)時進行加密,就算加密了也很容易被解密。瀏覽器更新時可能很輕易地被中間攻擊者利用,執(zhí)行任意代碼。
安卓版本的百度瀏覽器傳輸?shù)膫€人可識別數(shù)據(jù),包括用戶的GPS坐標(biāo)、搜索內(nèi)容和訪問時的URL,這些內(nèi)容都是沒有進行加密的。不僅如此,在傳輸用戶的IMEI和附近無線網(wǎng)絡(luò)列表時也只是使用了簡單、易于破解的加密。
版的百度瀏覽器在傳輸個人可識別數(shù)據(jù)點的時候也沒有進行加密,或者是進行了簡單的加密。這些數(shù)據(jù)包括了用戶的搜索詞、硬盤序列號模型、MAC網(wǎng)絡(luò)地址、URL和訪問歷史,還有CPU型號。
無論是版還是安卓版的百度,都沒有使用代碼簽名來保護軟件更新,提高其安全性,也就是說,更新路徑上隨便一個惡意攻擊者都可以讓該應(yīng)用程序下載執(zhí)行任意代碼,這是一個重大的安全風(fēng)險。
微軟版本的百度瀏覽器有一個功能:可以將一個請求轉(zhuǎn)向特定的網(wǎng)站,這就允許用戶可以訪問一些在中國被墻的網(wǎng)站。
對百度的全球版本進行分析之后發(fā)現(xiàn),數(shù)據(jù)泄露是因為百度共享了它的軟件開發(fā)工具包(SDK),這影響了數(shù)百個由百度和谷歌應(yīng)用商店的第三方共同開發(fā)的應(yīng)用程序,以及中國某個廣泛使用的應(yīng)用商店里的數(shù)千個應(yīng)用。
介紹
百度瀏覽器是由中國最大的科技公司百度公司開發(fā)的,向和安卓平臺免費提供。它提供的功能不僅僅是一般瀏覽器的功能,包括了視頻音頻下載工具和內(nèi)置的種子下載。
本篇報告針對百度瀏覽器在操作過程中是如何管理和傳輸用戶數(shù)據(jù)做出了詳細(xì)的分析。報告指出,和安卓版本的百度瀏覽器都有著一定的安全隱患,都有可能泄露個人用戶數(shù)據(jù),包括用戶地理位置、硬件標(biāo)示符、附近的無線網(wǎng)絡(luò)、網(wǎng)頁瀏覽數(shù)據(jù)和搜索詞。這些數(shù)據(jù)的傳輸在兩種版本的瀏覽器中都沒有進行加密或是進行了簡單的加密,這也就是說,任何攻擊者都可以通過手機路徑并進行一定的解密手段來獲得此類數(shù)據(jù)。此外,兩種版本的應(yīng)用都沒有使用數(shù)字簽名來保護其軟件更新,這就意味著惡意攻擊者可以讓瀏覽器下載并執(zhí)行任意代碼。
這份報告是我們之前工作的延續(xù),在此之前我們已經(jīng)審查了在亞洲流行的移動應(yīng)用程序的安全和隱私狀況。我們之前的研究報告就發(fā)現(xiàn)UC瀏覽器有著類似的問題,這個瀏覽器是由中國電子商務(wù)巨頭阿里巴巴公司開發(fā)的。那份報告記錄了UC瀏覽器對于用戶的敏感信息沒有進行加密傳輸,這些信息包括了IMSI、IMEI、安卓ID、無線網(wǎng)絡(luò)MAC地址、地理定位數(shù)據(jù)和用戶的搜索查詢。UC瀏覽器的安全問題是在 泄露出來的文件中確定的,該組織是五眼情報聯(lián)盟,包括了加拿大、美國、英國、澳大利亞和新西蘭的情報機構(gòu),他們就是利用這些漏洞來識別用戶的。
在過去的工作中,我們已經(jīng)分析了熱門的第三方軟件的自動更新機制。我們發(fā)現(xiàn)攻擊者利用百度瀏覽器自動更新機制來進行遠程代碼執(zhí)行的漏洞和那些第三方軟件的漏洞很是相似。
此外,我們也對TOM-Skype和新浪UC信息平臺的關(guān)鍵字審查進行了調(diào)查,不僅如此,我們還對亞洲流行的手機聊天應(yīng)用程序進行了比較分析,比如微信、LINE和Kakao Talk。
我們還發(fā)布了一份關(guān)于移動通信隱私安全問題的概述,標(biāo)題叫做《The Many in Our 》。對于本篇報告中的一些技術(shù)問題來說,那份概述中關(guān)于移動技術(shù)標(biāo)示符的說明是個很好的背景介紹。另外,我們還在上發(fā)表了一篇關(guān)于健身追蹤器上隱私和安全問題的分析。
負(fù)責(zé)任的披露和通知
我們在2015年10月26日向百度通知了我們的發(fā)現(xiàn)和我們發(fā)表這份報告的意圖。我們表示不會按照國際對于披露漏洞的慣例在刊登前45天通知。百度最初表示會在2016年1月24日發(fā)布的更新中解決我們所確定的問題。然而百度發(fā)現(xiàn)這些安全問題已經(jīng)影響了其他的產(chǎn)品,所以他們要求我們推遲到2016年2月14日之后再發(fā)表。為了給百度足夠的時間來修復(fù)所有漏洞,我們同意了。
在這之后,百度表示他們會在2月14日發(fā)布和安卓客戶端的更新版本。為了確定他們真的解決了問題,我們對兩種更新版本進行了分析。分析結(jié)果在報告結(jié)尾部分的“更新:對百度最新版本的分析”。
我們在2月16日向百度的國際通信主任發(fā)送了一封關(guān)于百度瀏覽器安全隱私問題的電子郵件,22日我們收到了回復(fù)。
在本報告的結(jié)尾附錄有我們和百度關(guān)于這些安全問題交涉的所有信件。
百度瀏覽器:簡單背景介紹
百度瀏覽器是由中國互聯(lián)網(wǎng)巨頭百度公司專為和安卓系統(tǒng)研發(fā)的瀏覽器。首次發(fā)布是在2011年,主要基于谷歌,它擁有大量功能,包括集成的視頻音頻下載工具、內(nèi)置種子下載和鼠標(biāo)手勢支持。該瀏覽器是百度提供的許多服務(wù)之一,其他還有搜索引擎、大規(guī)模的廣告平臺和百度百科(類似于維基百科)。根據(jù)“中國互聯(lián)網(wǎng)觀察”的調(diào)查,到2015年,百度瀏覽器的網(wǎng)民滲透率達到了29.2%。
作為中國占主導(dǎo)地位的高科技公司之一,加上沒有來自被屏蔽的谷歌搜索引擎的競爭壓力,百度已經(jīng)成為了中國最常用的搜索引擎。在世界范圍網(wǎng)頁訪問量排名的Alexa名單上,百度排名第四,在中國排名第一。公司2014年的收入是79.6億美金。
2014年7月,百度和互聯(lián)網(wǎng)流量管理公司建立了合作,該公司總部設(shè)在美國。二者達成合作,利用百度公司的數(shù)據(jù)中心和的流量管理服務(wù)來提供中國網(wǎng)站的訪問速度。這項服務(wù)被稱為百度云加速,主要針對希望加快在中國效率低下、審查嚴(yán)苛的網(wǎng)絡(luò)中運行速度的企業(yè)。本報告的第二部分將介紹了百度瀏覽器的另一個功能,即對境外特定網(wǎng)站的流量進行代理來提高性能。
技術(shù)分析
我們使用逆向工程技術(shù)分析了兩種版本的百度瀏覽器。為了分析程序行為,我們使用了機器碼、字節(jié)碼反匯編程序、反編譯器和調(diào)試器,包括了JD、JADX和IDA。我們還使用了 和來捕獲分析網(wǎng)絡(luò)流量。
分析分為三部分。第一部分介紹了兩種版本的中文版百度瀏覽器是如何向百度服務(wù)器發(fā)送未加密或是易破解個人信息的。第二部分描述了百度瀏覽器中文版的一種特別功能,即對境外特定網(wǎng)站的流量進行代理來提高性能。第三部分討論了中文版和全球版共有的漏洞,以及有多少漏洞是因為百度軟件開發(fā)工具包的使用,在其他百度或是第三方應(yīng)用中都可以找到該工具包。
“易破解”的加密
報告中,在談到百度瀏覽器使用的加密的時候我們會用到“易破解”這個短語。在這里,我們來討論一下我們所說的這句話,以及如何正確執(zhí)行百度瀏覽器的加密術(shù)。
當(dāng)我們說加密術(shù)是“易破解”的時候,并不是說加密本身的算法是有缺陷或是不安全的(盡管有時候百度瀏覽器使用的算法的確是這樣)。相反的,我們的意思是該算法使用不當(dāng)。顧名思義,百度瀏覽器的分析師可以利用該算法編寫一個解密工具。
加密數(shù)據(jù)有兩種基本方法:對稱加密或是非對稱加密。對稱加密(如圖一所示)相比于非對稱加密的優(yōu)點是加密速度快。缺點就是只要你知道使用的算法和某個鍵,你就能破解任意的密碼。利用簡單的算法,做到這點易如反掌。當(dāng)加密術(shù)只使用了對稱算法的時候,只要對程序稍加分析就可以寫出一個破解工具來。
像RSA這樣的非對稱算法(如圖二所示)就是被開發(fā)來解決這一問題的。雖然這種算法明顯慢于對稱算法,但優(yōu)勢就是用于解密的密鑰不同于加密密鑰。這兩個密鑰必須是數(shù)學(xué)相關(guān)的,通過算法設(shè)計生成一個密鑰對,但是從加密密鑰到解密密鑰的派生過程要通過復(fù)雜的計算。這就意味著一個程序可以使用一個硬編碼的加密密鑰,但是解密密鑰只能保存在收件人那里。雖然數(shù)據(jù)接收方可以使用保密的解密密鑰,但數(shù)據(jù)仍有可能被竊取,只要解密密鑰存在于程序當(dāng)中,第三方就有可能寫出破解工具。
為了改善性能劣勢的非對稱加密,通常會使用結(jié)合了以下技術(shù)的對稱加密。要想對數(shù)據(jù)進行加密,會隨機生成一對對稱密鑰來加密數(shù)據(jù)。然后會使用非對稱密鑰來加密隨機生成的加密密鑰。之后被非對稱加密的對稱密鑰和被對稱加密的數(shù)據(jù)會一起發(fā)送給收件人。收件人可以使用私人的解密密鑰來解密對稱密鑰,然后再用它來解密數(shù)據(jù)。因為只有加密密鑰是被非對稱加密的,其存儲空間遠小于整個數(shù)據(jù),所以這項技術(shù)要遠快于非對稱加密所有數(shù)據(jù),因此是結(jié)合了兩種加密技術(shù)的優(yōu)點。這是網(wǎng)絡(luò)上使用的加密術(shù)的基本技術(shù),比如SSL。
我們之所以說百度瀏覽器的加密是易破解的,是因為它使用的加密完全是硬編碼編寫的對稱密鑰。使用這種辦法加密的通信很容易被破解。我們建議百度或是任何希望通過互聯(lián)網(wǎng)安全發(fā)送敏感信息的人使用一個知名并且行之有效的協(xié)議來使用非對稱加密技術(shù)(比如SSL),也不要試圖自制加密協(xié)議。SSL是經(jīng)得起考驗的協(xié)議,解決了許多非專業(yè)譯電員認(rèn)為不可能解決的安全問題。
第一部分:個人信息的不安全傳送
安卓版本
我們分析了6.2.18.0版本的瀏覽器,這是從下載的。關(guān)于不安全的個人信息傳送,我們還是發(fā)現(xiàn)了一些隱私安全問題。表1總結(jié)了通過該應(yīng)用收集加密或易加密傳送的個人數(shù)據(jù)。
關(guān)于安卓版本的收集傳輸個人數(shù)據(jù)功能,我們發(fā)現(xiàn)了以下幾個安全缺陷:
A.啟動時泄露敏感數(shù)據(jù)
在應(yīng)用程序啟動時,我們觀察到百度瀏覽器向 發(fā)送的HTTP POST 請求。這個HTTP請求的正文是一個壓縮的JSON文件。該文件包含了電話和用戶的多種細(xì)節(jié),有的是純文本,有的是加密的。
JSON文件中未加密的字段有:
o:用戶操作系統(tǒng)(比如,安卓)
n:百度瀏覽器版本
w, h:屏幕像素
Gl:GPS位置和最近更新時間
有的字段是用硬編碼ASCII編碼鍵的AES+ECB進行加密的
h9YLQoINGWyOBYYk
然后再用編碼。這些字段有:
Dd:IMEI編號
Ii:包含手機IMEI編號倒序的字串符和安卓軟件版本信息的MD5哈希值
Wl2:范圍內(nèi)所有無線網(wǎng)絡(luò)列表以及它們的MAC地址和信號強度。
根據(jù)硬編碼鍵知識,這些字段很容易被破解。用于解密這些字段的腳本源代碼在這。
B.鍵入地址欄時泄露敏感數(shù)據(jù)和地址欄內(nèi)容
和其他瀏覽器一樣,用戶可以在百度瀏覽器地址欄中輸入文本來訪問一個給定的URL或是執(zhí)行搜索。以這種方法在地址欄中輸入文本時,該文本是不進行加密的,只是作為一個有多個GET參數(shù)的HTTP請求訪問下面的URL:
比如說,在地址欄中鍵入這樣的文本“some bar ”:++bar+&ua=B&cuid=ugu0-&cfrom=1200a&from=1200a&crp=0&it=0&ctv=2&st=&nw=3g&cen=
這些GET參數(shù)包括:
Wd:地址欄內(nèi)容
Ua:屏幕分辨率、手機型號、安卓版本和百度版本
Cuid:安卓版本信息的md5哈希值和手機IMEI號倒序的字符串
Wd參數(shù)值的發(fā)送沒有加密;ua和cuid參數(shù)值的加密很不規(guī)范,使用的是很容易被破解的算法,如下所述。UTF8編碼的每個32字節(jié)都被解釋為一個小端字節(jié)序列整數(shù),然后循環(huán)移位字節(jié)到右三位,以及使用硬編碼的XOR。最后,生成的32位字段會和下面的自定義64個字符字母進行編碼:
VX2-
典型的字母表是這樣的:
89+/
利用這些算法和自定義字母表,就可以很容易地破解這些字段,解密這些字段的腳本的源代碼在這里。這種算法由百度瀏覽器的本機代碼在中執(zhí)行(可能是拼寫錯誤,實為)。
C.手機包含了每個頁面視圖中的敏感數(shù)據(jù)
在瀏覽器瀏覽了某個頁面后,會有一個GET請求被發(fā)送到這個URL:
這個 HTTP 標(biāo)題包含了訪問過網(wǎng)頁的完整URL,并且沒有加密。即便是通過HTTPS進行了常規(guī)加密,報告發(fā)現(xiàn)其實并沒有加密。其 etag GET 參數(shù)值是使用有ASCII編碼的五位字節(jié)密鑰的RC4進行加密的:HR2ER
進行加密時,標(biāo)簽包含了許多其他的參數(shù),比如說cuid(含有手機IMEI的倒序值)和許多時間信息(加載網(wǎng)頁所需時間和步驟,包括DNS查找、創(chuàng)建鏈接和加載DOM)。
D.軟件更新的不安全檢查
當(dāng)應(yīng)用想要檢查更新時,就會發(fā)送一個HTTP請求給這個URL:
這項請求含有多項GEL參數(shù),包括上一節(jié)提到的被加密的ua和cuid參數(shù)。服務(wù)器以一種未加密,但是被zlib壓縮的自定義二進制格式進行響應(yīng)。如果有可用的更新百度關(guān)鍵字分析工具 破解版,服務(wù)器會在響應(yīng)中包含對更新的描述以及一個APK的URL。百度瀏覽器會顯示這個描述,并詢問用戶是否需要進行升級。如果用戶確認(rèn)升級,APK文件會進行下載并自動打開百度關(guān)鍵字分析工具 破解版,通過典型的安卓用戶安裝或升級應(yīng)用的界面進行提示。(如圖三)
百度沒有用任何的數(shù)字簽名驗證APK文件,所以中間攻擊者就可以通過發(fā)送特別編寫的響應(yīng)來實施有效攻擊。中間攻擊者可以發(fā)送任意URL給任意的APK文件,然后這個文件和相關(guān)描述還是會被呈現(xiàn)給用戶。如果APK文件擁有的數(shù)字簽名和當(dāng)前安裝的應(yīng)用不符,那么安卓系統(tǒng)不會允許這種文件來升級應(yīng)用。所以不能用這種技術(shù)來用任意的APK文件替換百度瀏覽器。但是仍舊可以用一個不同的惡意APK文件(使用百度瀏覽器的名稱和標(biāo)識)欺騙用戶安裝一個新的應(yīng)用程序(如圖三所示)。
微軟版本
我們分析了 7.6.100.2089 版本的微軟版百度瀏覽器,這是從下載的。這種版本也還是有一些隱私安全漏洞。表2 總結(jié)了通過該應(yīng)用收集加密或易加密傳送的個人數(shù)據(jù)。
關(guān)于微軟版本的收集傳輸個人數(shù)據(jù)功能,我們發(fā)現(xiàn)了以下幾個安全缺陷:
A.輸入地址欄時泄露地址欄內(nèi)容
和安卓版本類似,當(dāng)用戶在地址欄輸入文本來搜索時,該文本會以HTTP GET請求的形式不加密地發(fā)送給這個URL:,地址欄內(nèi)容會存儲在wd參數(shù)值中。
B.以一種易破解的協(xié)定和百度服務(wù)器通信
我們還觀察到,在應(yīng)用程序啟動和瀏覽時,百度瀏覽器會向 *.的各子域發(fā)送多個HTTP POST請求。這些POST請求的主體始終堅持以這種特定的形式:標(biāo)題加上加密的有效負(fù)載。標(biāo)題是沒加密的兩個字符串。第一個是瀏覽器的GUID,這是這些參數(shù)的哈希值:
1、硬盤序列號
2、硬盤型號
3、硬盤控制器版本
4、網(wǎng)絡(luò)MAC地址
5、BDM字符串
再加上#字符,比如md5(“-##1.0##BDM”).
第二個字符串是瀏覽器的,是\\Baidu\\的檢索值。這可能是與瀏覽器版本相關(guān)的注冊表。
加密的有效負(fù)載,在解密時包含使用谷歌協(xié)議緩沖區(qū)(也稱為)的序列化數(shù)據(jù)。這種數(shù)據(jù)是用一種改編的TEA密碼進行加密的,我們稱為MTEA。百度用MTEA使用的密碼模式塊是CBC的一種非標(biāo)準(zhǔn)修改,叫做MCBC。(見圖四)
為了加密解密所有的信息,百度瀏覽器使用含有下列硬編碼ASCII密鑰的MTEA+MCBC:vb%,J^d@2B1l’Abn。使用的都是零字節(jié)初始化向量。用于解密這些請求的腳本源代碼在這里。
C.手機里含有每個瀏覽界面信息,包括硬件序列號
我們解密了瀏覽器發(fā)出的請求,發(fā)現(xiàn)這樣的請求(我們稱作Page 請求)會發(fā)送用戶瀏覽的每個界面,包括HTTP和HTTPS界面,還有界面和用戶的下列信息:
1、界面的完整URL