瀏覽器擴展安全似乎討論的不多,drops上也沒有相關的文章,我只在知乎上搜到一篇關于擴展問題的實例文章,鏈接請點我。因此,我搜索了一些關于擴展安全的研究報告,如下便是其中一篇,來自于康奈爾大學圖書館(跟伯克利并列的學校哦),在大批量分析擴展安全性和繞過靜默安裝的方法上給我們提供了非常好的思路,我認為是值得學習的,故翻譯下來分享給大家。 原文:http://arxiv.org/abs/1403.3235
瀏覽器擴展(通常稱為插件或者加載項)本質上是讓開發者給瀏覽器附加功能的一小段代碼。然而,擴展也是有安全代價的:用戶必須信任插件開發者。我們來看看這種信任關系是如何被打破,從而造成惡意的擴展被安裝到用戶的瀏覽器。同樣,我們也看看在各種瀏覽器中擴展的靜默安裝方法以及瀏覽器本身是如何預防靜默安裝的。
我們通過比較多種瀏覽器的擴展機制,試圖創建了一種保持插件在瀏覽器中的權限最小化規則,然后以此為依據分析了各種各樣的插件,以便觀察最小化權限規則是否滿足插件對權限的要求。
同樣的,我們也對多種瀏覽器上的很多插件做了調查,查明了可能造成攻擊的根本原因。舉個例子,如果開發者的賬號被黑,那么此開發者開發的擴展中是可能被嵌入惡意代碼的。我們還發現了權限濫用問題,調查到很多擴展會申請超出本身使用的更多的權限。
最后提供了一個解決方案讓用戶在下載擴展前檢查其可靠性。
瀏覽器擴展現在已經極度受歡迎,超過33%的Chrome瀏覽器使用者不止安裝了一個擴展。在正常的網站上,擴展(也稱插件)是一小段能允許用戶修改瀏覽器行為的代碼。大多數插件使用javascript編寫,當然也有其他的腳本。當擴展被如此廣泛的在桌面操作系統中使用的時候,在移動瀏覽器中,仍處在最初的階段,只有在一小部分移動瀏覽器會支持第三方擴展,比如Mozilla’s Firefox for Android and Dolphin 由于時間的關系,在此文中,我們僅以Google Chrome和Firefox為例,其他瀏覽器暫時不作考慮。
大多數瀏覽器在它們的擴展平臺中都有自己的安全模型。此文中,我們分析了多種由于擴展造成的或可能造成的漏洞。同時,基于測試結果驗證了這些安全模型的有效性。
1、Google Chrome 使用三種方式保證擴展的安全性。
1)關鍵字隔離。擴展的腳本不能直接訪問當前頁面的DOM樹,但是能復制一份,間接的訪問。頁面javascript代碼的執行跟擴展javascript代碼嚴格分離。否則,會造成大量的攻擊向量失效。
2)權限隔離。Chrome的擴展運行在兩種不同的權限機制中。一種是內容腳本(content-scripts),另一種是核心擴展腳本(core-extension scripts)。核心擴展腳本能夠直接訪問Chrome的本地API,內容腳本則不能,但是能通過與核心擴展腳本消息通信,間接的訪問Chrome的本地API。使得攻擊過程必須經過消息接口的方式實現,從而加強了模型的安全性。
3)權限模型。擴展必須先聲明使用的權限,然后瀏覽器會匹配相應的權限模型用于限制擴展。所以,如果是核心擴展腳本被發現了漏洞,攻擊者還是會被權限模型限制。
圖1:Google Chrome的擴展架構圖
2、威脅。
在擴展中有兩種可能的攻擊方式:
1)惡意擴展:理論上,攻擊者是能夠在用戶的瀏覽器上安裝具有很大破壞力的惡意擴展的。在這之前,有少數擴展被查出盜取銀行密碼和其他一些安全性較高的網站的敏感信息。盡管瀏覽器及時的屏蔽了這些擴展,但是威脅仍然存在。
我們來看看惡意擴展的安裝機制,擴展可以通過其他的可執行文件實現靜默安裝。Chrome和Firefox都提供有靜默安裝的接口,但是在安裝之前會彈出確認窗口給用戶提示。
2)擴展本身的漏洞:由于開發者本身編碼不夠安全,造成擴展本身也是可能存在安全漏洞的。在Chrome Web商店中,有超過10000個的擴展,其中有一些是本身就有安全漏洞。之前一項研究表明,即使是最受歡迎的、甚至是Google公司自己開發的擴展,都存在過安全漏洞。這些擴展能被惡意的網站利用,主要包括非法處理用戶的輸入,未過濾或者未處理過的用戶輸入在擴展中被使用,擴展元數據被攻擊能方式。
我們沒有研究Firefox的擴展,因為Firefox對擴展沒有權限管理。因此,所有的擴展都能讀寫用戶的家目錄。這導致Firefox的擴展權限過大,也造成了更多的漏洞。
我們使用如下操作:
1)在Chrome和Firefox下,用一種方式繞過瀏覽器對于靜默安裝的提示。
2)分析Chrome Web 商城里排名前10000擴展的代碼。分析在某些攻擊向量和權限濫用的情況下,擴展的代碼和執行。
3)創建一種方法,在安裝擴展前,觀察其在經過上面兩步操作后的結果。這能更好的幫助用戶分析,以決定是否安裝該擴展。我們研究結果表明,數個擴展會申請大于它們自身使用的權限。
我們總共從Chrome Web 商店下載了10047個擴展。它們以受歡迎的程度排序,因此能夠代表擴展的使用頻率是最高的。
1)內容安全策略(Content-Security Policy)
內容安全策略作為一個新特性被引入到Chrome的第18個版本,通過其嚴格的策略,阻止了大多數如上我們討論的漏洞情況。我們發現有4079個擴展已經升級它的manifest到第二版,從而強制使內容安全策略得以被應用。盡管這些擴展仍然存在權限濫用和自身漏洞,但是也比其他未應用該策略的擴展要更加安全。
在10047個擴展中,我們成功掃描的有9558個,其他的因為錯誤的manifest文件和部分文件丟失未能成功分析。
2)權限濫用
通過解析manifest.json文件,我們掃描了這些擴展申請的權限。該方法來自Google Chrome開發者網站頁面:“所有的擴展,瀏覽器應用程序和主題都有一個json格式的manifest文件,以manifest.l命名,或者missing.json,用于提供擴展的重要信息。”
然后跟擴展實際使用的權限匹配。Chrome的安全策略僅允許‘backgroud-scripts’直接訪問核心的API。通過解析所有文件源碼中的‘backgroud-scripts’段,分析出擴展需要實際需要的權限。
我們發現這些擴展中,超過一半的都申請了大于實際使用必須的權限。其中大多數多申請了一到兩個額外的權限,這可以歸結于開發者的水平和不嚴謹。另外有192個擴展多申請了4個或更多的權限,體現出較為嚴重的安全問題。
在統計中,我們沒有包含那些不能被濫用的權限。比如,通知功能的權限,能被允許使用HTML5的通知接口,但是無法被濫用。有超過300個擴展申請了該權限,卻并未使用,我們也就沒有將這些擴展列入統計結果。盡管它們不會造成安全問題,但在申請權限中,這也是個不好的習慣。
如下是我們統計的數據:
下面是一個權限濫用的擴展數量和申請的額外的權限數量對比的樹狀分布圖,Y坐標是以10為底對數的值。
很多不合格的擴展會申請極度敏感的權限,這樣就能很容易的被黑客和居心叵測的開發者利用這些權限獲取用戶的賬號信息,如瀏覽器的cookie。
3)網絡層面的攻擊
我們發現有一些擴展在HTTP網絡層面也存在漏洞,它們會通過HTTP協議加載遠程腳本。由于技術原因,無法統計到所有產生的HTTP請求,但還是發現了146個擴展往外部發起過HTTP請求。我們只統計了直接包含<script>
標簽的的請求,如果加上包含XHR的請求(很多擴展會使用),這個數字會高很多。
我們沒能是能夠用程序來統計包含XHR的請求,如果通過手動的方式統計,會是一份吃力的工作。這是由于很多請求是直接使用javascript發起,或者使用<img>
標簽發起,如JQuery、MooTools等其他javacript框架。我們打算通過分析所有的URL字符串,假定其為請求的地址,結果發現導致了大量的錯誤,從而否定了這個做法。
網絡層面的攻擊包括中間人攻擊(MitM),如果利用這種方式,將會允許遠程代碼執行,而當問題出在核心擴展部分,這意味著所有的權限都能被濫用。舉個例子,中間人攻擊的方式能復制用戶瀏覽器的cookie值,然后發送給攻擊者本身。這將會導致類似于“圣杯”攻擊,從而危及到用戶所有的賬號。
Firefox和Chrome都有靜默安裝的方式。正常情況下,這就涉及到注冊表編輯。瀏覽器啟動時,會檢查注冊表中相應的鍵值,當安裝擴展時,會彈出警告窗口。只有用戶允許了,擴展才會被安裝。
我們創建了一種不需要彈出警告窗口的機制,通過不同的方式對兩種瀏覽器進行測試。
1)Firefox:Firefox會在用戶的配置目錄下建立一個叫extensions.sqlite的文件用于保存所有已經安裝的擴展的列表。所以我們直接往這個文件里寫假的擴展安裝信息。這種方法是基于Julien Sobrier早期完成的研究。這樣便很簡單的讓我們靜默安裝擴展,而不彈窗提示。
2)Chrome:Chrome會在用戶的數據目錄下建立一個偏好設置文件,用于保存已安裝擴展的列表。該文件是以JSON格式保存,我們往里面寫入假的擴展信息,當瀏覽器啟動時,顯示我們寫入假的擴展已經被安裝了。
在對靜默安裝機制上的研究表明,瀏覽器現在的方式還不夠完善,很容易就被繞過。當然,在瀏覽器對應bypass靜默安裝方面,這永遠是一個貓鼠游戲。
2、擴展檢查
我們通過設置一個在線的擴展檢查數據庫,讓用戶使用我們的研究結果。用戶能輕松的找到對應擴展的權限濫用和外部HTTP請求分析。我們也打算盡快發布到網站上。
網站通過讀取manifest.json文件來對比擴展實際需要的權限和申請的權限,分析過后將其存入數據庫中,并提供HTTP方式的接口訪問。
我們成功的開發出了腳本,實現了Chrome和Firefox擴展的無警告靜默安裝,證明了現在的防范機制還不夠完善。
在分析的擴展中,大約有50%的存在權限濫用的情況。雖然很難給出準確的數字,但是還是可以得出結論,有相當一部分的擴展會因為權限濫用的情況而受到攻擊。我們也認識到,內容安全策略(Content-Security Policy)在保證擴展安全中的確是一個高效的方案。Google Chrome Web商店也會因為該策略的實行更加安全。
最后,附上這個項目的github上的源碼地址:https://github.com/captn3m0/nullcon2014
[1]: Carlini, Nicholas, Adrienne Porter Felt, and David Wagner. “An evaluation of the google chrome extension security architecture.“ Proceedings of the 21st USENIX Conference on Security. 2012.
[2]: Sobrier, Julien. “How to install silently malicious extensions for Firefox”ZScaler Blog. 25 Sep. 2012.
[3]: Aaron Boodman, “A Year of Extensions”. The Chromium Blog. 9 Dec 2010.
[4]: Siegler, M. G. “Chrome Appears To Have Hit 10,000 Extensions, Inching Closer To Firefox.“ TechCrunch. N.p., 10 Dec. 2010.