龍興剛
(海軍計算技術研究所,北京 100841)
隨著 Web 2.0、云計算時代的來臨,基于Web的網絡應用(簡稱Web應用)如電子郵件、即時消息、內容分發網絡(CDN)等大量興起,這些基于Web的應用已經成為人們數字生活的重要組成內容,同時基于Web服務的應用程序也被應用于各個重要領域,比如互聯網管理,商場的運營,軍事設施的控制等[1]。
當前互聯網中最重要的資源程序和數據幾乎都與Web服務相關,伴隨Web廣泛應用,Web應用程序和數據已經成為黑客攻擊的頭號目標。依據SANS機構2009年的報告,互聯網絡中的程序漏洞是各種安全威脅傳播的主要途徑。瀏覽器、Web應用程序、服務器端數據庫成為主要被攻擊對象。Cenzic組織的一份研究報告顯示,78%的互聯網絡威脅與Web應用相關。敏感數據泄漏對組織機構和個人所造成的的損失是無法估量的。
本文首先對Web應用涉及到的安全威脅進行了分析,然后針對這些安全威脅提出了相應的安全防護方案,最后全文進行了總結,并提出了技術展望。
Web應用采用客戶端和服務器端程序主要通過TCP/IP協議層之上的超文本傳輸(HTTP)協議來進行信息傳輸和事物處理。典型的客戶端程序通常是Web瀏覽器(如FireFox和微軟的IE瀏覽器)。在Web服務器端存放著可以接受外部訪問的Web資源。Web資源包括靜態文本文件,超文本標記語言文檔,媒體文件,客戶端代碼,動態腳本等[1-4]。其Web應用方式如圖1所示。

