天天看點

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

本節書摘來自異步社群《xss跨站腳本攻擊剖析與防禦》一書中的第6章6.2節 flash安全模型,作者邱永華,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

6.2 flash安全模型

xss跨站腳本攻擊剖析與防禦

adobe的flash技術已經變得越來越流行了,現在該軟體不僅用于建立動畫和廣告,而且還用來開發複雜的應用程式。借助于actionscript,flash具備了與伺服器的互動功能,當然,不可避免地成為漏洞和後門程式的主攻之地,越來越多的黑客開始着力發掘flash安全漏洞,基于flash的用戶端攻擊日漸密集,包括我們熟知的xss、csrf等。

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

自flash7.0問世以來,flash的安全模型(security model)就開始運作,主要提供以下幾個方面的功能:

利用沙箱控制和阻止外部影片之間的互動和通路;

控制浏覽器和flash影片之間的互動和通路;

控制其他外部資源如音樂、文本檔案的通路;

控制對其他伺服器的通信等。

下面詳細介紹flash安全模型中幾個比較重要的概念。

6.2.1 flash安全沙箱

flash player中的一個主要安全性元件是基于沙箱(sandbox)的,沙箱對于安全性尤其重要。一般來說,如果沒有恰當的信任授權,位于兩個不同沙箱内的内容是沒有任何互動的,是以flash player的安全模型使用沙箱來定義各個flash應用程式可以通路的資料以及操作的範圍。

安全域是flash中最頂級的沙箱,安全域連結到内容的來源域名,比如在a.com下的swf檔案包含一個連結到a.com的安全域,而在b.com下的swf檔案則有一個連結到b.com的安全域。不同的安全域使得swf檔案在flash player中播放時運作在自身的沙箱下,如圖6-8所示。

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

如果兩個swf檔案分别處于不同的安全域下,則任何一個swf中的資料都不可以被另一個swf擷取。如圖6-8所示,a.com下a1.swf檔案隻能與同域下的a2.swf檔案進行通信;同樣的,b.com域下的b1.swf檔案隻能和b2.swf檔案通信,如果嘗試擷取其他域中swf檔案的資料将會産生安全錯誤。

如果想要讓兩個處于不同安全域内的swf檔案進行通信,可以通過信任授權來實作。通過信任授權後,某個安全域内的檔案即可擷取另一個域内的檔案資料。

在actionscript語言中,swf檔案的信任授權是通過security.allowdomain()方法來設定的。

在下面的例子中,一個子swf檔案調用allowdomain()函數來允許父swf檔案的通路:

由于這種方式會為所有域中的swf檔案授予通路、執行調用的swf檔案腳本的權限。也就是說,可以通過actionscript來通路檔案中的資料,這是很危險的一件事,是以請謹慎使用通配符“*”。

另外,由于非swf格式的檔案不能調用allowdomain代碼,是以這類檔案的信任機制在flash中有不一樣的處理方法——應用跨域政策(cross domain policy)檔案。

6.2.2 cross domain policy

大家都知道,javascript的同源政策是web應用安全的核心部分,其作用是防止某個文檔或腳本從多個不同源進行裝載,而flash的跨域政策恰恰繼承自javascript,是以它們非常相似。理論上來說,由于flash的安全政策實作在flash應用程式與網站的邊界之間,是以更容易被繞過。

預設環境下,運作在web浏覽器下的flash不允許通路其他域的資料,如下:

<a href="http://playsec.com/dir/movie1.swf">http://playsec.com/dir/movie1.swf</a>

<a href="http://playsec.com:8080/movie4.swf">http://playsec.com:8080/movie4.swf</a>

<a href="http://www.playsec.com/movie5.swf">http://www.playsec.com/movie5.swf</a>

可見,flash的通路政策無疑和javascript的同源政策如出一轍。然而為了更好的使用者體驗及全面的功能需求,經常需要跨域擷取資料,而唯一可以讓flash執行跨域操作的方式是跨域政策檔案。

和allowdomain類似,crossdomain.xml檔案定義了一組可以被flash player加載的安全網站域名,并限制flash是否可以跨域讀寫資料以及允許從什麼地方跨域讀寫資料。比如,位于www.playsec.com域下的swf檔案要通路www.target.com的檔案時,swf首先會檢查www.target.com伺服器目錄下是否有crossdomain.xml檔案,如果沒有,則通路不成功;若crossdomain.xml檔案存在,且設定了允許www.playsec.com域的通路,那麼通信正常。是以要使flash可以跨域通路和傳輸資料,其關鍵在于crossdomain.xml檔案。

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

以上示例表示,www.playsec.com允許來自“*.target.com”、“www.test.org”和“123.202.0.1”的跨域請求。

雖然crossdomain.xml檔案的格式非常簡單,但有一點要注意,該檔案必須嚴格遵守xml文法。檔案的根節點是cross-domain-policy,其下包含一個或多個allow-access-from節點。該節點的domain的屬性值為允許通路的域名,域名可以是确切的 ip 位址,也可以是一個确切的域。

此外,可以使用通配符來設定允許通路來自任何域的文檔,具體代碼如下:

使用通配符“*”允許所有域的通路等同于:使用者可能接觸到的所有處于該域下的資料都有可能被任意swf檔案擷取,有可能會導緻非常嚴重的後果。

除了allow-access-from節點,根節點下還包含另外3個子節點:site-control、allow-access-from -identity、allow-http-request-headers-from。

各自的作用分别如下:

site-control:通過檢查該節點的屬性值,确認是否可以允許加載其他政策檔案

allow-access-from-identity:配置跨域通路政策為允許有特定證書的來源跨域通路本域上的資源

allow-http-request-headers-from:授權第三方域的flash向本域發送使用者定義的http頭

flash可以加載其他的跨域政策檔案,不過在此之前會先檢查主目錄的crossdomain.xml檔案來判斷是否接受自定義政策檔案。預設情況下,flash不加載除主政策檔案之外的其他政策檔案,但是設定了permitted-cross-domain-policies的by-content-type相關屬性後,黑客就能通過上傳檔案來定義自己政策檔案。

如果讀者想獲得更多詳細的跨域政策檔案格式資訊,可以參考adobe官方釋出的說明書adobe cross domain policy file specification,如圖6-10所示。

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

下載下傳位址如下:

<a href="http://learn.adobe.com/wiki/download/attachments/64389123/crossdomain_policyfile_specification.pdf?version=1">http://learn.adobe.com/wiki/download/attachments/64389123/crossdomain_policyfile_specification.pdf?version=1</a>

6.2.3 設定管理器

在本地硬碟運作的swf檔案也有自己的安全域,可以通過flash player 的裝置管理器來設定。設定管理器允許使用者為用戶端計算機上執行的flash應用程式指定各種安全性、隐私和資源使用設定。

例如,使用者可以控制應用程式對網絡錄影機等標明裝置的通路權等。而且這些設定是持久的,并由使用者自由控制,其中的設定适用于包含swf或flv内容的所有web 站點。

圖6-11和圖6-12所示分别為設定管理器不同的功能操作界面。

《XSS跨站腳本攻擊剖析與防禦》—第6章6.2節 Flash安全模型

通過flash player設定管理器,可以管理全局保密性設定、存儲設定、安全設定和自動通知設定。

更多有關裝置管理器的詳細内容可以參考下面的網址:

<a href="http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager.html">http://www.macromedia.com/support/documentation/cn/flashplayer/help/settings_manager.html</a>

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