在這種最常見的模型中,客戶端是第一層;使用動態 Web 內容技術的部分屬于中間層;數據庫是第三層。用戶通過 Web 瀏覽器發送請求(request)給中間層,由中間層將用戶的請求轉換為對后臺數據的查詢或是更新,并將最終的結果在瀏覽器上展示給用戶。
在企業 Web 應用的各個層面,都會使用不同的技術來確保安全性。為了保護客戶端機器的安全,用戶會安裝防病毒軟件;為了保證用戶數據傳輸到企業 Web 服務器的傳輸安全,通信層通常會使用 SSL(安全套接層)技術加密數據;企業會使用防火墻和 IDS(入侵診斷系統)/IPS(入侵防御系統)來保證僅允許特定的訪問,不必要暴露的端口和非法的訪問,在這里都會被阻止;即使有防火墻,企業依然會使用身份認證機制授權用戶訪問 Web 應用。
但是,即便有防病毒保護、防火墻和 IDS/IPS,企業仍然不得不允許一部分的通訊經過防火墻,畢竟 Web 應用的目的是為用戶提供服務,保護措施可以關閉不必要暴露的端口,但是 Web 應用必須的 80 和 443 端口,是一定要開放的。可以順利通過的這部分通訊,可能是善意的,也可能是惡意的,很難辨別。這里需要注意的是,Web 應用是由軟件構成的,那么,它一定會包含缺陷(bugs),這些 bug 就可以被惡意的用戶利用,他們通過執行各種惡意的操作,或者偷竊、或者操控、或者破壞 Web 應用中的重要信息。
在討論常見的 Web 應用攻擊之前,我們需要先了解兩個組織:WASC 和 OWASP。這兩個組織在呼吁企業加強應用安全意識和指導企業開發安全的 Web 應用方面,起到了重要的作用。
Web Application Security Consortium(WASC),是一個由安全專家、行業顧問和諸多組織的代表組成的國際團體。他們負責為 WWW 制定被廣為接受的應用安全標準。WASC 組織的關鍵項目之一是“Web 安全威脅分類”,也就是將 Web 應用所受到的威脅、攻擊進行說明并歸納成具有共同特征的分類。該項目的目的是針對 Web 應用的安全隱患,制定和推廣行業標準術語。WASC 將 Web 應用安全威脅分為如下六類:
Authentication(驗證)
用來確認某用戶、服務或是應用身份的攻擊手段。
Authorization(授權)
用來決定是否某用戶、服務或是應用具有執行請求動作必要權限的攻擊手段。
Client-Side Attacks(客戶側攻擊)
用來擾亂或是探測 Web 站點用戶的攻擊手段。
Command Execution(命令執行)
在 Web 站點上執行遠程命令的攻擊手段。
Information Disclosure(信息暴露)
用來獲取 Web 站點具體系統信息的攻擊手段。
Logical Attacks(邏輯性攻擊)
用來擾亂或是探測 Web 應用邏輯流程的攻擊手段。
可以通過如下的網址訪問該組織網站,獲得更多詳細信息:[url]www.webappsec.org[/url]。也可以通過參考資料中鏈接,具體了解“Web 安全威脅分類”項目。
Open Web Application Security Project(OWASP),該組織致力于發現和解決不安全 Web 應用的根本原因。它們最重要的項目之一是“Web 應用的十大安全隱患”,總結了目前 Web 應用最常受到的十種攻擊手段,并且按照攻擊發生的概率進行了排序。這個項目的目的是統一業界最關鍵的 Web 應用安全隱患,并且加強企業對 Web 應用安全的意識。
圖 3: Web 應用十大安全隱患
Web
可以通過如下的網址訪問該組織。
IBM Rational,是上述兩個組織的成員。
常見的 Web 應用攻擊示例
在 OWASP 組織列舉的十大 Web 應用安全隱患中,有兩個概率最高的攻擊手段,它們分別是“跨站點腳本攻擊”(Cross-Site Scripting)和“注入缺陷”(Injection Flaws)。下面將通過舉例來說明這兩種攻擊是如何實施的。
1、 跨站點腳本攻擊
首先來看一下跨站點腳本的利用過程,如圖 4。
圖 4: 跨站點腳本攻擊的過程
跨站點腳本攻擊的過程
在上圖中,惡意攻擊者(這里使用 Evil.org 表示)通過 E-mail 或 HTTP 將某銀行的網址鏈接發給用戶(銀行用 bank.com 表示),該鏈接中附加了惡意的腳本(上圖步驟一);用戶訪問發來的鏈接,進入銀行網站,同時,嵌在鏈接中的腳本被用戶的瀏覽器執行(上圖步驟二、三);用戶在銀行網站的所有操作,包括用戶的 cookie 和 session 信息,都被腳本收集到,并且在用戶毫不知情的情況下發送給惡意攻擊者(上圖步驟四);惡意攻擊者使用偷來的 session 信息,偽裝成該用戶,進入銀行網站,進行非法活動(上圖步驟五)。
因此,只要 Web 應用中,有可被惡意攻擊者利用執行腳本的地方,都存在極大的安全隱患。黑客們如果可以讓用戶執行他們提供的腳本,就可以從用戶正在瀏覽的域中偷到他的個人信息、可以完全修改用戶看到的頁面內容、跟蹤用戶在瀏覽器中的每一個動作,甚至利用用戶瀏覽器的缺陷完全控制用戶的機器。
目前,跨站點腳本攻擊是最大的安全風險。
2、 注入缺陷
目前的 Web 應用中,絕大多數都會向用戶提供一個接口,用來進行權限驗證、搜索、查詢信息等功能。比如一個在線銀行應用,首先會有對注冊客戶進行身份驗證的登錄界面,在正確登錄后,會提供更多交互功能,如根據客戶的銀行卡號信息,查詢客戶的最近交易、轉賬細節等。這些都是注入缺陷的最佳利用場景。所謂注入缺陷,就是在上述場景中,用戶輸入的數據被當做命令和查詢的一部分,送到后端的解釋器中解釋執行。如果用戶的輸入是正常合法的,Web 應用自然會返回正常合理的結果,但是,如果惡意攻擊者,利用輸入數據可被后臺執行的原理,偷梁換柱,使用非法的輸入,脆弱的 Web 應用會怎樣呢?
下面我們舉一個例子來說明注入缺陷是如何進行的。在一個交易網站中,用戶必須輸入產品 ID 號才可以查看該產品的詳細信息。為了實現這個需求,通常會用 SQL 語句查詢數據庫來實現。開發人員在編寫應用程序時,可能會使用如下的 SQL 語句來實現上述目的(這里僅為示例):
1) Select * from products where product_id = ` + 用戶輸入的 ID + `
這里的 products 是數據庫中用來存放產品信息的表,+號表示 SQL 語句需要和用戶輸入的真實 ID 進行拼接。如果用戶輸入 325,則該語句在執行時變為:
Select * from products where product_id = ` 325 `
數據庫會將 ID 為 325 的產品信息返回給用戶。
2) 在界面上,需要用戶輸入產品 ID 的地方,黑客會輸入如下數據:
` or `1`= `1
可以看到,黑客并沒有輸入正常合法的產品編號。
3) 通過黑客的非法輸入,需要執行的 SQL 語句變為:
Select * from products where product_id = ` ` or `1`=`1`
可以看出,SQL 語句的意義就完全改變了,當產品 ID 為空或者 1=1 時,返回產品所有信息,而 1=1 是永遠成立的條件,因此,黑客并沒有輸入任何產品編號,就可以返回數據庫中所有產品的詳細信息。
通過這個例子,我們可以看出,注入缺陷是風險非常高的安全漏洞,一旦 Web 應用中給用戶提供了需要其輸入數據的接口,就有可能遭到攻擊,將后臺的數據完全暴露在用戶的面前。
上述說明的“跨站點腳本攻擊”和“注入缺陷攻擊”,是目前 Web 應用中比例最高的兩種攻擊手段,按照 OWASP 的項目排序,還有如下八種風險性較高的攻擊方法:
Malicious File Execution(惡意文件執行);
Insecure Direct Object Reference(不安全的直接對象引用);
Cross-Site Request Forgery(跨站點的請求偽造);
Information Leakage and Improper Error Handling(信息泄漏和不正確的錯誤處理);
Broken Authentication & Session Management(損壞的認證和 Session 管理);
Insecure Cryptographic Storage(不安全的密碼存儲);
Insecure Communications(不安全的通信);
Failure to Restrict URL Access(未能限制 URL 訪問)
在這里,我們就不過多的討論這幾種安全隱患,可以使用 3.1 節中提供的鏈接得到更多的描述信息。
構筑安全的 Web 應用
功能和性能,往往是我們衡量應用是否滿足需求的指標,但是,對于載體為 Internet 的特殊應用-Web 應用而言,安全性也是必要的考量標準,皮之不存,毛將焉附?如果失去了安全性,即使功能再完備、性能再可靠的 Web 應用,一旦遭到黑客的攻擊和破壞,一切都失去了意義。因此企業,尤其是提供 Web 應用的企業,一定要加強對應用安全的重視程度。
針對目前 Web 應用安全性不高的現狀,IBM Rational 提出了構筑安全 Web 應用的解決方案。
加強全員應用安全性意識
一個根本、底層的戰略手段就是加強企業全員的應用安全意識。正如前面所闡述過的,對于應用而言,無論是開發人員、測試人員、質量管理人員還是項目經理、企業高層,都會對其功能和性能做更多的關注,這也是由于早期應用多為 C/S 架構的應用,安全問題并不突出。但是在當今的環境,就不得不將安全作為應用質量的基礎。
圖 5 中功能、易用性、可靠性、性能、可支持性,是由 Rational Unified Process(RUP)定義的 FURPS 質量模型,它告訴我們應用的質量需要從這幾個方面著手衡量,對于 Web 應用,就必須將安全性作為質量模型的基礎條件。
圖 5: 適于 Web 應用的質量模型