1.介紹
Ajax由于其良好的交互性,在去年非常引人注目。Google Suggest 和 Google Maps [ref 1]就是一些Ajax早期的著名應(yīng)用。目前,企業(yè)正在考慮他們怎么也能利用Ajax,web研發(fā)者在學(xué)習(xí)他,安全專家在想怎么使他變得安全,黑客們在思考怎么入侵。所有能提高服務(wù)器吞吐量,能產(chǎn)生更多的動態(tài)頁面?zhèn)鬏,而且能為最終用戶提供更加豐富的web應(yīng)用的技術(shù)都必然在這個領(lǐng)域出現(xiàn)。
Ajax的下一步計劃稱為”Web 2.0”。這篇文章的目的是介紹一些關(guān)于現(xiàn)代Ajax web技術(shù)的安全建議。盡管Ajax的應(yīng)用難于測試,安全專家已擁有大多數(shù)所需要的有關(guān)方法和工具。作者將討論如今的趨勢是否需要告別完全的網(wǎng)絡(luò)更新,使用Ajax也意味著我們將面臨一些新的安全問題。我們將從Ajax技術(shù)簡要介紹開始,接著討論使用Ajax技術(shù)應(yīng)用帶來的安全沖擊。
2.初識Ajax
正常的web應(yīng)用程式在同步模式下工作,一個web請求之后,一個響應(yīng)在表示層引起一些動作。例如,點擊鏈接或提交按鈕向web服務(wù)器產(chǎn)生一個帶有相應(yīng)參數(shù)的請求。傳統(tǒng)的” click and wait”方式限制了應(yīng)用程式的交互性。Ajax(Asychronous Javascript and XML)技術(shù)的使用緩解了這個問題。文中,我們將Ajax定義為向web服務(wù)器產(chǎn)生異步調(diào)用而不引起網(wǎng)頁完全更新的方法。這種交互性的通過三種不同的組件實現(xiàn):客戶端腳本語言,XmlHttpRequest (XHR)對象和XML。
讓我簡短地分別介紹一下這些組件。在請求響應(yīng)中,客戶端腳本語言被用來初始化服務(wù)器調(diào)用和程式的存取,及更新客戶瀏覽器的DOM?蛻舳似毡槭褂肑avaScript,由于他被知名瀏覽器普遍的采用。第二個組件是XHR對象,他是最重要的部分。JavaScript這類語言使用XHR對象在場景后面向web服務(wù)器發(fā)送請求,使用HTTP作為傳輸中介。接著是第三個組件,他的使用是必要的:XML是被交換信息的數(shù)據(jù)格式。
非常多站點使用JSON(JavaScript Object Notation)代替XML,因為其更加容易解析不必那么多管理的費用。使用JavaScript解析JSON,只需要簡單的把他傳給eval()函數(shù)。另一方面,有人可能使用XPath解析返回的XML。同樣的,外面更有非常多”Ajax 站點”既不使用XML,也不使用JSON,而是僅僅發(fā)送無格式的動態(tài)插入到網(wǎng)頁的舊HTML碎片。
因此,Ajax不是個新的技術(shù)商標(biāo),而是現(xiàn)存技術(shù)的聯(lián)合應(yīng)用,推動了web應(yīng)用程式高度交互性的發(fā)展。實際上,所有這些組件已出現(xiàn)好些年了,隨Internet Explorer 5.0的發(fā)布而顯著起來。研發(fā)者創(chuàng)建了Ajax許多的應(yīng)用,諸如”提示”文本框(象Google Suggest)和自動更新數(shù)據(jù)列表。所有的XHR請求仍然是由典型的服務(wù)器端框架執(zhí)行,例如標(biāo)準(zhǔn)的選擇象J2EE,.NET和PHP。下面的Figure 1. 是Ajax應(yīng)用程式的異步特性圖例:
圖 1.Ajax異步順序
3. Ajax安全應(yīng)用
目前我們已回顧了Ajax的基礎(chǔ),讓我們討論一下他的安全含義。在web應(yīng)用領(lǐng)域,Ajax本身并沒有引入新的安全弱點。這些應(yīng)用程式面臨和經(jīng)典web應(yīng)用程式同樣的問題。不幸的是,Ajax共通的最佳實現(xiàn)還沒有發(fā)展起來,這就留下了非常多的犯錯誤的余地。其包括安全驗證,授權(quán),存取控制和輸入檢查。[ref 2]。涉及Ajax使用的一些潛在領(lǐng)域包括:
?客戶端安全控制
有人認為,客戶端程式的依賴性可能引出來一些已眾所周知的問題。[ref 2]。一種可能性是研發(fā)者通過客戶端控制破壞安全。如前所述,Ajax的使用需要相當(dāng)多的腳本語言。如今,Web研發(fā)者同時寫服務(wù)器端和客戶端的代碼,這也許會吸引面向客戶端安全控制執(zhí)行的研發(fā)者。這種方式是非常不可靠的,因為攻擊者在測試應(yīng)用程式弱點時,能修改運行在他們客戶端計算機上的所有代碼。安全控制應(yīng)該完全在服務(wù)器上執(zhí)行或經(jīng)常在服務(wù)器上升級。
?不斷增加的攻擊面
第二個挑戰(zhàn)是保護不斷增加的攻擊面。Ajax不可避免的增加了系統(tǒng)的整體復(fù)雜性。在采用Ajax的過程中,研發(fā)者也許要編寫大量的服務(wù)器端頁面,每一個頁面執(zhí)行一些整個程式中的小功能(象為了自動完成一個用戶的城市和州域,查尋郵政區(qū)號)。這些小頁面將各自成為黑客的一個附加攻擊目標(biāo),而為了確保不引入新的安全弱點一個附加的點需要保護起來。這個能比喻成著名的多重點的安全觀點似乎進入一個房子:保護只有一扇門的房子難度和保護有十扇門的房子相比。
?連接用戶和服務(wù)器之間的間隙
Ajax是研發(fā)者通過其縮短最終用戶和由面向服務(wù)構(gòu)架接口的距離的一種方法。[ref 3]增加寬松聯(lián)系的基于服務(wù)的構(gòu)架在企業(yè)環(huán)境中有許多好處,是一種非常有希望的方法。隨著更多的基于服務(wù)端點的發(fā)展,隨著Ajax引入向最終用戶提供更多的靈活的處理的可能,遠離三層標(biāo)準(zhǔn)模型的可能性增加了。
一般來說,企業(yè)內(nèi)部的許多web服務(wù)(和Internet上的全部服務(wù)相對)被設(shè)計成B2B,因此,設(shè)計者和研發(fā)者常常沒有考慮實際用戶的交互性。這個缺乏遠見的做法導(dǎo)致了一些壞的設(shè)計過程中安全假設(shè)。例如,最初的設(shè)計者可能假設(shè)安全認證,授權(quán)和輸入檢查將由其他中層系統(tǒng)執(zhí)行。一旦有人允許”外部人士”通過Ajax的使用直接調(diào)用這些服務(wù),就引入了一個考慮之外的代理。這類使用的一個實際例子是Microsoft的Atlas[ref 4]和web服務(wù)同時使用的一致性程度檢查。研發(fā)者目前能編寫JavaScript來生成XML輸入及從客戶端瀏覽器中正確調(diào)用web服務(wù)。在過去這個由代理和服務(wù)器完成。
?跨站腳本(XSS)的新希望
另外一個不幸的事實是攻擊者通過利用跨站腳本(XSS)的弱點,能夠更有創(chuàng)造性(換句話說,更危險)。[ref 5]黑客過去一般在”單線程”環(huán)境下使用XSS漏洞,攻擊執(zhí)行的時候用戶的瀏覽器處于等待狀態(tài)。這個等待狀態(tài)提供了一個可能錯誤執(zhí)行程式用戶的線索。通過Ajax的引入,一個攻擊者能以更加隱秘的方式利用跨站腳本弱點。當(dāng)你用一個允許Ajax的程式檢查你的郵件的時候,惡意代碼可能給你所有的朋友發(fā)送Email而你的瀏覽器不會留下所有可見的痕跡。
為了解決這方面的問題,在把程式放到產(chǎn)品中之前,必須執(zhí)行足夠多的有針對性的安全測試。即使Ajax程式是web應(yīng)用程式,由于這些應(yīng)用程式高度交互性的特點,一個組織好的現(xiàn)存的安全測試方法可能是不夠的。
4.Ajax怎么
測試一個正常web應(yīng)用程式的時候,一個入侵測試者從footprint應(yīng)用程式開始。Footprint階段的目的是捕捉請求和響應(yīng),這樣測試者就知道應(yīng)用程式怎么和服務(wù)器通信及他所接收到的響應(yīng)。這個信息通過本地代理諸如Burp[ref 6]或Paros[ref 7]記入日志。footprint階段,必須盡可能做到全方面,因此測試者日志向應(yīng)用程式使用的所有頁面發(fā)出請求。
之后,測試者將開始系統(tǒng)的錯誤注入過程,手動或使用自動工具來測試從web服務(wù)器上傳入傳出的參數(shù)。
?“狀態(tài)”問題
在一般的web應(yīng)用程式世界里,應(yīng)用程式的狀態(tài)被明確的定義。存在于一個頁面的DOM中的每一個事物都能被認為是頁面的當(dāng)前狀態(tài)。如果狀態(tài)需要改動,一個請求就被發(fā)送到服務(wù)器,而響應(yīng)周詳說明了狀態(tài)怎么改動。
?通過定時器事件初始化請求
這涉及到通過基于定時器的事件而不必所有用戶交互的更新用戶界面。應(yīng)用程式可能定時的發(fā)送請求到服務(wù)器來更新web頁面上的信息。例如,一個金融應(yīng)用程式可能使用XHR對象更新顯示當(dāng)前股票市場信息的網(wǎng)頁部分內(nèi)容。測試者可能不會注意到后臺的進程,如果他們沒有在正確的時間捕捉到請求,因為這里可能沒有可見的鏈接或按鈕來提醒測試者后臺有請求產(chǎn)生了。
?動態(tài)DOM更新
Ajax響應(yīng)能包含JaveScript片斷,他能被web應(yīng)用程式評價而且能在用戶接口中出現(xiàn)。這可能包括新的鏈接,服務(wù)器上新的文件的存儲,等等。實現(xiàn)這個的一種方式是通過使用eval()聲明。[ref 2,ref 8]eval()聲明接受一個單變量,一個字符串,而且執(zhí)行這個字符串,就像他是程式的一部分相同。
Google Suggest是個非常好的例子,其中應(yīng)用程式接收到一個JavaScript片斷,這個片斷得到評價而且作為完成輸入詢問的可能建議。這個行為對于手動測試者和使用自動工具的測試者都有問題的。兩者將不得不了解JavaScript在web應(yīng)用程式的上下文中是怎么使用的。當(dāng)一個輸入?yún)?shù)在客戶端計算后被送回來的時候就需要格外小心。這個聽起來象典型的XSS而且他就是,不過他已變得非常容易被利用。使用黑名單確認的應(yīng)用程式更加容易受到影響,因為攻擊者不必注入許多標(biāo)記。一些方法能被用來使用XSS而不需象過去那樣的腳本標(biāo)簽。
?XML Fuzzing
Ajax能被用來以XML的格式發(fā)送請求接收響應(yīng)。簡單的自動工具確實理解GET和POST方法不過可能不知道怎么處理使用XML格式封裝的信息。
測試者必須確保研發(fā)者沒有偏離一個安全的構(gòu)架。在一個安全系統(tǒng)中,安全控制在一個最終用戶控制之外的環(huán)境中實行。執(zhí)行reviews的時候,你必須完全審查客戶端代碼以確定是否能在提交變量(cookies, FORM參數(shù), GET參數(shù))給服務(wù)器之前修改他們的狀態(tài)。一旦發(fā)生了這個,就需要分析JavaScript來確定原因。
就如一般的web應(yīng)用程式相同,所有的Ajax請求需要為授權(quán)問題進行測試。研發(fā)者相信因為頁面在一個客戶端腳本引擎后面調(diào)用就不必授權(quán),那他就可能成為受害者。實際上并非如此。
5.結(jié)論
Ajax應(yīng)用程式通過他高度交互性的特性提供了新的可能性。研發(fā)者可能對這些性能引入的新的不安全因素感到厭倦。安全測試者必須增加他們的測試方法和工具集來應(yīng)付Ajax應(yīng)用程式。
這篇文章中,作者介紹了一些Ajax技術(shù)中的安全應(yīng)用。入侵測試者正看到他們已擁有知識和工具來評價Ajax應(yīng)用程式,不過他們還是有點難于測試。后面的文章將關(guān)注這個問題的更多方面,象能在Ajax安全測試中使用的有幫助的工具。
6.參考
[ref 1] Google Suggest and Google Maps, two early Ajax applications.
[ref 2] Stewart Twynham, "AJAX Security", Feb. 16th, 2006.
[ref 3] Andrew van der Stock, "AJAX Security", OWASP Presentation given on February 7, 2006. A direct descendent of this presentation is also available from Andrew van der Stock at http://www.greebo.net/owasp/ajax_security.pdf.
[ref 4] Microsoft’s Altas framework tries to integrate as a middle-tier.
[ref 5] Post by "Samy," on a "Technical explanation of the MySpace worm".
[ref 6] Burp web application proxy for penetration testing.
[ref 7] Paros web application proxy for penetration testing.
[ref 8] post by Rogan Dawes, author of WebScarab, on the WebAppSec mailing list.
7.進一步的閱讀材料
?Jesse James Garrett, "Ajax: A New Approach to Web Applications", Feb. 18, 2005.
?Ryan Asleson and Nathaniel T. Schutta, "Foundations of Ajax", APress Publications, Oct 2005.
?Nicholas C. Zakas, Jeremy McPeakandJoe Fawcett, "Wrox Professional Ajax", Feb 2006.
?Eric Pascarello, "Eric Pascarello dissects Ajax security vulnerabilities", Feb. 07, 2006.
?Andrew van der Stock, "Ajax and Other ’Rich’ Interface Technologies".
8. 關(guān)于作者
Jaswinder S. Hayre, CISSP, 和Jayasankar Kelath, CISSP,都是紐約Ernst & Young’s Advanced Security Center的高級安全工程師。
>
地 址:北京市海淀區(qū)建材城中路12號院17號樓1層119室
武漢分公司地址:湖北省武漢市洪山區(qū)南國雄楚廣場A4棟2011室
鄭州分公司地址:河南鄭州金水區(qū)東風(fēng)路科技市場對面米蘭陽光6號樓917室
郵 箱:haidanet@163.com
24小時聯(lián)系電話: 15201609116 13651084380