原文地址:http://net.zdnet.com.cn/network_security_zone/2007/0824/468077.shtml
隨著Web應用程序的增多,隨之而來的就是這些Web應用程序所帶來的安全漏洞。不遵從規(guī)范化的編碼指導,會使企業(yè)、員工以及企業(yè)的客戶面對嚴重的安全風險,遭到各種惡意攻擊。
我們將向大家介紹Open Web Application Security Project(開放式Web應用程序安全項目,OWASP)10要素,以及OWASP建議大家在軟件開發(fā)生命周期中應該嵌入的標準化方法。
商業(yè)風險
現在的企業(yè)都在向客戶提供通過瀏覽器訪問企業(yè)信息的功能,同時集成Web服務的應用程序也越來越多,這些都導致企業(yè)所面臨的風險不斷增加。這并不代表開發(fā)人員沒有認真的對待程序開發(fā)工作,只是當Web應用程序的數量越來越多,其潛在的隱患也會越來越頻繁的暴露在互聯網下。根據OWASP的觀點:
“當企業(yè)發(fā)布了一個Web應用程序,它們就是在邀請全球的網民向其發(fā)送HTTP請求。而攻擊內容也可以隨著這些正常的HTTP請求穿過防火墻,過濾系統(tǒng),系統(tǒng)平臺上的安全措施以及網絡中的入侵檢測系統(tǒng),而不被企業(yè)所發(fā)現。這意味著企業(yè)的Web應用程序代碼本身就是企業(yè)安全圍墻的一部分。隨著企業(yè)所采用的Web應用程序數量和復雜度的增加,企業(yè)的安全圍墻將更多的暴露在網絡中。”
目前,企業(yè)所開發(fā)的很多新應用程序都是Web應用程序。另外,Web服務也越來越頻繁的被用來集成Web應用程序或與Web應用程序進行交互。所帶來的問題就是,Web應用程序和服務的增長已經超越了程序開發(fā)人員所接受的安全培訓以及安全意識的范圍。
隨著存在安全隱患的Web應用程序數量的增長,OWASP也總結出了Web應用程序的十大脆弱點。在這個10要素列表中,不但包括了Web應用程序的脆弱性介紹,還包括了OWASP的建議內容,幫助程序開發(fā)人員和企業(yè)盡量避免這些脆弱點給企業(yè)系統(tǒng)帶來的風險。
OWASP 10要素中還包括了一個指南,幫助企業(yè)決定該如何向客戶提供信息。比如聯邦貿易委員會(FTC)就在2003年1月的商業(yè)案例文檔中將這個列表作為了信息安全的參考內容。同年,FTC還將OWASP 10要素列表作為指控Guess公司沒有盡力做好客戶的信息安全保護工作的參考資料。
10要素列表
以下列表來自OWASP 10要素項目:(OWASP,2006):
一、Unvalidated Input 非法輸入——在數據被輸入程序前忽略對數據合法性的檢驗,是一個常見的編程漏洞。隨著我們對Web應用程序脆弱性的調查,非法輸入的問題已經成為了大多數Web應用程序安全漏洞的一個主要特點。
二、Broken Access Control 失效的訪問控制——大部分企業(yè)都非常關注對已經建立的連接進行控制,但是,允許一個特定的字符串輸入可以讓攻擊行為繞過企業(yè)的控制。
三、Broken Authentication and Session Management 失效的賬戶和線程管理——良好的訪問控制并不代表萬事大吉了。企業(yè)還應該保護用戶的密碼,會話令牌,賬戶列表以及其它任何可以給攻擊者提供有利信息幫助他們攻擊企業(yè)網絡的內容。
四、Cross Site Scripting (XSS) Flaws 跨站點腳本攻擊——XSS是一種常見的攻擊。當攻擊腳本被嵌入企業(yè)的Web頁面或其它可以訪問的Web資源中,當沒有保護能力的臺式機訪問這個頁面或資源時,腳本就會被啟動。這種問題可以影響成百上千的員工以及企業(yè)客戶的終端電腦。
五、Buffer Overflows 緩存溢出——緩存溢出問題一般出現在較早的編程語言如C語言編寫的程序中。這種編程錯誤其實也是由于沒有很好的確定輸入內容在內存中的位置所草成的。在本文的后續(xù)部分中,我們會講到,通過一些高級的編程環(huán)境,如Java以及.Net,可以很好的控制此類問題。
六、Injection Flaws 注入式攻擊——如果沒有成功的阻止帶有語法含義的輸入內容,有可能導致對數據庫信息的非法訪問。比如在Web表單中輸入的內容,應該保持簡單,并且不應該還有可被執(zhí)行的代碼內容。
七、Improper Error Handling 異常錯誤處理——當錯誤發(fā)生時,向用戶提交錯誤提示是很正常的事情,但是如果提交的錯誤提示中包含了太多的內容,就有可能會被攻擊者分析出網絡環(huán)境的結構或配置。
八、Insecure Storage 不安全的存儲——對于Web應用程序來說,妥善的保存密碼,用戶名,以及其它與身份驗證有關的信息是非常重要的工作。對這些信息進行加密是非常有效的方式,但是一些企業(yè)會采用那些未經實踐驗證的加密解決方案,其中就可能存在漏洞。
九、Application Denial of Service 程序拒絕服務——與拒絕服務攻擊(DoS)類似,應用程序的DoS攻擊利用大量非法用戶搶占應用程序資源,導致合法用戶無法使用該Web應用程序。
十、Insecure Configuration Management 不安全的配置管理——有效的配置管理過程可以為Web應用程序和企業(yè)的網絡架構提供良好的保護。 針對以上列表,我有兩點要說明一下。首先,這個列表并不能涵蓋企業(yè)的Web應用程序中的全部脆弱點,它只是OWASP的成員組織最常遇到的問題,因此也是你應該著重檢查的內容。
另外,這個列表并沒有先后順序。它只是根據每個OWASP成員根據自己企業(yè)的Web應用程序環(huán)境的脆弱性所排列的。
跨站點腳本是Web程序很常見的漏洞,不論是個人用戶還是商業(yè)用戶,都會由于這種漏洞而遭受攻擊。這里我們將詳細介紹跨站點腳本的脆弱性,以及由此使得個人用戶和企業(yè)用戶所面臨的風險。最后還會介紹如何消除或者抵御這類攻擊。
我們將著重介紹Web應用程序中最大的脆弱性領域――跨站點腳本(XSS)。XSS的脆弱性由來已久,然而,隨著越來越多的蠕蟲和病毒利用這一脆弱性進行破壞活動,企業(yè)系統(tǒng)中與XSS相關的安全風險也越來越明顯。
什么是XSS?
XSS漏洞一般出現在可以注入代碼的Web程序中。利用這一漏洞的腳本可能來自服務器,但是并不在服務器上執(zhí)行,而是在客戶端的工作站上執(zhí)行。目前有三種基本的XSS漏洞攻擊:映射,存儲和基于DOM(文檔對象模塊)
其中反射攻擊最為常見。這類漏洞經常出現在網頁中可以動態(tài)輸入內容并返回結果的區(qū)域。搜索頁面就是一個很典型的例子。當攻擊者發(fā)現了存在這一漏洞的網頁,他只需要將腳本輸入文本框。當頁面重新顯示整段文字時,腳本便被執(zhí)行了。
在很多情況下,黑客通過一些社會學工程來引誘用戶點擊經過特殊處理的鏈結 ,從而導致攻擊發(fā)生。這種方式可以讓黑客將腳本注入到網頁中。(Jeremiah Grossman, "Cross-site Scripting Worms and Viruses," April 2006)
存儲型弱點正如其名字所表示的意思。攻擊者將惡意代碼提交到有XSS漏洞的網站,或者網站的某個經常被用戶訪問的部分。比如一些社會網站以及用戶提交評論的頁面。當受害者打開相應的頁面時,惡意腳本就會在用戶不知情的情況下自動執(zhí)行。因為瀏覽器認為這個存儲型惡意腳本是來自受信的Web網站或服務器的。
以下是一個非常簡單的存儲型腳本攻擊的例子。
腳本一般會插入到表單中,這在很多論壇或者擁有大量用戶的服務器上很常見。比如黑客會將以下代碼通過正常的發(fā)貼方式上傳到在線論壇:
<script>alert('Hello World')</script>
當不知情的用戶打開這個帖子,代碼就會在用戶的電腦上執(zhí)行。雖然我給出的這段代碼沒有任何有害的內容,但是如果代碼中包含了以下內容,就不那么樂觀了:
◆顯示許可權限錯誤信息
◆提示用戶輸入密碼
◆將用戶的密碼通過郵件發(fā)送到黑客設定的服務器上
最后一種XSS弱點是基于DOM的攻擊。作為AJAX的一部分,DOM是一種:
“讓程序員可以訪問和控制Web頁面文檔內容的接口。它提供了一種結構化的面向對象的方法,可以對頁面中特定的內容進行檢索以及設定對象的屬性。” (Mike Hall, "Introduction to the Document Object Model," 2007).
在客戶端的腳本中,存在DOM漏洞。一般來說這出現在腳本模塊訪問URL需要參數的時候。如果腳本使用的參數信息沒有經過編碼或過濾就寫入到了HTML文件中,那么很有可能會存在XSS漏洞。有關這方面的例子和更詳細的說明,可以參考2005年Amit Klein的文章"DOM Based Cross Site Scripting or XSS of the Third Kind,"基于DOM的XSS攻擊難以防御。因為DOM頁面層中的所有方法都是受信的,植入在參數中的惡意代碼可以和其他代碼一樣被執(zhí)行。與存儲型XSS攻擊一樣,DOM腳本攻擊的防御還是要依靠程序員在編程時的細心和安全意識。
商業(yè)沖擊
根據Grossman的觀點,當攻擊者成功利用XSS漏洞進行攻擊后,可能進一步實施以下工作:
◆強制發(fā)送電子郵件信息
◆轉移資本
◆刪除或修改數據
◆使用被害人的電腦攻擊其他服務器
◆下載非法內容
基本上說,Web網頁腳本所能做的工作,黑客都可以通過成功的XSS攻擊而實施。
預防XSS攻擊
由于很多Web應用程序都包含有漏洞,因此最好的預防XSS攻擊的方式就是檢測輸入內容的合法性。比如,確保輸入內容中不包括尖括號。這看上去很簡單,但確是防御XSS攻擊一個非常有效的手段。根據McClure, Scambray, 以及 Kurtz的說法:
“我們遇到的幾乎所有的XSS攻擊都沒有對輸入內容的尖括號進行屏蔽或者重新編碼” (Hacking Exposed, p. 565) 。
但是這并不僅僅是尖括號的問題。任何語法符號都不應該被允許。語法符號可能是來自數據庫,或其他服務器。輸入Web應用程序的任何內容必須經過過濾,確保用戶最終看到的是單純的文本內容。
企業(yè)應對XSS攻擊的方式還包括:
1.教育員工在點擊電子郵件中的鏈結或即時消息中的鏈結時,要特別小心。
2.建立互聯網接入控制策略,限制企業(yè)員工訪問高風險網站(比如成人網站以及盜版媒體網站) 以及未知風險的網站。
3.確保用戶的電腦上都安裝了最新版的防火墻軟件和反病毒軟件。設置防火墻限制流出的數據。
4.確保所有敏感功能不會通過機器人或者第三方服務器來啟動。 (Grossman).
5.手動或自動進行代碼掃描,主動發(fā)現潛在的XSS漏洞。
總結
XSS漏洞會給企業(yè)網絡帶來嚴重的安全風險。企業(yè)的敏感數據很可能由于XSS漏洞被泄露出去。正如我們上面介紹的,預防XSS攻擊,需要企業(yè)終端用戶以及程序員的協同努力,通過良好的技術方案抵御這種人為危害。
posted on 2008-10-22 13:42
阿蜜果 閱讀(1022)
評論(1) 編輯 收藏 所屬分類:
Web