4
本文作者: opera | 2015-06-04 15:09 |
文/羅志宇
瀏覽器的安全其實是一個非常復(fù)雜的問題,它在很大程度上是由瀏覽器本身的定位決定的。舉個例子,一個本來幾乎擁有所有系統(tǒng)訪問權(quán)限的APP,卻要從魚目混雜的互聯(lián)網(wǎng)洋汪中去下載一個不知道誰寫的頁面+腳本,然后在本地運行,而為了安全起見,還要保證執(zhí)行的腳本自動屏蔽掉那些不該看的、不該拿的東西。而且,拜device API (設(shè)備接口)所賜,網(wǎng)頁腳本如需訪問諸如攝像頭、麥克風等很多敏感就需要相應(yīng)的瀏覽器支持,于是瀏覽器也需要訪問相應(yīng)的device API 。
瀏覽器自身設(shè)計
事實上,第一批瀏覽器, 比如 Internet Explorer, Opera, Firefox (Netscape), 在最初的設(shè)計的時候,都沒有能預(yù)見到互聯(lián)網(wǎng)會以如此爆發(fā)性的速度發(fā)展, 同時也受制于硬件條件的限制, 無一例外的采用單塊結(jié)構(gòu)(monolithic architecture)。所謂的單塊結(jié)構(gòu),就是瀏覽器的每個模塊,都塞在一起,而沒有明確的隔離。 這種做法代碼執(zhí)行高效,寫起來也很方便,不過現(xiàn)在看起來, 如果從安全的角度來講,則是很有問題的。
要知道瀏覽器里面有非常多的模塊, 有一些模塊專門處理從網(wǎng)絡(luò)上下載下來的內(nèi)容, 比如文檔解析器, 文檔布局器,或者是Javascript的執(zhí)行。 又有一些只和本地系統(tǒng)接口, 比如文件訪問,密碼的存儲, 剪貼板一類的。 如果全都放在一起, 那簡直就是給網(wǎng)上下載下來的惡意腳本開了一扇便利之門。 一個更好的架構(gòu)是把這兩組模塊分別隔開。然后把第一組專門處理網(wǎng)絡(luò)下載內(nèi)容的模塊用沙箱一類的技術(shù)裝起來。
現(xiàn)代的瀏覽器, 比如谷歌的Chromium, 或者使用Chromium框架的瀏覽器(如桌面端獵豹和360), Opera 桌面(版本12以后) 以及Opera mobile 一類的, 都是采用的這種結(jié)構(gòu),基本上可以把很多潛在的安全風險扼殺在搖籃之中。 (想了解詳情的同學可以參考這里 )
在這種比較干凈的架構(gòu)出來之前,各家瀏覽器基本上都是修修補補, 或者直接就是拿產(chǎn)品特性說事兒,比如Firefox說明自己比較安全的原因基本上是 : 我的獨立(沒有和操作系統(tǒng)集成), 也不像IE一樣往死里做(不支持Active X 插件一類的奇葩東西) 具體可參見這里
而Opera 在Presto 時代, 則在內(nèi)部的代碼規(guī)范里面明確規(guī)定任何情況下不能是用棧上緩存,從而杜絕當年極其流行的棧上緩存溢出攻擊。
[ 參考:所謂棧上緩存,其實就是在棧上的存儲區(qū)域。棧通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。而棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數(shù)),如果申請的空間超過棧的剩余空間時,將提示overflow。因此,能從棧獲得的空間較小。
棧上緩存的害處是:在x86時代,函數(shù)的返回地址也放在棧上,一旦使用棧上緩存,黑客就有可能構(gòu)造一些代碼讓棧上緩存溢出,從而修改函數(shù)的返回值,然后取得計算機的控制權(quán)。]
(關(guān)于棧上緩存,具體參考這里)
到了手機瀏覽器時代,硬件和操作系統(tǒng)本身的安全性都加強了。 硬件方面從x86轉(zhuǎn)到arm, 天生就對棧上緩存溢出免疫。 基于*nix 結(jié)構(gòu)的iOS 和Android 自帶沙箱結(jié)構(gòu),于是瀏覽器本身也被沙箱裝了起來。 所以技術(shù)上來講,由于多了兩層壁壘,手機瀏覽器普遍要比桌面瀏覽器安全, 桌面瀏覽器上的那種首頁書簽搜索引擎各種被亂七八糟改的情況在手機瀏覽器上面基本看不到。 當然,國內(nèi)大部分的手機瀏覽器還是單塊結(jié)構(gòu),單塊結(jié)構(gòu)能有的問題一個也都沒有少。 Chrome/Opera mobile/ 歐朋X+ 這種基于Chromium 架構(gòu)的瀏覽器安全性相對來講會好一些
所以選擇一個安全的手機瀏覽器其實沒有那么復(fù)雜,國際一般比國內(nèi)的在安全方面的意識要強一些。大牌一點的瀏覽器在遇到通用性安全漏洞時 (比如上次著名的heart bleed漏洞)反應(yīng)時間比小的瀏覽器廠商會快一些。
瀏覽器和網(wǎng)站之間的數(shù)據(jù)傳輸
上面說談的其實講的都是瀏覽器如何面對網(wǎng)站上面的惡意代碼保證自己不被黑掉。瀏覽器還有一塊非常大的安全區(qū)域是在于數(shù)據(jù)傳輸。比如大家都不希望自己的銀行密碼被除了網(wǎng)上銀行之外的其他人看到。
3.15晚會里面的wifi釣魚演示其實就是展示數(shù)據(jù)傳輸中數(shù)據(jù)被第三方竊取的可能性,這個可能是陳老濕們最不愿意看到的事情。瀏覽器的世界里面對于數(shù)據(jù)傳輸有兩種主要的方式 :
HTTP (超文本傳輸協(xié)議) 和 HTTPS (安全傳輸協(xié)議).
其中 HTTP 與其說是不安全,不如說是令人發(fā)指的不安全。因為 HTTP 不僅僅是明文傳輸,而且是用文本來傳輸?shù)?,就是說,傳輸?shù)膱笪模苯尤司涂梢宰x得懂。
比如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
這個是在HTTP里面發(fā)送給服務(wù)器用戶名+密碼的報文( 來自于wikipedia ) 。
基本就是明晃晃的告訴別人,你看, 我的密碼在這里哦,然后拿base64編了一下碼,就發(fā)將在廣袤的互聯(lián)網(wǎng)上了。注意哦, 這個是編碼不是加密,沒有任何安全性可言的。
HTTPS 會好非常多, HTTPS 的數(shù)據(jù)是加密傳輸,加密的強度也不小,很多銀行都在使用,對于一般的攻擊是免疫,。
當然 BOSS 級別的 NSA 不在此列, 因為HTTPS 雖然理論上不能破解,但是NSA喪心病狂的在HTTPS用的硬件隨機發(fā)生器中植入了后門。 (詳情參見這里)
有一些瀏覽器。 比如 Opera Mini 或者帶有 Opera turbo 技術(shù)的瀏覽器 提供端到端的私有加密。這一類的瀏覽器在安全性方面會有加分。
PS: 關(guān)于國內(nèi)瀏覽器采集用戶隱私數(shù)據(jù)問題(IMEI, IMSI)等。
多說兩句這個, 作為國內(nèi)App的從業(yè)人員,App(包括瀏覽器)采集IMEI, IMSI已經(jīng)是一個非常普遍的現(xiàn)象,事實上,你其實很難找到不采集的APP, 想要知道一個APP是否采集IMEI, IMSI,只需要打開應(yīng)用的權(quán)限管理,看看有沒有這一項就可以了。
而這種行為,其實更多的是由國內(nèi)的App推廣市場的情況決定的,大部分APP(包含瀏覽器)對你的IMEI并沒有多大興趣,如果真的想要,混淆以后也能用。只是在國內(nèi)的推廣渠道里面,統(tǒng)計,對賬的數(shù)據(jù)都是基于IMEI的。這個決定了大部分App如果想被推廣,一定是需要采集IMEI的。并非是想采集用戶隱私。
當然地理位置數(shù)據(jù)采集就更普遍了,瀏覽器采集這個,其實很大程度上是為了支持HTML5 中的Geolocation 組件,Chrome 也會采集。
這個行為其實和你去銀行開個信用卡, 銀行會要你的身份證復(fù)印件是一樣的道理, 這里面的安全問題不在于銀行是否采集你的身份證復(fù)印件,而是采集完了以后,有沒有能力或者意識把你的信息放在一個安全的地方。 而國內(nèi)大部分App如果出了問題,都是出在數(shù)據(jù)保存上。選擇的原則還是一樣,盡量選者大的,安全記錄好的公司。
【作者介紹】羅志宇,混跡于Opera 軟件公司10年的CTO(首席技術(shù)官)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。