1.介紹
Ajax由于其良好的交互性,在去年非常引人注目。Google Suggest 和 Google Maps [ref 1]就是一些Ajax早期的著名應(yīng)用。目前,企業(yè)正在考慮他們怎么也能利用Ajax,web研發(fā)者在學(xué)習(xí)他,安全專家在想怎么使他變得安全,黑客們在思考怎么入侵。所有能提高服務(wù)器吞吐量,能產(chǎn)生更多的動(dòng)態(tài)頁面?zhèn)鬏,而且能為最終用戶提供更加豐富的web應(yīng)用的技術(shù)都必然在這個(gè)領(lǐng)域出現(xiàn)。
Ajax的下一步計(jì)劃稱為”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)用程式在同步模式下工作,一個(gè)web請求之后,一個(gè)響應(yīng)在表示層引起一些動(dòng)作。例如,點(diǎn)擊鏈接或提交按鈕向web服務(wù)器產(chǎn)生一個(gè)帶有相應(yīng)參數(shù)的請求。傳統(tǒng)的” click and wait”方式限制了應(yīng)用程式的交互性。Ajax(Asychronous Javascript and XML)技術(shù)的使用緩解了這個(gè)問題。文中,我們將Ajax定義為向web服務(wù)器產(chǎn)生異步調(diào)用而不引起網(wǎng)頁完全更新的方法。這種交互性的通過三種不同的組件實(shí)現(xiàn):客戶端腳本語言,XmlHttpRequest (XHR)對象和XML。
讓我簡短地分別介紹一下這些組件。在請求響應(yīng)中,客戶端腳本語言被用來初始化服務(wù)器調(diào)用和程式的存取,及更新客戶瀏覽器的DOM?蛻舳似毡槭褂肑avaScript,由于他被知名瀏覽器普遍的采用。第二個(gè)組件是XHR對象,他是最重要的部分。JavaScript這類語言使用XHR對象在場景后面向web服務(wù)器發(fā)送請求,使用HTTP作為傳輸中介。接著是第三個(gè)組件,他的使用是必要的:XML是被交換信息的數(shù)據(jù)格式。
非常多站點(diǎn)使用JSON(JavaScript Object Notation)代替XML,因?yàn)槠涓尤菀捉馕霾槐啬敲炊喙芾淼馁M(fèi)用。使用JavaScript解析JSON,只需要簡單的把他傳給eval()函數(shù)。另一方面,有人可能使用XPath解析返回的XML。同樣的,外面更有非常多”Ajax 站點(diǎn)”既不使用XML,也不使用JSON,而是僅僅發(fā)送無格式的動(dòng)態(tài)插入到網(wǎng)頁的舊HTML碎片。
因此,Ajax不是個(gè)新的技術(shù)商標(biāo),而是現(xiàn)存技術(shù)的聯(lián)合應(yīng)用,推動(dòng)了web應(yīng)用程式高度交互性的發(fā)展。實(shí)際上,所有這些組件已出現(xiàn)好些年了,隨Internet Explorer 5.0的發(fā)布而顯著起來。研發(fā)者創(chuàng)建了Ajax許多的應(yīng)用,諸如”提示”文本框(象Google Suggest)和自動(dòng)更新數(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本身并沒有引入新的安全弱點(diǎn)。這些應(yīng)用程式面臨和經(jīng)典web應(yīng)用程式同樣的問題。不幸的是,Ajax共通的最佳實(shí)現(xiàn)還沒有發(fā)展起來,這就留下了非常多的犯錯(cuò)誤的余地。其包括安全驗(yàn)證,授權(quán),存取控制和輸入檢查。[ref 2]。涉及Ajax使用的一些潛在領(lǐng)域包括:
?客戶端安全控制
有人認(rèn)為,客戶端程式的依賴性可能引出來一些已眾所周知的問題。[ref 2]。一種可能性是研發(fā)者通過客戶端控制破壞安全。如前所述,Ajax的使用需要相當(dāng)多的腳本語言。如今,Web研發(fā)者同時(shí)寫服務(wù)器端和客戶端的代碼,這也許會吸引面向客戶端安全控制執(zhí)行的研發(fā)者。這種方式是非常不可靠的,因?yàn)楣粽咴跍y試應(yīng)用程式弱點(diǎn)時(shí),能修改運(yùn)行在他們客戶端計(jì)算機(jī)上的所有代碼。安全控制應(yīng)該完全在服務(wù)器上執(zhí)行或經(jīng)常在服務(wù)器上升級。
?不斷增加的攻擊面
第二個(gè)挑戰(zhàn)是保護(hù)不斷增加的攻擊面。Ajax不可避免的增加了系統(tǒng)的整體復(fù)雜性。在采用Ajax的過程中,研發(fā)者也許要編寫大量的服務(wù)器端頁面,每一個(gè)頁面執(zhí)行一些整個(gè)程式中的小功能(象為了自動(dòng)完成一個(gè)用戶的城市和州域,查尋郵政區(qū)號)。這些小頁面將各自成為黑客的一個(gè)附加攻擊目標(biāo),而為了確保不引入新的安全弱點(diǎn)一個(gè)附加的點(diǎn)需要保護(hù)起來。這個(gè)能比喻成著名的多重點(diǎn)的安全觀點(diǎn)似乎進(jìn)入一個(gè)房子:保護(hù)只有一扇門的房子難度和保護(hù)有十扇門的房子相比。
?連接用戶和服務(wù)器之間的間隙
Ajax是研發(fā)者通過其縮短最終用戶和由面向服務(wù)構(gòu)架接口的距離的一種方法。[ref 3]增加寬松聯(lián)系的基于服務(wù)的構(gòu)架在企業(yè)環(huán)境中有許多好處,是一種非常有希望的方法。隨著更多的基于服務(wù)端點(diǎn)的發(fā)展,隨著Ajax引入向最終用戶提供更多的靈活的處理的可能,遠(yuǎn)離三層標(biāo)準(zhǔn)模型的可能性增加了。
一般來說,企業(yè)內(nèi)部的許多web服務(wù)(和Internet上的全部服務(wù)相對)被設(shè)計(jì)成B2B,因此,設(shè)計(jì)者和研發(fā)者常常沒有考慮實(shí)際用戶的交互性。這個(gè)缺乏遠(yuǎn)見的做法導(dǎo)致了一些壞的設(shè)計(jì)過程中安全假設(shè)。例如,最初的設(shè)計(jì)者可能假設(shè)安全認(rèn)證,授權(quán)和輸入檢查將由其他中層系統(tǒng)執(zhí)行。一旦有人允許”外部人士”通過Ajax的使用直接調(diào)用這些服務(wù),就引入了一個(gè)考慮之外的代理。這類使用的一個(gè)實(shí)際例子是Microsoft的Atlas[ref 4]和web服務(wù)同時(shí)使用的一致性程度檢查。研發(fā)者目前能編寫JavaScript來生成XML輸入及從客戶端瀏覽器中正確調(diào)用web服務(wù)。在過去這個(gè)由代理和服務(wù)器完成。
?跨站腳本(XSS)的新希望
另外一個(gè)不幸的事實(shí)是攻擊者通過利用跨站腳本(XSS)的弱點(diǎn),能夠更有創(chuàng)造性(換句話說,更危險(xiǎn))。[ref 5]黑客過去一般在”單線程”環(huán)境下使用XSS漏洞,攻擊執(zhí)行的時(shí)候用戶的瀏覽器處于等待狀態(tài)。這個(gè)等待狀態(tài)提供了一個(gè)可能錯(cuò)誤執(zhí)行程式用戶的線索。通過Ajax的引入,一個(gè)攻擊者能以更加隱秘的方式利用跨站腳本弱點(diǎn)。當(dāng)你用一個(gè)允許Ajax的程式檢查你的郵件的時(shí)候,惡意代碼可能給你所有的朋友發(fā)送Email而你的瀏覽器不會留下所有可見的痕跡。
為了解決這方面的問題,在把程式放到產(chǎn)品中之前,必須執(zhí)行足夠多的有針對性的安全測試。即使Ajax程式是web應(yīng)用程式,由于這些應(yīng)用程式高度交互性的特點(diǎn),一個(gè)組織好的現(xiàn)存的安全測試方法可能是不夠的。
4.Ajax怎么
測試一個(gè)正常web應(yīng)用程式的時(shí)候,一個(gè)入侵測試者從footprint應(yīng)用程式開始。Footprint階段的目的是捕捉請求和響應(yīng),這樣測試者就知道應(yīng)用程式怎么和服務(wù)器通信及他所接收到的響應(yīng)。這個(gè)信息通過本地代理諸如Burp[ref 6]或Paros[ref 7]記入日志。footprint階段,必須盡可能做到全方面,因此測試者日志向應(yīng)用程式使用的所有頁面發(fā)出請求。
之后,測試者將開始系統(tǒng)的錯(cuò)誤注入過程,手動(dòng)或使用自動(dòng)工具來測試從web服務(wù)器上傳入傳出的參數(shù)。
?“狀態(tài)”問題
在一般的web應(yīng)用程式世界里,應(yīng)用程式的狀態(tài)被明確的定義。存在于一個(gè)頁面的DOM中的每一個(gè)事物都能被認(rèn)為是頁面的當(dāng)前狀態(tài)。如果狀態(tài)需要改動(dòng),一個(gè)請求就被發(fā)送到服務(wù)器,而響應(yīng)周詳說明了狀態(tài)怎么改動(dòng)。
?通過定時(shí)器事件初始化請求
這涉及到通過基于定時(shí)器的事件而不必所有用戶交互的更新用戶界面。應(yīng)用程式可能定時(shí)的發(fā)送請求到服務(wù)器來更新web頁面上的信息。例如,一個(gè)金融應(yīng)用程式可能使用XHR對象更新顯示當(dāng)前股票市場信息的網(wǎng)頁部分內(nèi)容。測試者可能不會注意到后臺的進(jìn)程,如果他們沒有在正確的時(shí)間捕捉到請求,因?yàn)檫@里可能沒有可見的鏈接或按鈕來提醒測試者后臺有請求產(chǎn)生了。
?動(dòng)態(tài)DOM更新
Ajax響應(yīng)能包含JaveScript片斷,他能被web應(yīng)用程式評價(jià)而且能在用戶接口中出現(xiàn)。這可能包括新的鏈接,服務(wù)器上新的文件的存儲,等等。實(shí)現(xiàn)這個(gè)的一種方式是通過使用eval()聲明。[ref 2,ref 8]eval()聲明接受一個(gè)單變量,一個(gè)字符串,而且執(zhí)行這個(gè)字符串,就像他是程式的一部分相同。
Google Suggest是個(gè)非常好的例子,其中應(yīng)用程式接收到一個(gè)JavaScript片斷,這個(gè)片斷得到評價(jià)而且作為完成輸入詢問的可能建議。這個(gè)行為對于手動(dòng)測試者和使用自動(dòng)工具的測試者都有問題的。兩者將不得不了解JavaScript在web應(yīng)用程式的上下文中是怎么使用的。當(dāng)一個(gè)輸入?yún)?shù)在客戶端計(jì)算后被送回來的時(shí)候就需要格外小心。這個(gè)聽起來象典型的XSS而且他就是,不過他已變得非常容易被利用。使用黑名單確認(rèn)的應(yīng)用程式更加容易受到影響,因?yàn)楣粽卟槐刈⑷朐S多標(biāo)記。一些方法能被用來使用XSS而不需象過去那樣的腳本標(biāo)簽。
?XML Fuzzing
Ajax能被用來以XML的格式發(fā)送請求接收響應(yīng)。簡單的自動(dòng)工具確實(shí)理解GET和POST方法不過可能不知道怎么處理使用XML格式封裝的信息。
測試者必須確保研發(fā)者沒有偏離一個(gè)安全的構(gòu)架。在一個(gè)安全系統(tǒng)中,安全控制在一個(gè)最終用戶控制之外的環(huán)境中實(shí)行。執(zhí)行reviews的時(shí)候,你必須完全審查客戶端代碼以確定是否能在提交變量(cookies, FORM參數(shù), GET參數(shù))給服務(wù)器之前修改他們的狀態(tài)。一旦發(fā)生了這個(gè),就需要分析JavaScript來確定原因。
就如一般的web應(yīng)用程式相同,所有的Ajax請求需要為授權(quán)問題進(jìn)行測試。研發(fā)者相信因?yàn)轫撁嬖谝粋(gè)客戶端腳本引擎后面調(diào)用就不必授權(quán),那他就可能成為受害者。實(shí)際上并非如此。
5.結(jié)論
Ajax應(yīng)用程式通過他高度交互性的特性提供了新的可能性。研發(fā)者可能對這些性能引入的新的不安全因素感到厭倦。安全測試者必須增加他們的測試方法和工具集來應(yīng)付Ajax應(yīng)用程式。
這篇文章中,作者介紹了一些Ajax技術(shù)中的安全應(yīng)用。入侵測試者正看到他們已擁有知識和工具來評價(jià)Ajax應(yīng)用程式,不過他們還是有點(diǎn)難于測試。后面的文章將關(guān)注這個(gè)問題的更多方面,象能在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.進(jìn)一步的閱讀材料
?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小時(shí)聯(lián)系電話: 15201609116 13651084380