天天看點

百度浏覽器的隐私安全問題分析

主要發現  

百度浏覽器是微軟和安卓平台上的一種網絡浏覽器,個人使用者在向伺服器傳輸資料時進行加密,就算加密了也很容易被解密。浏覽器更新時可能很輕易地被中間攻擊者利用,執行任意代碼。

安卓版本的百度浏覽器傳輸的個人可識别資料,包括使用者的gps坐标、搜尋内容和通路時的url,這些内容都是沒有進行加密的。不僅如此,在傳輸使用者的imei和附近無線網絡清單時也隻是使用了簡單、易于破解的加密。

windows版的百度浏覽器在傳輸個人可識别資料點的時候也沒有進行加密,或者是進行了簡單的加密。這些資料包括了使用者的搜尋詞、硬碟序列号模型、mac網絡位址、url和通路曆史,還有cpu型号。

無論是windows版還是安卓版的百度,都沒有使用代碼簽名來保護軟體更新,提高其安全性,也就是說,更新路徑上随便一個惡意攻擊者都可以讓該應用程式下載下傳執行任意代碼,這是一個重大的安全風險。

微軟版本的百度浏覽器有一個功能:可以将一個請求轉向特定的網站,這就允許使用者可以通路一些在中國被牆的網站。

對百度的全球版本進行分析之後發現,資料洩露是因為百度共享了它的軟體開發工具包(sdk),這影響了數百個由百度和谷歌應用商店的第三方共同開發的應用程式,以及中國某個廣泛使用的應用商店裡的數千個應用。

介紹

百度浏覽器是由中國最大的科技公司百度公司開發的,向windows和安卓平台免費提供。它提供的功能不僅僅是一般浏覽器的功能,包括了視訊音頻下載下傳工具和内置的種子下載下傳。

本篇報告針對百度浏覽器在操作過程中是如何管理和傳輸使用者資料做出了詳細的分析。報告指出,windows和安卓版本的百度浏覽器都有着一定的安全隐患,都有可能洩露個人使用者資料,包括使用者地理位置、硬體标示符、附近的無線網絡、網頁浏覽資料和搜尋詞。這些資料的傳輸在兩種版本的浏覽器中都沒有進行加密或是進行了簡單的加密,這也就是說,任何攻擊者都可以通過手機路徑并進行一定的解密手段來獲得此類資料。此外,兩種版本的應用都沒有使用數字簽名來保護其軟體更新,這就意味着惡意攻擊者可以讓浏覽器下載下傳并執行任意代碼。

這份報告是我們之前工作的延續,在此之前我們已經審查了在亞洲流行的移動應用程式的安全和隐私狀況。我們之前的研究報告就發現uc浏覽器有着類似的問題,這個浏覽器是由中國電子商務巨頭阿裡巴巴公司開發的。那份報告記錄了uc浏覽器對于使用者的敏感資訊沒有進行加密傳輸,這些資訊包括了imsi、imei、安卓id、無線網絡mac位址、地理定位資料和使用者的搜尋查詢。uc浏覽器的安全問題是在 edward snowden 洩露出來的檔案中确定的,該組織是五眼情報聯盟,包括了加拿大、美國、英國、澳洲和紐西蘭的情報機構,他們就是利用這些漏洞來識别使用者的。

在過去的工作中,我們已經分析了熱門的第三方軟體的自動更新機制。我們發現攻擊者利用百度浏覽器自動更新機制來進行遠端代碼執行的漏洞和那些第三方軟體的漏洞很是相似。

此外,我們也對tom-skype和新浪uc資訊平台的關鍵字審查進行了調查,不僅如此,我們還對亞洲流行的手機聊天應用程式進行了比較分析,比如微信、line和kakao talk。

我們還釋出了一份關于移動通信隐私安全問題的概述,标題叫做《 the many identifiers in our pockets》。對于本篇報告中的一些技術問題來說,那份概述中關于移動技術标示符的說明是個很好的背景介紹。另外,我們還在 openeffect上發表了一篇關于健身追蹤器上隐私和安全問題的分析。

負責任的披露和通知

我們在2015年10月26日向百度通知了我們的發現和我們發表這份報告的意圖。我們表示不會按照國際對于披露漏洞的慣例在刊登前45天通知。百度最初表示會在2016年1月24日釋出的更新中解決我們所确定的問題。然而百度發現這些安全問題已經影響了其他的産品,是以他們要求我們推遲到2016年2月14日之後再發表。為了給百度足夠的時間來修複所有漏洞,我們同意了。

