高端訪談 看Chrome安全性能是如何煉成的
原創Chrome開發團隊只注重三件事:穩定、速度和安全。用過Chrome瀏覽器的用戶都對它的穩定和速度深有體會,但安全性究竟如何呢?
要確定一個軟件是否安全是件困難的事情,幸運的是,有Pwn2Own黑客競賽,如果軟件存在任何漏洞,在這個高質量的競賽中將會暴露無遺。
看過今年舉辦的Pwn2Own大賽后,我對Chrome的安全性算是有所認識了,但我仍然存在不少疑問,經過努力,我聯系到了Google Chrome團隊的Ian Fette,他接受了我的專訪,通過這次訪談,讓我對Chrome的安全性又有更深入的了解了。下面就是本次訪談的摘錄。
記者:你們曾多次提到安全是設計Chrome時優先級最高的,能聊一下開發團隊最關注的三個安全問題嗎?
Fette:在構建Chrome的過程中,我們希望設計的瀏覽器是深度安全的,我們知道要解決所有安全問題是沒有銀彈的,因此我們希望在應用程序的所有層次都開發安全的功能,下面三個安全領域是我們投入時間最多的:
1、當用戶訪問不安全的網站時,瀏覽器產生警告。
2、不受信任的代碼離開瀏覽器沙盒后保證它不能執行。
3、確保用戶盡可能塊地獲得最新的瀏覽器版本。
記者:這些工作很有意義,你能簡單解釋下開發團隊是如何攻克這些難題的呢?
Fette:為了警告用戶他們訪問的是釣魚網站或網站包含有惡意代碼,我們使用了我們的安全瀏覽技術,它 已經用在Google搜索引擎、Firefox和Safari中,安全瀏覽技術通過一個中間頁面警告用戶訪問的網站可能不安全。
為了阻止不受信任的代碼離開我們的沙盒執行,我們又增加了一個安全保護層,防止攻擊者在你計算機上執行漏洞利用代碼,即使他們發現了渲染程序的漏洞,也只能被限制在沙盒內。
最后,為了確保用戶的瀏覽器始終保持是最新版本,包括打上最新的安全補丁,我們開發了一個自動升級系統,它無需人工干預,自動靜悄悄地后臺運行。
為了實現這些目標,Chrome開發團隊決定使用多進程架構。
多進程架構
按照設計,多進程架構將瀏覽器應用程序拆分成了多個進程,使用這種方法,一個進程失敗時,整個瀏覽器不會崩潰,Chrome最終拆分成下面三個進程:
1、瀏覽器進程:這個進程管理標簽、窗口和“Chrome”瀏覽器,這個進程同時也是與硬盤、網絡、用戶輸入和顯示之間的接口。
2、渲染進程:這個進程負責使用HTML,JavaScript,CSS和圖像顯示網頁,渲染是由WebKit渲染引擎控制的。
3、插件進程:按照設計,為每個插件或在使用中的擴展創建一個進程。
記者:如果我了解得沒錯,Google應該是第一個為瀏覽器使用多進程架構的,Google的實現與其它瀏覽器有何不同?
Fette:Google采用了一個很奇特的方法將瀏覽器拆分成不同的組件 – 瀏覽器、渲染和插件,它給我們帶來了許多好處,例如,如果插件崩潰,當前查看的網頁仍然可見,并且可操作,插件僅僅是網頁的一部分,因此插件之外的網頁內容不受影響。
在渲染進程上創建的這個策略有效阻止了運行在渲染進程中的惡意代碼讀取或寫用戶的文件系統,注冊表等,這個策略比其它瀏覽器的保護措施都嚴格。
記者:那么Chrome能打開多少進程呢?對同時瀏覽網站的數量有限制嗎?如果是,那么達到數量限制時會發生什么?
Fette:我們的確對進程數量做了限制,但并不等于對打開網站的數量也限制了,我們這樣做的目的是為了實現最佳的性能平衡,主要是根據計算機上的可用內存數量來限制的,也就是說,你的內存越多,我們限制的數量也更高。
當你達到最大進程數限制時,打開的新標簽將會共享其它標簽的進程,如果你打開了含有20個標簽的20個獨立窗口,總共有400個標簽的話,很可能每個渲染進程都支撐了10個標簽,如果是400個不同的進程,你的機器肯定早就承受不了了。
Chrome沙盒
除了穩定,多進程架構帶來的好處外,按照設計,獨立的進程之間不會相互依賴,可以隔離,這就是Google稱作的Chrome沙盒,下面的內容是摘自Esalkin在沙盒論壇中發表的文章,對沙盒尚不了解的讀者,這是一次難得的機會。
“假設你的PC是一張紙,你運行的每個程序都寫在這張紙上,當你運行瀏覽器時,它將你訪問的每個網站都寫在這張紙上,你碰上的任何惡意代碼通常會將自己也寫到這張紙上。
傳統的隱私和反惡意軟件嘗試找出并擦除任何寫在紙上的內容,他們認為你不想在紙上寫任何東西,大多數時候,他們這樣做是正確的,但這些解決方案提出者必須先告知解決方案在紙上尋找什么內容,然后是如何安全地擦除它。
相反,沙盒就象放在紙上的一個透明層,程序在這個透明層上寫入它需要寫的任何內容,就象在真實的紙上寫一樣,當你刪除這個沙盒時,真實的紙張不會改變。”
安全專家,如Charlie Miller認為Chrome使用沙盒難以攻破的原因是:
“他們獲得沙盒模型后就很難逃出去,在操作系統和沙盒的保護下,你不能在堆棧上執行代碼。”
Chrome沙盒是如何工作的
還記得我前面提到的渲染進程嗎,實際上它們是Chrome中的沙盒進程,因為它們處于沙盒中,它們能使用的唯一資源是CPU周期和內存,渲染進程不能對磁盤進行操作,也不能顯示它自己的窗口,這些任務是由瀏覽器進程控制的。
Google Chrome使用了基于訪問令牌的Windows安全模型,一個訪問令牌是由進程所有者和進程擁有的特權信息組成的,讀取訪問令牌后,操作系統就知道該進程或沙盒可以訪問哪些資源了,下面是Google對此的解釋:
“啟動渲染進程之前,我們修改它的令牌,移除所有特權,禁用所有組,然后將這個令牌轉換成一個受限制的令牌,受限的令牌和正常令牌一樣,但訪問檢查會執行兩次,第一次使用令牌中的正常信息,第二次使用輔助組名單。
前后兩次訪問檢查都通過后,才會將資源授予該進程訪問,Google Chrome設置了輔助組名單,它只包含一個項目 – null user,因為這個用戶不會獲得任何對象的權限,對渲染進程訪問令牌的所有訪問檢查都會失敗,因此對攻擊者來說,這個進程是無用的。”
使用沙盒可以阻止攻擊者攻擊瀏覽器,惡意代碼可以在沙盒進程內運行,但它不能讀取或修改計算機上的任何文件,我再次請教了Ian Fette。
記者:你能舉一些真實世界中的例子,解釋一下使用沙盒對我們的計算機有什么保護嗎?
Fette:和其它瀏覽器一樣,我們維護了一份我們已經修復的安全漏洞列表,其中大部分漏洞因有沙盒的保護影響都降低了,例如,在我們的JavaScript引擎中曾經有一個整數溢出漏洞,如果沒有沙盒的保護,攻擊者可以利用這個漏洞在你計算機上執行任意代碼。
有了沙盒的保護后,因這個漏洞暴露的攻擊點非常少了,當瀏覽器標簽關閉后,攻擊者不能在你的計算機上安裝任何惡意軟件。
記者:我有位同事托我問你,插件或擴展是否也運行在沙盒中?
Fette:Google Chrome中的擴展是運行在沙盒中的,因為它們可以象正常網站一樣執行各種操作,它們也是用HTML,JavaScript和CSS編寫的。
目前插件尚未運行在沙盒中,但我們正準備將其移到沙盒中運行,最近我們宣布在Google Chrome中全面集成Adobe Flash就是其中的一步,以后在沙盒中運行Flash,誰也不會再說Flash不安全的壞話了。
記者:我稍微對Chrome沙盒做了一下了解,它在Windows XP以后的Windows版本中的工作機制有些不同,你能具體解釋一下嗎?還有就是,在新操作系統上使用Chrome是否有更多的好處呢?
Fette:在Windows Vista和更高的版本中,引入了一個額外的功能 – 鎖定進程,即“完整性級別”,Google Chrome沙盒在XP和Vista上應用的正常限制外,還應用了一個低完整性。
雖然從理論上說,這個功能讓Vista沙盒功能更強壯,但我們還不清楚對Chrome的真實攻擊時,它的表現究竟有何不同。但是它的確增加了一層防御,作為一個縱深防御的做法,我們應該在支持它的Windows版本中使用完整性級別。
最后的想法
談到瀏覽器設計時,我不是專家,但Charlie Miller是,如果他都不能攻破Chrome,我想大家都明白這意味著什么。我現在對他為什么不感謝Ian Fette有了更好的想法,因為Chrome太安全,讓他在Pwn2Own大賽上只能轉向蘋果的產品。最后還要感謝Google Communications的Eitan Bencuya幫我聯系上了Ian Fette。
原文出處:blogs.techrepublic.com.com/security/?p=3738
原文名:Google Chrome: The new breed of Web browser
作者:Michael Kassner
【編輯推薦】