A Security Analysis Of Browser Extensions

wyzsk發表於2020-08-19
作者: DBA · 2014/09/26 16:11

0x00 前言


瀏覽器擴充套件安全似乎討論的不多,drops上也沒有相關的文章,我只在知乎上搜到一篇關於擴充套件問題的例項文章,連結請點我。因此,我搜尋了一些關於擴充套件安全的研究報告,如下便是其中一篇,來自於康奈爾大學圖書館(跟伯克利並列的學校哦),在大批次分析擴充套件安全性和繞過靜默安裝的方法上給我們提供了非常好的思路,我認為是值得學習的,故翻譯下來分享給大家。 原文:http://arxiv.org/abs/1403.3235

0x01 摘要


瀏覽器擴充套件(通常稱為外掛或者載入項)本質上是讓開發者給瀏覽器附加功能的一小段程式碼。然而,擴充套件也是有安全代價的:使用者必須信任外掛開發者。我們來看看這種信任關係是如何被打破,從而造成惡意的擴充套件被安裝到使用者的瀏覽器。同樣,我們也看看在各種瀏覽器中擴充套件的靜默安裝方法以及瀏覽器本身是如何預防靜默安裝的。

我們透過比較多種瀏覽器的擴充套件機制,試圖建立了一種保持外掛在瀏覽器中的許可權最小化規則,然後以此為依據分析了各種各樣的外掛,以便觀察最小化許可權規則是否滿足外掛對許可權的要求。

同樣的,我們也對多種瀏覽器上的很多外掛做了調查,查明瞭可能造成攻擊的根本原因。舉個例子,如果開發者的賬號被黑,那麼此開發者開發的擴充套件中是可能被嵌入惡意程式碼的。我們還發現了許可權濫用問題,調查到很多擴充套件會申請超出本身使用的更多的許可權。

最後提供了一個解決方案讓使用者在下載擴充套件前檢查其可靠性。

0x02 介紹


瀏覽器擴充套件現在已經極度受歡迎,超過33%的Chrome瀏覽器使用者不止安裝了一個擴充套件。在正常的網站上,擴充套件(也稱外掛)是一小段能允許使用者修改瀏覽器行為的程式碼。大多數外掛使用javascript編寫,當然也有其他的指令碼。當擴充套件被如此廣泛的在桌面作業系統中使用的時候,在移動瀏覽器中,仍處在最初的階段,只有在一小部分移動瀏覽器會支援第三方擴充套件,比如Mozilla’s Firefox for Android and Dolphin 由於時間的關係,在此文中,我們僅以Google Chrome和Firefox為例,其他瀏覽器暫時不作考慮。

大多數瀏覽器在它們的擴充套件平臺中都有自己的安全模型。此文中,我們分析了多種由於擴充套件造成的或可能造成的漏洞。同時,基於測試結果驗證了這些安全模型的有效性。

0x03 安全概述


1、Google Chrome 使用三種方式保證擴充套件的安全性。

1)關鍵字隔離。擴充套件的指令碼不能直接訪問當前頁面的DOM樹,但是能複製一份,間接的訪問。頁面javascript程式碼的執行跟擴充套件javascript程式碼嚴格分離。否則,會造成大量的攻擊向量失效。  
2)許可權隔離。Chrome的擴充套件執行在兩種不同的許可權機制中。一種是內容指令碼(content-scripts),另一種是核心擴充套件指令碼(core-extension scripts)。核心擴充套件指令碼能夠直接訪問Chrome的本地API,內容指令碼則不能,但是能透過與核心擴充套件指令碼訊息通訊,間接的訪問Chrome的本地API。使得攻擊過程必須經過訊息介面的方式實現,從而加強了模型的安全性。  
3)許可權模型。擴充套件必須先宣告使用的許可權,然後瀏覽器會匹配相應的許可權模型用於限制擴充套件。所以,如果是核心擴充套件指令碼被發現了漏洞,攻擊者還是會被許可權模型限制。

2014090110151131712.png

圖1:Google Chrome的擴充套件架構圖

2、威脅。

在擴充套件中有兩種可能的攻擊方式:

1)惡意擴充套件:理論上,攻擊者是能夠在使用者的瀏覽器上安裝具有很大破壞力的惡意擴充套件的。在這之前,有少數擴充套件被查出盜取銀行密碼和其他一些安全性較高的網站的敏感資訊。儘管瀏覽器及時的遮蔽了這些擴充套件,但是威脅仍然存在。  
我們來看看惡意擴充套件的安裝機制,擴充套件可以透過其他的可執行檔案實現靜默安裝。Chrome和Firefox都提供有靜默安裝的介面,但是在安裝之前會彈出確認視窗給使用者提示。  
2)擴充套件本身的漏洞:由於開發者本身編碼不夠安全,造成擴充套件本身也是可能存在安全漏洞的。在Chrome Web商店中,有超過10000個的擴充套件,其中有一些是本身就有安全漏洞。之前一項研究表明,即使是最受歡迎的、甚至是Google公司自己開發的擴充套件,都存在過安全漏洞。這些擴充套件能被惡意的網站利用,主要包括非法處理使用者的輸入,未過濾或者未處理過的使用者輸入在擴充套件中被使用,擴充套件後設資料被攻擊能方式。  

