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