在這之後,百度表示他們會在2月14日釋出windows和安卓用戶端的更新版本。為了确定他們真的解決了問題,我們對兩種更新版本進行了分析。分析結果在報告結尾部分的“更新:對百度最新版本的分析”。

我們在2月16日向百度的國際通信主任發送了一封關于百度浏覽器安全隐私問題的電子郵件,22日我們收到了回複。

在本報告的結尾附錄有我們和百度關于這些安全問題交涉的所有信件。

百度浏覽器:簡單背景介紹

百度浏覽器是由中國網際網路巨頭百度公司專為windows和安卓系統研發的浏覽器。首次釋出是在2011年,主要基于谷歌chromium,它擁有大量功能,包括內建的視訊音頻下載下傳工具、内置種子下載下傳和滑鼠手勢支援。該浏覽器是百度提供的許多服務之一,其他還有搜尋引擎、大規模的廣告平台和百度百科(類似于維基百科)。根據“中國網際網路觀察”的調查,到2015年,百度浏覽器的網民滲透率達到了29.2%。

作為中國占主導地位的高科技公司之一,加上沒有來自被屏蔽的谷歌搜尋引擎的競争壓力,百度已經成為了中國最常用的搜尋引擎。在世界範圍網頁通路量排名的alexa名單上,百度排名第四,在中國排名第一。公司2014年的收入是79.6億美金。

2014年7月,百度和網際網路流量管理公司cloudflare建立了合作,該公司總部設在美國。二者達成合作,利用百度公司的資料中心和cloudflare的流量管理服務來提供中國網站的通路速度。這項服務被稱為百度雲加速,主要針對希望加快在中國效率低下、審查嚴苛的網絡中運作速度的企業。本報告的第二部分将介紹了百度浏覽器的另一個功能,即對境外特定網站的流量進行代理來提高性能。

技術分析

我們使用逆向工程技術分析了兩種版本的百度浏覽器。為了分析程式行為,我們使用了機器碼、位元組碼反彙程式設計式、反編譯器和調試器,包括了jd、jadx和ida。我們還使用了 tcpdump和wireshark來捕獲分析網絡流量。

分析分為三部分。第一部分介紹了兩種版本的中文版百度浏覽器是如何向百度伺服器發送未加密或是易破解個人資訊的。第二部分描述了百度浏覽器windows中文版的一種特别功能,即對境外特定網站的流量進行代理來提高性能。第三部分讨論了中文版和全球版共有的漏洞,以及有多少漏洞是因為百度軟體開發工具包的使用,在其他百度或是第三方應用中都可以找到該工具包。

“易破解”的加密

報告中,在談到百度浏覽器使用的加密的時候我們會用到“易破解”這個短語。在這裡,我們來讨論一下我們所說的這句話,以及如何正确執行百度浏覽器的加密術。

當我們說加密術是“易破解”的時候,并不是說加密本身的算法是有缺陷或是不安全的(盡管有時候百度浏覽器使用的算法的确是這樣)。相反的,我們的意思是該算法使用不當。顧名思義,百度浏覽器的分析師可以利用該算法編寫一個解密工具。

image

加密資料有兩種基本方法:對稱加密或是非對稱加密。對稱加密(如圖一所示)相比于非對稱加密的優點是加密速度快。缺點就是隻要你知道使用的算法和某個鍵,你就能破解任意的密碼。利用簡單的算法,做到這點易如反掌。當加密術隻使用了對稱算法的時候,隻要對程式稍加分析就可以寫出一個破解工具來。

像rsa這樣的非對稱算法(如圖二所示)就是被開發來解決這一問題的。雖然這種算法明顯慢于對稱算法,但優勢就是用于解密的密鑰不同于加密密鑰。這兩個密鑰必須是數學相關的,通過算法設計生成一個密鑰對,但是從加密密鑰到解密密鑰的派生過程要通過複雜的計算。這就意味着一個程式可以使用一個寫死的加密密鑰,但是解密密鑰隻能儲存在收件人那裡。雖然資料接收方可以使用保密的解密密鑰,但資料仍有可能被竊取,隻要解密密鑰存在于程式當中,第三方就有可能寫出破解工具。

