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