Web 2.0應用安全深入解析
◆Web 2.0 應用安全解決方案
什么是 Web2.0 ?它包含了哪些技術?這些技術的產生又對網絡應用安全帶來了哪些隱患和風險?本文從這些問題著手,重點探討 Web2.0 時代的技術特征和應用安全,并通過結合明鑒Web應用弱點掃描器安全解決方案,為大家提供面對新時代、新問題的應用安全應對思路。
一、什么是Web2.0?
Web 2.0,是由 O'Reilly 公司在 2003 年造的一個詞,2004 年召開 Web 2.0 大會之后,這個詞就流行起來,意指基于 Web 的下一代社區和托管服務,比如社會網絡、維基百科、大眾分類等等,幫助 Web 用戶協作和分享。
二、Web 2.0 成功的核心模式
Web 2.0 和過去的 Web 1.0 之間有什么不同?討論這個話題,最權威的莫過于 Tim O'Reilly 所寫的"什么是 Web 2.0?",我在這里拾人牙慧,概述一下我的理解。Web 的演變是持續進行的,Web 就像是有生命的實體,在不斷生長,所以當我們說 Web 2.0 和 Web 1.0 之間的差別時,是一個相對靜態的階段性觀點,而不是絕對的。如前所述,Web 2.0 是指互聯網泡沫之后,人們使用 Web 的方式的巨大變化,開發人員、最終用戶和商家,都在不斷地實踐新的方法。幾年過去,他們取得了很多了不起的成果,締造了很多成功的 Web 2.0 公司,從 Google、Salesforce、MySpace、Flickr、Delicious、YouTube、Linkedin 到今天十分火爆的 Facebook,具有 Web 2.0 特征的公司,風起云涌。如何定義 Web 2.0 不重要,重要的是 Web 2.0 背后的模式和原則,這些模式對于 Web 2.0 的成功至關重要。
Web 2.0 具有八個核心模式,它們分別是:
群眾智慧(Collective Intelligence)
建立一個參與架構,借助網絡效應和算法,使得軟件隨著使用的人越來越多而變得越來越好。
數據,下一個"Intel Inside"
利用獨特、難以復制的數據源,成為這個時代的"Intel Inside",其中,數據變得跟功能一樣重要,成為核心競爭能力。
"復合"創新
建立一個平臺,通過數據和服務的組合,來創造新的市場和機會。
豐富用戶體驗
超越傳統的 Web 頁面模式,讓在線應用擁有桌面應用一樣的豐富用戶體驗。
支持多種設備
支持各種連接到因特網的設備,為用戶提供無所不在、無縫的在線體驗。
軟件即服務(Software as a Services,SaaS),和永久試驗版(Perpetual Beta)
改變了傳統軟件開發和使用的模式,轉向永久在線、持續更新、軟件即服務的模式。
利用長尾
借助因特網帶來的接觸極大規模客戶的能力以及極低成本的營銷方式,來獲得細分的"利基"(niche)市場的利潤。
輕量級模型和低成本優勢的可擴充能力
利用輕量級的商業模型和軟件開發模式,來快速、廉價地構造產品和服務。
以上幾個模式,分別關注不同方面,但是它們由如下幾個 Web 2.0 的特質而相互關聯起來:
大規模互連
今天我們從過去一對多的發布和通信,轉向多對多的連接,網絡效應使得邊際同核心一樣重要,顛覆著舊的通信、發布、分發和聚合模式。
去中心化
這種大規模互聯,也顛覆著傳統的控制和權力結構,帶來更大程度的去中心化。從全球信息流動,營銷,到新產品設計,這種發自底層的草根力量, 都在"叫板"來自權力階層的聲音。系統更多地從通過邊沿的拉動來生長,而不是借助核心的推動向外生長。
以用戶為中心
網絡效應給予用戶前所未有的力量,他們參與、對話、協作,最終產生巨大的影響。消費者可以說話、交流和討論他們的經驗,他們擁有控制權,積極主動地影響著產品的方向,同時也對那些積極應對的公司報以忠誠和口口相傳的口碑營銷。#p#
開放
這種開放性,是以因特網的開放技術標準為基礎的,但很快地演進到一個由開放應用所構成的生態系統,這些應用建構在開放數據、開放 API 和可重用的組件之上。開放,還意味著超越技術層次的更大程度的透明性,如公司對外溝通,共享知識產權、產品的開發過程等。
輕量級
軟件由小團隊使用敏捷方法設計和開發,使用簡單數據格式和協議,采用運行開銷小的平臺和框架,應用和服務部署簡易,商業上力圖保持低的投資和成本,營銷上利用簡單的消費者之間的口口相傳來形成病毒式傳播。
自然浮現
不是依靠預先完整定義好的應用結構,而是讓應用的結構和行為隨著用戶的實際使用而靈活適應和自然演變;成功來自合作,而不是控制。
這些特質,Web 2.0 的應用體現得越來越多,由這樣的應用所構成的應用生態系統,具備了將大規模個性化的信息和服務帶給極大規模普通人的潛力。
三、Web2.0 部分技術淺析
Web2.0 中涉及了很多名詞和術語,比如 Tags、Blogs、Ajax、Flex、MalWare、Wiki、RSS、Social Networking、Podcast、Mushup等等。由于篇幅所限,我們僅在本章節分析 Ajax、Flex。
3.1、Ajax 和 Web2.0
Ajax 全稱為"Asynchronous JavaScript and XML"(異步 JavaScript 和 XML),是一種創建交互式網頁應用的網頁開發技術。在 Web1.0 時代中,客戶端瀏覽器和服務器之間的通訊是同步的,也就是說,當我們在 Web 頁面上填寫表單(例如使用搜索功能),請求就會發送到服務器上,經過處理后,服務器將完整的結果頁面再次發送回來。可以看出,發送請求的前后兩個頁面,很多內容是完全重復的。這種做法的反復執行,極大的浪費了網絡帶寬,也浪費了使用者很多等待多余信息的寶貴時間。
Ajax 應用則可以和服務器通訊更改過的內容。它借助于客戶端的 JavaScript 處理來自服務器的響應。同時,還有很多任務是由客戶端本身來完成。因此,在網絡上的數據交換更少、Web 服務器的處理時間更短。用戶感覺到的是更快的請求響應速度。
由于 Ajax 良好的用戶體驗,被認為是 Web2.0 的典型技術特征,已經在很多成熟應用中被廣泛采納,如大家熟悉的 Google 地圖、Google 搜索建議、Gmail 等。要了解更多 Ajax 信息,請訪問 http://www.openajax.org/index.php
3.2、Ajax 技術特征
3.2.1 Ajax 動態特征
Ajax 是構建在 DHTML(動態 HTML)技術之上的,這包括:
JavaScript:在 Web 應用客戶端廣泛使用的腳本語言;
DOM:Document Object Model,文檔對象模型,用來代表 HTML 或 XML 文檔的標準對象模型,當前瀏覽器都支持 DOM 并且允許 JavaScript 代碼使用 DOM 來動態修改 HTML 內容;
CSS:Cascading Style Sheets,級聯樣式表,是一種用來描述 HTML 文檔展現的樣式表語言,JavaScript 可以在訪問 Web 頁面時動態修改 CSS。通過這些動態技術,在 Ajax 應用中,客戶端 JavaScript 通過動態修改 DOM 樹結構和 CSS,實現了動態的更新 Web 頁面。
3.2.2 Ajax 異步通訊特征
前面提到,Ajax 可以和服務器交換更改過的、而非整個頁面的內容。這種異步通訊,是通過如下技術實現的:
JSON:JavaScript Object Notation,是一種基于文本(類似于 XML)、輕量級的數據交換格式。在 Web 應用中,可以使用 JSON 傳輸字符串、數字、二進制,或是數組、對象等等。由于它格式簡單、容易理解、容易解析,是目前在 Ajax 應用中最為靈活的數據交換解決方案。
XMLHttpRequest 對象:是 XMLHTTP API 函數集的一個對象。該函數集在 Web 瀏覽器和服務器之間收發 XML 或其它數據。一個由 XMLHttpRequest 對象發送的 HTTP 請求并不要求頁面中擁有或返回一個< form >元素,這意味著該對象的 send() 方法可以立即返回,從而讓 Web 頁面上的其它 HTML/JavaScript 元素繼續由瀏覽器處理,而由服務器處理該 HTTP 請求并發送響應。通過這樣的機制,實現動態更新頁面部分元素,而無需傳遞整個頁面的效果。它是當今 Ajax 和 Web2.0 應用的技術基礎。#p#
3.2.3 Ajax 非同源調用特征
在介紹 Ajax 調用之前,我們先來看看瀏覽器的"同源安全模型"。同源模型是客戶端腳本運行的重要安全度量標準,它指的是來自于同一個"源"的腳本可以互相訪問其方法和 屬性,而拒絕非同"源"的訪問。該模型的精髓是:它認為從任何站點裝載的內容是不安全的,當被瀏覽器不太信任的腳本運行時,它們應該只被允許訪問來自同一 站點的資源,而不是那些來自其它站點可能懷有惡意的資源。這里"源"包含了 Domain、Protocol 和 Port。當采用同源策略時,來自于 http://www.example.com/dir/page.html 頁面的腳本 A,可以訪問和使用來自 http://www.example.com/dir2/other.html 頁面的腳本 B,因為兩者在 Domain(www.example.com)、Protocol(http 協議)和 Port(默認為 80)上是一樣的,被認為是同源;而腳本 A 不能訪問 http://www.example.com:81/dir2/other.html 頁面的腳本 C,因為他們不是同一個 Port,被認為非同源。
為什么要有同源的限制呢?這是瀏覽器提供的最為基礎的安全保障之一。如果放開同源限制,黑客就可以通過引誘用戶訪問嵌入在自己惡意站點上的正 常應用(如用 Iframe 將銀行登錄頁面嵌入到黑客的惡意應用中),當用戶訪問該應用時,攻擊腳本就可以在不同源之間互訪,竊取用戶登錄信息,或者跟蹤用戶的各種操作。
3.3 Ajax 應用安全隱患
雖然 Ajax 技術極大地推動了 Web2.0(如 Mushup 應用)的發展,但是由于上述討論的 Ajax 特征(動態、異步、突破同源限制),給應用安全帶來了隱患。
3.3.1 Ajax 和 XSS(跨站腳本攻擊)
XSS 是目前發生頻率最高的網絡攻擊手段之一,它是通過引誘用戶執行惡意的 JavaScript 腳本(如引誘用戶點擊包含惡意腳本的鏈接),來達到竊取用戶信息或者實現其它惡意行為的目的。正是由于 Web2.0 鼓勵信息分享、信息交互和協作,用戶就有了更多的機會去看、去修改他人的信息,比如通過 Wiki、Blog 或 SNS(Social Networking Service),從而創造了更多的 XSS 攻擊機會。Web1.0 時代的 XSS,是作為服務器端 Web 應用安全隱患被廣泛注意,由于 Ajax,它已經蔓延到客戶端。現在的瀏覽器允許在 Web 頁面運行時主動插入 HTML 代碼(比如使用 innerHTML 屬性),如果這些代碼中包含惡意的 JavaScript,則會被瀏覽器立刻執行,帶來安全隱患。
3.3.2 Ajax 和 CSRF(跨站請求偽造)
CSRF 中,攻擊者在用戶完全未察覺的情況下,代表用戶發送請求。這可以通過引誘用戶點擊鏈接,或是將請求嵌入到 Image Tag 等 HTML 標記中,強迫用戶發送。這里列舉一個攻擊場景:攻擊者向用戶發送一封電子郵件,郵件中包含一個銀行鏈接請求,請求的目的是從用戶的銀行賬戶向攻擊者賬戶進 行轉賬,用戶使用該鏈接進入銀行網站并進行了登錄操作,該請求就會偕同用戶 Cookie 信息自動發送給銀行。如果銀行網站僅把 Cookie 值當做驗明用戶身份的唯一手段,那么 Web 應用就認為該請求是合法的,轉賬操作立刻被執行。
在 Ajax 應用中,客戶端和服務器的交互是通過 HTTP 協議實現的,如果站點安全保護措施不夠強健,一旦 CSRF 成功,將會帶來一系列隱患,如利用 Web-Mail 服務發送郵件、代表用戶在 Blog 上寫注釋、在 SNS 中修改用戶信息等等。
3.3.3 Ajax 和 DoS(拒絕服務攻擊)
DoS 是通過某種手段讓服務器資源耗盡,阻斷正常用戶訪問的攻擊方法。比如說向服務器提交大量請求,使服務器負荷過重。用戶瀏覽器如果可以執行第三方 JavaScript,就會帶來 DoS 攻擊的可能性,因為第三方 JavaScript 邏輯中,很可能包含大量導致服務器資源耗盡的循環程序,所以允許大量 JavaScript 使用的 Ajax 應用中,DoS 攻擊概率大大提高。
3.3.4 其它安全隱患
Mushup 應用通常是將任意第三方的 mushup 組件組合在一起,如果攻擊者向 Mushup 應用提供了惡意的 mushup 組件,同時該應用沒有提供足夠的安全保護的話,用戶和整個 Mushup 應用就面臨著巨大的安全隱患。因為一個惡意的 mashup 組件可以向整個 Mushup 應用中注入惡意代碼,從而觸發多種攻擊行為,包括 XSS、CSRF、DoS。如果該 Mushup 應用還提供服務器端的 Ajax 代理服務,由于 Ajax 代理突破了同源限制,惡意的客戶端 mushup 組件就可以將用戶的隱私發送到外部站點。
3.4 Flash/Flex 和 Web2.0
互聯網從 1996 年引入了 Flash 技術后,通過動畫和交互,極大的改變了 Web 頁面的用戶體驗。2004 年 3 月,Macromedia 公司基于其專有的 Macromedia Flash 平臺,發布了 Flex。它涵蓋了支持 RIA(Rich Internet Applications)開發和部署的一系列技術。在 Web2.0 時代,越來越多的開發者使用 Flex 技術開發 Flash 應用,由此引入的安全隱患也不容忽視。#p#
3.5 Flash 應用安全隱患
由于 Flash 支持全局變量,因此帶來了很多安全隱患。只要攻擊者控制了全局變量,那么他就可以實施多種攻擊行為。
3.5.1 Cross-Site Flashing(跨站 Flash 攻擊)
和 XSS 原理相似,不過 XSF 是通過向網站注入惡意的 Flash 程序來實施攻擊。 由于 Web2.0 時代的應用復雜性(如 Mushup 應用),注入的惡意 Flash 不但可以攻擊同源內的應用,還可能在非同源的各個組件中傳播。
3.5.2 Cross-Site Scripting through Flash(通過 Flash 進行跨站腳本攻擊)
該方法使用易受感染的 Flash 文件進行典型的 XSS 攻擊。和 XSF 很相似,攻擊的發生同樣來源于對全局變量的引用,如將全局變量作為裝入函數(如 getURL())的參數
攻擊者使用惡意腳本,可能執行如下操作:
1、將用戶的 Cookie 值發送給攻擊者;
2、將用戶的共享 Flash 對象發送給攻擊者;
3、將可通過 DOM(如 URL、表單字段等)訪問的信息發送給攻擊者。
四、Web2.0 安全總結
從上面章節的分析可以看出,Web2.0 時代的應用安全,有著明顯的特征,可以總結為如下兩個方面:
由于新技術的引入,帶來了新的安全隱患,如 XSF 攻擊等;
很多 Web1.0 時代的安全隱患,出現了新的傳播渠道,如 Ajax 應用,就提高了 XSS、CSRF、DoS等攻擊的機會。
五、明鑒Web應用弱點掃描器如何應對 Web2.0 ?
Web2.0 新安全隱患應對策略
考慮到 Web2.0 時代的應用安全特點,明鑒Web應用弱點掃描器(Webscan)應用安全解決方案不僅加強了對原有 Web 安全隱患的診斷能力,還提供了針對新安全隱患的診斷和防御功能。
5.1 Flash 安全防御
WebScan 5.0(WebScan 標準版)提供了對 Flash 安全隱患的完整分析和測試。這包括:
1、將 Web 應用中的 Flash 代碼解析為文本數據,從中收集鏈接,進行安全隱患分析;
2、播放應用中的 Flash 文件,動態發現僅通過解析發現不了的鏈接;
3、測試由 Adobe? Flex 應用程序發送的后臺 AMF 協議消息。
圖 1. 是在配置WebScan 掃描某 Web 應用時的 Flash 選項,用戶可以根據需要選擇如何處理應用中的 Flash。
圖1.Webscan5.0中Flash配置選項
Webscan5.0提供多種專門針對 Flash 的測試用例,如允許Flash文件與任何HTML頁面通信、允許訪問任何域的Flash文件、允許Flash文件調用所有網絡API、Flash文件源代碼泄露等等。如圖 2。
圖2.Webscan5.0中Flash測試用例
5.2增強的 JavaScript 引擎
Web2.0 使 JavaScript 得到了充分的應用。WebScan 可以分析 Web 應用中的 JavaScript,并且在新版本中,通過不斷改進對內存的占用,提高 JavaScript 分析的性能。
【編輯推薦】