盡管現(xiàn)在所有連接互聯(lián)網(wǎng)的計算機(jī)都安裝了Flash(Adobe問題不斷的Web多媒體格式),但是似乎它很快就會被新標(biāo)準(zhǔn)HTML5所替代。按照Adobe自己話說,“HTML5現(xiàn)在得到主流移動設(shè)備的普遍支持,并成為創(chuàng)建和部署面向移動平臺瀏覽器內(nèi)容的最佳解決方案。”
對于企業(yè)攻擊者而言,這無疑是一個壞消息。近幾年來,F(xiàn)lash已經(jīng)成為惡意程序黑客的主要攻擊目標(biāo)。根據(jù)安全研究公司W(wǎng)hiteHat Security Inc.的數(shù)據(jù),與Flash播放器相關(guān)的漏洞占他們發(fā)現(xiàn)的Web應(yīng)用程序漏洞的14%左右。
那么,F(xiàn)lash的消失是否是一個安全利好消息?HTML5是否會替代Flash?如果會,那么HTML5安全性能否與Flash對抗?安全人員應(yīng)該如何做好部署HTML5 Web內(nèi)容的準(zhǔn)備?下面,我們將會針對這些問題展開討論。
HTML5得到了許多互聯(lián)網(wǎng)巨頭的支持,包括Facebook、谷歌和PayPal。事實上,它正在成為將來的互聯(lián)網(wǎng)視頻標(biāo)準(zhǔn),并且會替代所有非標(biāo)準(zhǔn)格式,如Flash和微軟的Silverlight。Flash是一種二進(jìn)制的多媒體內(nèi)容格式,采用面向?qū)ο箝_發(fā)語言ActionScript,需要安裝Adobe插件。相反,HTML5是一種開放源碼的標(biāo)記語言,不需要任何插件就能夠運行應(yīng)用程序。刪除了視頻播放私有插件,也就關(guān)上了常見的攻擊載體,因為HTML5更新是通過瀏覽器更新實現(xiàn)的,所以它們的更新速度遠(yuǎn)遠(yuǎn)比插件快。然而,HTML5有更多的計算機(jī)資源訪問權(quán)限,包括本地數(shù)據(jù)存儲,從而也成為新的潛在攻擊目標(biāo)。
對于HTML5,我主要擔(dān)心的是,開發(fā)人員在未完全理解它的新特性及安全機(jī)制之前,就匆匆在網(wǎng)站上添加HTML5特性。例如,跨域資源共享(CORS)使Web服務(wù)器允許其他域名的網(wǎng)頁訪問自己的資源。CORS放寬了同源訪問規(guī)則(Same Origin Rule),這是Web瀏覽器內(nèi)置的基礎(chǔ)安全措施之一。除非開發(fā)人員理解CORS的工作原理,否則他們很容易做出錯誤的假設(shè),使攻擊者能夠訪問所共享的內(nèi)容。HTML5跨文檔消息也有相同的問題。如果使用正確,它會很安全,但是如何開發(fā)者不確保消息來自自己的網(wǎng)站,那么其他網(wǎng)站的惡意代碼可能會發(fā)送欺騙性流氓消息?;镜陌踩瓌t是,來自瀏覽器的數(shù)據(jù)都應(yīng)該視為不可信數(shù)據(jù),因此必須進(jìn)行驗證。在Web應(yīng)用程序開發(fā)過程中,一定要檢查當(dāng)前的驗證過程和過濾器,因為HTML5新元素和屬性可能會產(chǎn)生一些意外結(jié)果。應(yīng)用程序內(nèi)置的基于白名單的過濾器確實更具靈活性。
如果開發(fā)者使用技術(shù)的方法偏離該技術(shù)原來的目標(biāo),那么任何技術(shù)都可能出現(xiàn)安全漏洞。例如,HTML5 Web存儲標(biāo)準(zhǔn)為開發(fā)者提供了一種更靈活方法,可以替代Cookie在瀏覽器上存儲數(shù)據(jù)。當(dāng)然,存儲用戶敏感數(shù)據(jù)存在一定的風(fēng)險,可能會受到跨站腳本(XSS)的攻擊,但是有一些網(wǎng)站已經(jīng)使用這種技術(shù)來存儲腳本,以提高頁面加載速度。例如:為了節(jié)省時間和帶寬,前面的Web服務(wù)Apture使用一個localStorage對象,緩存它的應(yīng)用程序邏輯代碼,但是與這些腳本在同一個域的頁面可能存在XSS漏洞,可能會被利用,向緩存注入惡意代碼。利用Apture服務(wù),惡意代碼可能會將漏洞變成面向所有域的持久客戶端XSS攻擊。從第三方提取數(shù)據(jù)或腳本會創(chuàng)建一種隱含的信任關(guān)系。開發(fā)者必須認(rèn)識到這種潛在風(fēng)險,理解如何在內(nèi)容放到網(wǎng)站之前對內(nèi)容進(jìn)行審查。
將一種技術(shù)擴(kuò)展到它原先的適用范圍之外,可能會產(chǎn)生其他的錯誤。HTML5是一種異步技術(shù),但是開發(fā)者可使用JavaScript將它變成同步技術(shù)。如果一個事務(wù)在轉(zhuǎn)到下一個狀態(tài)之前必須獲取一個響應(yīng),那么必須仔細(xì)檢查業(yè)務(wù)邏輯控制機(jī)制,保證事務(wù)處理的順序是否正確,如數(shù)據(jù)庫事務(wù)。
安全團(tuán)隊需要使用WebSocket API,它可以替代瀏覽器,向Web服務(wù)器請求最新的數(shù)據(jù)。服務(wù)器會在出現(xiàn)新數(shù)據(jù)時才發(fā)送數(shù)據(jù),從而減少服務(wù)器與瀏覽器的流量。但是,WebSocket可以繞過許多重要的網(wǎng)絡(luò)安全控制機(jī)制,包括傳統(tǒng)的數(shù)據(jù)包頭,而防火墻正是通過檢查數(shù)據(jù)包頭來阻擋可疑流量的?;谛抛u(yù)的防御也會受到影響。這樣就增加了防火墻進(jìn)行深度內(nèi)容檢測的負(fù)載,因為只有深度內(nèi)容檢測才能夠處理WebSocket流量,檢查流量的內(nèi)容、結(jié)構(gòu)和用途。所以再說一次,白名單過濾的效率確實會更高一些。
HTML5標(biāo)準(zhǔn)機(jī)構(gòu)及瀏覽器廠商已經(jīng)完全考慮了如何根除某些特定的安全性和保密問題。然而,HTML5仍然未成為正式的標(biāo)準(zhǔn),對于那些未掌握編寫安全代碼的開發(fā)者而言,它肯定還不是一種絕對安全的多媒體Web開發(fā)技術(shù)。即使是對于能夠編寫安全代碼的開發(fā)者而言,他們?nèi)匀恍枰鎸W(wǎng)絡(luò)欺詐、惡意軟件和拒絕服務(wù)攻擊。使用HTML5代碼替換網(wǎng)站原來的應(yīng)用程序是一個很大的改動,總會遇到一些問題。在開始實施之前一定要全面測試恢復(fù)過程,而且同時在開始時就要運行一些重要功能。為了更一步防御各種攻擊,我推薦將網(wǎng)站升級到HTTPS。
任何HTML5開發(fā)都必須進(jìn)行滲透測試,而且要使用HTML5創(chuàng)建復(fù)雜的前臺,保證它們的運行結(jié)果都符合要求。攻擊者肯定會測試瀏覽器廠商實現(xiàn)的新功能和新數(shù)據(jù)格式,如、及其屬性,從中發(fā)現(xiàn)可能導(dǎo)致緩沖溢出和其他攻擊的編碼錯誤。這意味著安全團(tuán)隊和開發(fā)者必須跟進(jìn)供應(yīng)商更新,保證盡快更新補(bǔ)丁和修復(fù)安全漏洞。
HTML5意味著開發(fā)者現(xiàn)在可以使用開放標(biāo)準(zhǔn)在網(wǎng)站上實現(xiàn)多媒體特性。這比以前使用第三方插件技術(shù)顯然先進(jìn)了很多。只要開發(fā)者投入足夠時間,學(xué)習(xí)如何安全地使用各種新特性,那么安全行業(yè)就有望實現(xiàn)更豐富且更安全的互聯(lián)網(wǎng)。然而,歷史表明,這是不可能的,所以我們總是需要實施強(qiáng)有力的邊界防御和滲透測試。