我們沒有研究Firefox的擴充套件,因為Firefox對擴充套件沒有許可權管理。因此,所有的擴充套件都能讀寫使用者的家目錄。這導致Firefox的擴充套件許可權過大,也造成了更多的漏洞。

0x04 方式


我們使用如下操作:

1)在Chrome和Firefox下,用一種方式繞過瀏覽器對於靜默安裝的提示。  
2)分析Chrome Web 商城裡排名前10000擴充套件的程式碼。分析在某些攻擊向量和許可權濫用的情況下,擴充套件的程式碼和執行。  
3)建立一種方法,在安裝擴充套件前,觀察其在經過上面兩步操作後的結果。這能更好的幫助使用者分析,以決定是否安裝該擴充套件。我們研究結果表明,數個擴充套件會申請大於它們自身使用的許可權。

0x05 統計


我們總共從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個擴充套件申請了該許可權,卻並未使用,我們也就沒有將這些擴充套件列入統計結果。儘管它們不會造成安全問題,但在申請許可權中,這也是個不好的習慣。
如下是我們統計的資料:

2014090110162199504.png

下面是一個許可權濫用的擴充套件數量和申請的額外的許可權數量對比的樹狀分佈圖,Y座標是以10為底對數的值。

2014090110165751905.png

很多不合格的擴充套件會申請極度敏感的許可權,這樣就能很容易的被駭客和居心叵測的開發者利用這些許可權獲取使用者的賬號資訊,如瀏覽器的cookie。

3)網路層面的攻擊

我們發現有一些擴充套件在HTTP網路層面也存在漏洞,它們會透過HTTP協議載入遠端指令碼。由於技術原因,無法統計到所有產生的HTTP請求,但還是發現了146個擴充套件往外部發起過HTTP請求。我們只統計了直接包含<script>標籤的的請求,如果加上包含XHR的請求(很多擴充套件會使用),這個數字會高很多。

我們沒能是能夠用程式來統計包含XHR的請求,如果透過手動的方式統計,會是一份吃力的工作。這是由於很多請求是直接使用javascript發起,或者使用<img>標籤發起,如JQuery、MooTools等其他javacript框架。我們打算透過分析所有的URL字串,假定其為請求的地址,結果發現導致了大量的錯誤,從而否定了這個做法。

網路層面的攻擊包括中間人攻擊(MitM),如果利用這種方式,將會允許遠端程式碼執行,而當問題出在核心擴充套件部分,這意味著所有的許可權都能被濫用。舉個例子,中間人攻擊的方式能複製使用者瀏覽器的cookie值,然後傳送給攻擊者本身。這將會導致類似於“聖盃”攻擊,從而危及到使用者所有的賬號。

0x06 工作模型


1、靜默安裝

Firefox和Chrome都有靜默安裝的方式。正常情況下,這就涉及到登錄檔編輯。瀏覽器啟動時,會檢查登錄檔中相應的鍵值,當安裝擴充套件時,會彈出警告視窗。只有使用者允許了,擴充套件才會被安裝。

我們建立了一種不需要彈出警告視窗的機制,透過不同的方式對兩種瀏覽器進行測試。

1)Firefox:Firefox會在使用者的配置目錄下建立一個叫extensions.sqlite的檔案用於儲存所有已經安裝的擴充套件的列表。所以我們直接往這個檔案裡寫假的擴充套件安裝資訊。這種方法是基於Julien Sobrier早期完成的研究。這樣便很簡單的讓我們靜默安裝擴充套件,而不彈窗提示。  
2)Chrome:Chrome會在使用者的資料目錄下建立一個偏好設定檔案,用於儲存已安裝擴充套件的列表。該檔案是以JSON格式儲存,我們往裡面寫入假的擴充套件資訊,當瀏覽器啟動時,顯示我們寫入假的擴充套件已經被安裝了。  

在對靜默安裝機制上的研究表明,瀏覽器現在的方式還不夠完善,很容易就被繞過。當然,在瀏覽器對應bypass靜默安裝方面,這永遠是一個貓鼠遊戲。

2、擴充套件檢查

我們透過設定一個線上的擴充套件檢查資料庫,讓使用者使用我們的研究結果。使用者能輕鬆的找到對應擴充套件的許可權濫用和外部HTTP請求分析。我們也打算儘快釋出到網站上。

網站透過讀取manifest.json檔案來對比擴充套件實際需要的許可權和申請的許可權,分析過後將其存入資料庫中,並提供HTTP方式的介面訪問。

0x07 結論


我們成功的開發出了指令碼,實現了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.
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章