為了改善性能劣勢的非對稱加密,通常會使用結合了以下技術的對稱加密。要想對資料進行加密,會随機生成一對對稱密鑰來加密資料。然後會使用非對稱密鑰來加密随機生成的加密密鑰。之後被非對稱加密的對稱密鑰和被對稱加密的資料會一起發送給收件人。收件人可以使用私人的解密密鑰來解密對稱密鑰,然後再用它來解密資料。因為隻有加密密鑰是被非對稱加密的,其存儲空間遠小于整個資料,是以這項技術要遠快于非對稱加密所有資料,是以是結合了兩種加密技術的優點。這是網絡上使用的加密術的基本技術,比如ssl。

我們之是以說百度浏覽器的加密是易破解的,是因為它使用的加密完全是寫死編寫的對稱密鑰。使用這種辦法加密的通信很容易被破解。我們建議百度或是任何希望通過網際網路安全發送敏感資訊的人使用一個知名并且行之有效的協定來使用非對稱加密技術(比如ssl),也不要試圖自制加密協定。ssl是經得起考驗的協定,解決了許多非專業譯電員認為不可能解決的安全問題。

第一部分:個人資訊的不安全傳送

安卓版本

t1.png

  關于安卓版本的收集傳輸個人資料功能,我們發現了以下幾個安全缺陷:

a.啟動時洩露敏感資料

json檔案中未加密的字段有:

o:使用者作業系統(比如,安卓)

n:百度浏覽器版本

w, h:螢幕像素

gl:gps位置和最近更新時間

有的字段是用寫死ascii編碼鍵的aes+ecb進行加密的

h9ylqoingwyobyyk

然後再用base64編碼。這些字段有:

dd:imei編号

ii:包含手機imei編号倒序的字串符和安卓軟體版本資訊的md5哈希值

wl2:範圍内所有無線網絡清單以及它們的mac位址和信号強度。

根據寫死鍵知識,這些字段很容易被破解。用于解密這些字段的python腳本源代碼在這。

b.鍵入位址欄時洩露敏感資料和位址欄内容

這些get參數包括:

wd:位址欄内容

ua:螢幕分辨率、手機型号、安卓版本和百度版本

cuid:安卓版本資訊的md5哈希值和手機imei号倒序的字元串

wd參數值的發送沒有加密;ua和cuid參數值的加密很不規範,使用的是很容易被破解的算法,如下所述。utf8編碼的每個32位元組都被解釋為一個小端位元組序列整數,然後循環移位位元組到右三位,以及使用寫死0x2d382324的xor。最後,生成的32位字段會和下面的自定義64個字元字母進行base64編碼:

qogjoucrnkfil5p4sq3lamxgkztdesvb6z_ypahmi9t80rjyhw1dewfbc7nuvx2-

典型的base64字母表是這樣的:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/

利用這些算法和自定義字母表,就可以很容易地破解這些字段,解密這些字段的python腳本的源代碼在這裡。這種算法由百度浏覽器的本機代碼在libchiperencoder_v1_3_1_browser中執行(chiper可能是拼寫錯誤,實為cipher)。

c.手機包含了每個頁面視圖中的敏感資料

這個 http referer 标題包含了通路過網頁的完整url,并且沒有加密。即便是通過https進行了正常加密,報告發現其實并沒有加密。其 etag get 參數值是使用有ascii編碼的五位位元組密鑰的rc4進行加密的:hr2er

進行加密時,标簽包含了許多其他的參數,比如說cuid(含有手機imei的倒序值)和許多時間資訊(加載網頁所需時間和步驟,包括dns查找、建立連結和加載dom)。

d.軟體更新的不安全檢查

當應用想要檢查更新時,就會發送一個http請求給這個url:

<a href="http://uil.cbs.baidu.com/update">http://uil.cbs.baidu.com/update</a>

這項請求含有多項gel參數,包括上一節提到的被加密的ua和cuid參數。伺服器以一種未加密,但是被zlib壓縮的自定義二進制格式進行響應。如果有可用的更新,伺服器會在響應中包含對更新的描述以及一個apk的url。百度浏覽器會顯示這個描述,并詢問使用者是否需要進行更新。如果使用者确認更新,apk檔案會進行下載下傳并自動打開,通過典型的安卓使用者安裝或更新應用的界面進行提示。(如圖三)