圖1 Web應用方式
一個典型的HTTP會話中,Web客戶端程序對服務器通過一系列的HTTP客戶命令發起請求。請求中包括需要訪問的資源的路徑,和各種請求頭文件信息和參數。Web服務器處理請求并返回標識命令執行結果的狀態信息。若請求成功執行,那么在返回的信息體中包含有請求的資源,或者服務器通過返回將瀏覽器導向其它的地址或者資源[5-6]。
根據上述所分析的Web特點,將Web應用面臨的安全威脅分類為:客戶端、服務器端以及客戶端和服務器端之間的數據傳輸安全威脅三類[7-8]。
客戶端安全威脅主要包括有瀏覽器安全威脅、跨站腳本攻擊、點擊劫持等[9]。
1.1.1 瀏覽器安全威脅[9]
瀏覽器是客戶端主機上運行的應用程序,主要實現向Web服務器發送各種請求,并對Web服務器發來的超文本信息和各種數據進行解析和顯示,早期的瀏覽器只提供HTML靜態頁面的解析顯示,但隨著腳本和插件技術的不斷發展,JAVAscript、APPLET、ActiveX、FLASH等腳本和插件技術的廣泛應用,使瀏覽器功能極大增加,豐富了Web頁面的顯示,但也給Web應用帶來了新的安全問題。作為互聯網重要入口的瀏覽器,黑客通常利用瀏覽器軟件自身漏洞,對客戶端實施各種攻擊,其主要的安全威脅包括:Cookie的安全問題和瀏覽器自身漏洞等。
Cookie是存于客戶端的、為服務器端維護客戶信息的一段信息。其存在形式通常是一個儲存于瀏覽器目錄中的文本文件,Cookie中可能包含有與用戶有關的敏感信息,如網站用戶名、密碼或其他個人信息等。黑客可能通過非法手段獲取Cookie等信息,使得用戶個人信息泄漏。
同其他所有應用軟件一樣,瀏覽器軟件自身也存在著漏洞,如微軟IE8瀏覽器中存在的CSS跨站漏洞,黑客利用該漏洞可發起CSS跨站攻擊,使得無需用戶做任何操作就能獲得對用戶電腦的本地控制權。
1.1.2 跨站腳本攻擊
跨站腳本攻擊通常指黑客通過 HTML注入技術對網頁進行篡改,插入惡意腳本,使得用戶在瀏覽網頁時,對用戶瀏覽器進行控制。跨站腳本攻擊長期以來列為客戶端Web安全中的頭號威脅。跨站腳本攻擊主要目的之一是獲取授權用戶的Cookie信息。在服務器端,每一個包含認證 Cookie的Web請求都看作來自與之相關用戶發出的請求,所以,攻擊者可以利用竊取的Cookie冒充授權用戶完成當前會話。跨站攻擊通常有兩種方式[4,9]:
持久性攻擊:攻擊者將惡意代碼存儲在與Web應用程序交互的數據庫中,當用戶訪問請求動態頁面時,Web應用程序從數據庫中返回惡意的Javascript代碼給用戶。用戶瀏覽器執行該腳本后,將用戶的Cookie發送給攻擊者控制的服務器。
反射攻擊:這種方式下,攻擊的腳本沒有存儲在服務器端,而是在攻擊過程中反射給用戶。它通過給別人發送帶有惡意腳本代碼參數的統一資源定位符(URL,Uniform Resource Locator) ,當URL地址被打開時,特有的惡意代碼參數被HTML解析執行。其攻擊特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起。
1.1.3 點擊劫持
點擊劫持是一種視覺上的欺騙手段,黑客通常使用一個透明的不可見的Web元素,將網頁上的一部分進行覆蓋,當用戶在點擊該頁面時,可能在不知情的情況下點擊透明的Web元素,從而實現對用戶點擊操作的劫持,通過對這些透明不可見的Web元素的位置調整,黑客可以誘使用戶恰好點擊在該Web元素的一些功能性按鈕上,從而實現一些特定的攻擊功能。如ClinkJacking攻擊,既是通過FLASH構造的點擊劫持,在完成一系列復雜動作后,黑客最終控制了用戶電腦的攝像頭。
服務器端安全與 Web服務器,Web應用程序,以及數據庫的漏洞密切相關。而Web應用的復雜性逐漸增加,Web程序開發者和管理者缺乏相應的安全意識使得攻擊者有機可乘。通常,WEB服務器端面臨的威脅主要包括:
1)服務器端的機密信息以及文件,比如銀行賬戶,信用卡信息的盜取。入侵者一旦獲得這些信息,就可以進行角色欺騙,從銀行獲取經濟利益。
2)服務器端的Web應用也可以被用來存儲惡意代碼,進行網頁掛馬攻擊等。
常見的Web威脅和漏洞包括:SQL注入攻擊、遠程代碼執行攻擊等。
1.2.1 SQL注入式攻擊
SQL注入攻擊利用服務器端代碼自身存在的漏洞進行攻擊,攻擊的目標通過Web客戶端代碼對Web服務器連接的數據庫后端進行攻擊。通過這種方式攻擊者往往可以逃避現存的大部分安全防護機制,而直接通過竊取的權限達到對非授權數據非法訪問的目的。SQL攻擊存在大量的方法,攻擊者可以依據Web應用程序中存在何種漏洞來針對性地選擇有效的攻擊方法。
1.2.2 遠程代碼執行攻擊
遠程代碼執行攻擊允許攻擊者在漏洞服務器上執行任意代碼并獲取位于漏洞服務器中的任意數據信息。通常這種漏洞是因為編碼的邏輯錯誤導致,很難通過對 Web應用程序的漏洞的滲透性測試發現,而一旦該漏洞被攻擊者成功利用,整個Web服務器都會淪為攻擊者的控制之下。如PHP系統中的XMLRPC漏洞,XML-RPC是一組允許軟件運行在異構的操作系統環境中的規范,支持通過網絡的遠過程調用。XML-RPC使得攻擊者可將未經檢驗的惡意代碼傳入到遠端XML-RPC服務器的eval()函數中進行執行,從而達到攻擊的效果。
在客戶端和服務端中的數據傳輸也容易遭到破壞,常見的攻擊方式包括主動攻擊和被動攻擊兩種。依賴于向網絡中寫入數據包的攻擊被稱做主動攻擊,這種主動攻擊方式,可向服務器或客戶端注入被修改的信息,從而達到攻擊的目的。只涉及從網絡中讀取數據包的攻擊被稱之為被動攻擊,這種攻擊方式可竊聽網絡中的敏感數據,如用戶名、密碼、個人信息等,盜取個人隱私。
依照上述 Web應用數據安全分析,常用的Web應用數據安全防護方法可包括客戶端安全防護、服務器端安全防護和數據傳輸安全防護。
針對瀏覽器和主機操作系統的安全威脅,在安全防護方面需要及時的更新瀏覽器版本和操作系統補丁,及時堵住安全威脅漏洞。對于Web客戶端腳本等威脅,為了防御和對抗Web客戶端攻擊威脅,可使用網站檢測方式對網站的網頁進行檢查,一般的惡意網頁檢測技術分為兩類:靜態檢測和動態檢測。靜態檢測即采用代碼走查或自動化代碼分析等方法,靜態檢查網頁代碼中是否包含惡意代碼;與靜態檢測機制相比,動態檢測通常速度較慢,但是針對復雜的惡意網頁有較高的識別率。如當惡意代碼采用了復雜的加密算法或代碼變換方式,因為基于動態執行的檢測技術,由于能獲得惡意程序執行的過程信息,詳細的行為特征,所以基于此技術的檢測方式有很高的準確率。而靜態分析技術通常是依賴與惡意代碼的簽名特征分析技術很難獲得較高的準確率。
針對服務器端的安全威脅,其安全防護對策主要包括:
(1) AJAX保護機制
AJAX保護機制類似傳統 Web應用的保護機制,包括:與數據庫互動時常態性使用參數化查詢、服務器端輸出的所有響應須以 HTML編碼后再輸出、使用“innerText”屬性代替“innerHtml”、避免在Ajax調用中包含敏感信息,以及選擇適合的數據結構與平臺等機制。
(2) 輸入驗證
避免只有客戶端的驗證,需驗證所有經由客戶端及服務端的輸入處理,例如驗證HTTP表頭、小甜品(cookie)、URL參數、POST數據及傳送至服務器端的查詢字符串,嚴格驗證檢查所包含的用戶輸入數據型態、長度及格式。
(3) 客戶端程序代碼安全
保護機制包括:不要部署商業邏輯組件在客戶端應用系統中、過濾掉不可信任的第三方外來程序、避免執行跨網段的后端調用、在信息處理前即先在瀏覽器端執行過濾,以及保護諸如document.write()之客戶端調用等機制。
(4) SOAP過濾與WSDL強化機制
一般的防火墻或在HTTP層之內容過濾均無法防御Web服務之攻擊,須要在SOAP層的過濾與監督,尤以網絡腳本應用程序接口(ISAPI, Internet Script Application Program Interface)層過濾為基本要素,而WSDL系資料主要來源,不能有任何泄露,其強制機制包括程序設計時只提供必要的函數,以及僅能經由安全套接層(SSL,Secure Sockets Layer)啟動等。
(5) 認證授權與安全程序開發機制
保護機制包括:系統開發者應執行WSDL訪問控制、使用安全斷言標記語言(SAML,Security Assertion Markup Language)、WS-Security憑證、在存取訪問前執行SOAP及XML過濾,以及在開發過程中采用錯誤程序代碼管理、例外管理,輸入驗證、SQL等整合機制。
針對Web應用的數據傳輸,可基于SSL技術對傳輸的數據進行加密,實施機密性保護,客戶端和服務器端的傳輸協議主要包括HTTP、RTP、RTMP等。其中HTTP協議用于客戶端和服務器端的網頁傳輸等,RTP和RTMP協議等主要用于客戶端和服務器端的多媒體數據傳輸,這些傳輸協議均使用SSL技術實現了其對應的安全協議,包括:HTTPS、SRTP、SRTMP協議等。
2.3.1 HTTPS協議
在SSL 上運行HTTP 的組合即稱為HTTPS,當在HTTP 中建立了 TCP 連接后,客戶端先發送一個請求,服務器隨即回應一個文檔。而在使用SSL的時候,客戶端先創建一個TCP 連接,并在其上建立一條SSL 通道,然后再在SSL 通道上發送同樣的請求,而服務器則以相同的方式沿SSL 連接予以響應。對普通的HTTP 服務器來說,SSL 握手就像是垃圾信息,因為并不是所有的服務器都是支持SSL,所以為了使該過程能夠正確的工作,客戶端需要某種了解服務器已準備好接受 SSL 連接的方法。使用以https 而不是http 開頭的Web 地址(技術上被稱做統一資源定位符(URL))來指示應當使用SSL[9-10]。
2.3.2 SRTP協議
SRTP協議主要是針對實時的語音流、視頻流在網絡上傳輸的安全性進行的開發,SRTP提供 AES對稱加密和HMAC算法認證。所以,SRTP協議的關鍵在于安全和實時。SRTP可以運行于TCP/UDP之上,但通常都是應用于UDP,因為語音、視頻傳輸通常采用UDP。
信息認證和完整性保護:SRTP默認的認證算法是 HMAC-SHA1,其具體實現如下:發送方計算出M的標簽值并添加到數據包中。接收方使用選定的算法和密鑰計算出M的一個標簽值,然后與收到的標簽值進行比較。
SRTP中各種密鑰的確定:在SRTP/SRTCP中,使用的密鑰并不都通過密鑰管理協議來確定,而是通過一個密鑰推導函數(key derivation function)來得到。因此,密鑰管理協議只需要互換一個 master key(有時還需要一個master salt), SRTP自身通過密鑰推導函數來得到其他必需的會話密鑰。
2.3.3 RTMPS協議
RTMP的安全協議,此協議是通過SSL加密的RTMP協議,為數據通訊提供安全支持。安全套接層(SSL,Secure Sockets Layer)是為網絡通信提供安全及數據完整性的一種安全協議。SSL在傳輸層對網絡連接進行加密。默認端口443。
隨著互聯網了技術的迅猛發展,以Web為基礎的應用程序逐漸代替傳統的以桌面為中心的計算模式,成為當今新型計算平臺的事實標準。從Web郵件,購物,媒體,金融服務到社交網絡,Web應用滲入到每個人的日常生活,扮演著網絡信息服務中最重要角色,同時它也成為國計民生息息相關的重要的信息和數據集結地和存儲庫。由于Web技術的飛速演進,Web相關應用的復雜度急劇增加,各種類型的安全漏洞不斷涌現;另一方面 Web服務所承載的重要的數據和關鍵的程序吸引了越來越多的被經濟利益驅動的黑客,并針對安全漏洞發起更猛烈的攻擊,其攻擊手段也日趨隱蔽和精巧。當前Web應用處在一個蓬勃發展的時代,同時也是安全威脅與日俱增的時代,深入認識安全威脅的機理,開發有效的技術檢測已知、未知新型攻擊形式,建立準確有效的威脅評估模型將對防范攻擊,保護程序和數據安全具有非常重要的意義。
[1]龍娟.Web站點安全評估研究[J].通信技術,2011,44(08):1-2.
[2]黃耀鋒,吳迪.Web應用的安全現狀及防護[J].科技資訊,2011,35(16):16.
[3]潘恒,謝彥彬.Web應用安全風險評估研究[J].中原工學院學報,2011,22(06):53-56.
[4]吳翰清.白帽子講 Web安全[M].北京:電子工業出版社,2012年5月.
[5]周穎杰,劉彩霞,左燕飛.一種分布式移動核心網安全架構的設計與研究[J].通信技術,2009,42(02):241-243.
[6]劉濤,樊長安.基于代理技術的服務器群組防護方法[J].信息安全與通信保密,2009(11):91-93.
[7]程云鵬.捷普助力運營商 Web應用全面安全[J].信息安全與通信保密,2011(12):79-80.
[8]楊林,楊鵬,李長齊. Web應用漏洞分析及防御解決方案研究[J].信息安全與通信保密,2011(02):58-60.
[9]羅云庚.瀏覽器安全技術研究[J].計算機與現代化,2004(12):138-140.
[10]楊淑琴,朱寧賢.IE瀏覽器的安全防范策略初探[J].網絡安全技術與應用,2008(07):41-43.