百度沒有用任何的數字簽名驗證apk檔案,是以中間攻擊者就可以通過發送特别編寫的響應來實施有效攻擊。中間攻擊者可以發送任意url給任意的apk檔案,然後這個檔案和相關描述還是會被呈現給使用者。如果apk檔案擁有的數字簽名和目前安裝的應用不符,那麼安卓系統不會允許這種檔案來更新應用。是以不能用這種技術來用任意的apk檔案替換百度浏覽器。但是仍舊可以用一個不同的惡意apk檔案(使用百度浏覽器的名稱和辨別)欺騙使用者安裝一個新的應用程式(如圖三所示)。

  微軟版本

t2.png

  關于微軟版本的收集傳輸個人資料功能,我們發現了以下幾個安全缺陷:

a.輸入位址欄時洩露位址欄内容

b.以一種易破解的協定和百度伺服器通信

我們還觀察到,在應用程式啟動和浏覽時,百度浏覽器會向 *.br.baidu.comdomain的各子域發送多個http post請求。這些post請求的主體始終堅持以這種特定的形式:标題加上加密的有效負載。标題是沒加密的兩個字元串。第一個是浏覽器的guid,這是這些參數的哈希值:

1、硬碟序列号

2、硬碟型号

3、硬碟控制器版本

4、網絡mac位址

5、bdm字元串

再加上#字元,比如md5(“vbf952409b-973833b1#vboxharddisk#1.0#080027f2c8cf#bdm”).

第二個字元串是浏覽器的supplyid,是hkey_local_machinesoftwarebaidubaidubrowsersupplyid的檢索值。這可能是與浏覽器版本相關的系統資料庫。

加密的有效負載,在解密時包含使用谷歌協定緩沖區(也稱為protobuf)的序列化資料。這種資料是用一種改編的tea密碼進行加密的,我們稱為mtea。百度用mtea使用的密碼模式塊是cbc的一種非标準修改,叫做mcbc。(見圖四)

為了加密解密所有的protobuf資訊,百度浏覽器使用含有下列寫死ascii密鑰的mtea+mcbc:vb%,j^d@2b1l’abn。使用的都是零位元組初始化向量。用于解密這些請求的python腳本源代碼在這裡。

c.手機裡含有每個浏覽界面資訊,包括硬體序列号

我們解密了浏覽器發出的protobuf請求,發現這樣的請求(我們稱作page report請求)會發送使用者浏覽的每個界面,包括http和https界面,還有界面和使用者的下列資訊:

1、界面的完整url

2、界面的http狀态代碼

3、界面的html标題

4、浏覽器存儲網絡跟蹤器的域名(名叫baiduid)以及跟蹤器的内容(百度使用這個名稱的網絡跟蹤器)

5、機器的cpu型号

6、機器的硬碟序列号

7、檔案系統序列号

8、機器的網絡mac位址

9、浏覽器的guid

d.對軟體更新的不安全審查

當浏覽器要查找更新時,會發出一個protobuf請求,我們稱之為 update info 請求,這是為了獲得百度浏覽器的最新版本。加密的響應會包含最新釋出的版本号、更新的描述、更新到最新版本的url和檔案的md5哈希值。這個可執行檔案沒有受到任何數字簽名的保護,隻在加密的請求中有md5哈希值。通過加密并發送protobuf響應,任何的中間攻擊者都可以向任何的可執行檔案和其md5哈希值中發送url,這樣會導緻浏覽器下載下傳執行任意代碼。

  e.更新域清單中的網站會觸發代理

浏覽器啟動時,它會發送一個我們稱之為代理資訊請求的protobuf請求。在解密該請求時,包括了不同資源的版本号碼,這些資源和百度自動代理的境外網站有關,這在本文的第二部分有具體的解釋。如果伺服器确定這些資源中有需要更新的部分,protobuf響應中會包含資源的最新版本或是最新版本的連結,一起的還有新版本的md5哈希值和用于解密的密鑰。

第二部分:國外網站代理

中國的網絡使用者面對的是世界上最嚴格的網際網路審查制度之一。在中國最有名的審查制度可能是”長城防火牆“,這是一種網頁過濾的綜合體系,阻止中國境内對禁止通路内容的通路。因為這種系統限制中國網絡使用者對境外網頁内容的通路,很多使用者都在尋求方法來規避這種審查。其中一種方法就是使用國際代理,它會掩蓋和重定位網絡流向來逃避檢查。

除了中國審查制度規定對于資訊的通路限制,長城防火牆還會在跨境傳輸時表現出明顯的低效和慢速。代理伺服器可以繞開這些網絡瓶頸來提高性能。

我們對于百度浏覽器windows版的分析表明,該軟體有一個功能,可以自動将請求代理到境外某些網站。百度在其網站中宣傳了這種服務,并描述了潛在的性能改進。(見下圖)

除了可以提高性能,我們還發現這種代理可以允許通路一些被禁止的網站,比如www.wordpress.com。

kv_auth 資源

該資源包含了不同代理伺服器的資訊。如果浏覽器版本沒有更新,那麼在代理請求的響應中會包含新版本。資源中含有代理域的md5哈希值,每個哈希值含有使用者名和密碼salt,這會用于計算獲得代理的使用者名和密碼,這會在之後進行解釋。

目前的清單含有13個條目;然而,因為隻有哈希值,是以我們還不能用這個清單要求代理的完整目錄。

fg_pac 資源

我們有上述檔案的解密版本,以及用來解密的腳本源代碼。值得注意的是,由于在url的檔案名是檔案内容的md5哈希值,對該檔案的任何更新版本都不會是同一個url,是以不能用上面的url來跟蹤更新。

解密時,此檔案是一個代理伺服器自動配置或是pac檔案,裡面是java代碼,用來确定哪些是代理網站的,或是具體使用那個代理,以及是否用http或是https與該代理伺服器進行通信。

kv_report 資源

該資源用于确定是否通路會向百度發送額外資訊的代理網站。同樣的,最新的版本會包含在響應中。此資源還包含域的清單,如果檢視的網頁和其中之一比對,浏覽器會另外發送一個加密的protobuf請求。我們在前面描述過網頁的請求,這些請求包括:

1、網頁的完整url

2、網頁的http引用字段

3、網站的ip位址

4、用來指向網頁的http重定向清單

5、網頁dns查詢時間、tcp連接配接時間、ssl連接配接時間以及完整的請求時間

6、是否使用了代理網站

分析

我們編寫了一個python腳本,該腳本會進行有身份驗證的代理并下載下傳任意url請求。首先,我們用它來測試百度是否會通路 fg_pac檔案之外的網站。我們發現兩個代理伺服器都顯示出頁面錯誤,表明通路受控制。我們用一個中國vps對alexa前100萬排行榜進行了測試,發現了46個沒有出現在fg_pac檔案的額外域可以通過這兩個代理伺服器通路。

domain.png

第三部分:其他百度産品和第三方應用中的漏洞

為了确定百度浏覽器中敏感資訊的洩露是否會通過共享的代碼機制等方式感染到其他的百度産品,我們進行了初步調查。百度為微軟和安卓兩種版本的浏覽器都開發了全球版,關于該版本的具體分析在下面。我們發現安卓版本浏覽器中洩露敏感資訊的這個漏洞作為分析軟體開發工具包(sdk)的一部分不僅存在于百度其他安卓産品中,還存在在大量的第三方應用中。

t5.png

結論

許多情況下,移動裝置會在不向使用者提供任何通知的情況下生成、收集和傳輸種類繁多的個人标示符和使用者資料。關于這一主題,我們題為《the many identifiers in our pockets》的論述重點介紹了與收集傳輸标示符有關的風險。

本篇報告中提到的問題引起了人們對于百度浏覽器使用者個人隐私安全的廣泛關注。大量的标示符和資料點都是使用易破解的加密術進行傳輸的。

如果個人資料不使用正确的加密手段傳輸,很有可能導緻使用者資料遭到監視。其中可能包括使用者的isp、無線網絡運作商等。更可怕的是,中間攻擊者解密你進行加密的通信,這種攔截會暴露你的地理位置等資訊。如果使用者使用這種應用程式進行含有敏感資訊的通信,那麼這樣的資訊洩露将會是緻命的。

人們對于百度收集存儲使用者資料的方式也産生了一定的質疑。向百度這樣提供網絡服務的大公司,需要遵循中國法律來保護資料的。網絡公司通常是收集這些資料來進行更有效的日常服務的,那為什麼百度浏覽器會收集傳輸如此大量的敏感資料點?這還不得而知。

除了會洩露使用者敏感資訊之外,兩種版本的浏覽器都沒有使用代碼簽名,這允許攻擊者強制應用程式下載下傳執行任意代碼。

本文轉自d1net(轉載)

繼續閱讀