[摘要]分析Web應用安全的現狀以及其重要性,同時分析Web應用所面臨的主要威脅和攻擊,包括Web平臺軟件漏洞、Web認證和授權威脅、非法輸入和參數篡改漏洞、Web應用管理漏洞等,并提出相應的解決方案。最后,通過Web應用安全生命周期體系從軟件工程的角度來研究Web應用的安全及解決方案。
[關鍵詞]Web應用安全漏洞攻擊安全生命周期
中圖分類號:TP393文獻標識碼:A文章編號:1671-7597(2009)1210094-02
一、Web應用安全的現狀及其重要性
當今世界,Internet已經成為一個非常重要的基礎平臺,很多企業都將應用架設在該平臺上,為客戶提供更為方便、快捷的服務支持。這些應用在功能和性能上,都在不斷的完善和提高,然而在安全性上,卻沒有得到足夠的重視。由于網絡技術日趨成熟,黑客們也將注意力從以往對網絡服務器的攻擊逐步轉移到了對Web應用的攻擊上。然而,絕大多數企業將大量的投資花費在網絡和服務器的安全上,沒有從真正意義上保證Web應用本身的安全,給黑客以可乘之機,安全風險達到了前所未有的高度。
一個典型的Web應用通常是標準的三層架構模型:第一層是客戶端;使用動態Web內容技術的部分屬于中間層;數據庫是第三層。在企業Web應用的各個層面,都會使用不同的技術來確保安全性。為了保護客戶端機器的安全,用戶會安裝防病毒軟件;為了保證用戶數據傳輸到企業Web服務器的傳輸安全,通信層通常會使用SSL(安全套接層)技術加密數據;企業會使用防火墻和IDS(入侵診斷系統)/IPS(入侵防御系統)來保證僅允許特定的訪問。
但是,即便有防病毒保護、防火墻和IDS/IPS,企業仍然不得不允許一部分的通訊經過防火墻,同時,Web應用是由軟件構成的,那么,它一定會包含bugs,這些bugs就可以被惡意的用戶利用,他們通過執行各種惡意的操作,或者偷竊、或者操控、或者破壞Web應用中的重要信息。只要訪問可以順利通過企業的防火墻,Web應用就毫無保留地呈現在用戶面前。只有加強Web應用自身的安全,才是真正的Web應用安全解決之道。
二、常見的Web應用安全漏洞及解決方案
(一)Web平臺軟件漏洞
Web平臺軟件漏洞包括Web應用使用的操作系統、HTTP底層服務器軟件(如IIS或Apache)和第三方應用程序中的所有程序錯誤或者可以被利用的漏洞。這個問題也涉及到錯誤配置,包含有不安全的默認設置或管理員沒有進行安全配置的應用程序。
解決方案:
執行嚴格的雙向網絡訪問控制。
找出系統的安全漏洞,及時更新軟件的安全補丁。
不要在源代碼中放置私密信息。
禁用Web服務器上不必要的功能,刪除不需要的應用程序。
定期掃描入侵者。
(二)Web認證威脅
Web認證包括用戶名和口令認證、基于令牌和證書的認證以及認證服務。攻擊者可以通過用戶名枚舉、密碼猜測和竊聽等手段來獲取用戶名和密碼;攻擊者還可以通過SQL注入繞過論證,也可以竊取用戶的Cookie并訪問用戶的帳戶,而不必輸入ID和口令或進行其他認證。
解決方案:
使用強健的密碼策略和賬戶鎖定策略。
采用高強度的證書,例如數字證書。證書認證使用公開密鑰系統和數字證書來認證用戶。證書認證還可以和其他基于密碼的認證機制一起使用,以提供更強健的安全性。
使用HTTPS來保護認證傳輸,避免受到竊聽和重放攻擊的風險。
輸入驗證可以防止SQL注入、腳本注入和命令執行。
確保認證安全令牌,如Session ID和Cookie等不會被輕易竊取。
(三)Web授權威脅
授權可以確定經過認證的用戶可以訪問應用程序的哪些部分,以及他們在應用程序中可執行哪些操作。攻擊者通過爬行訪問控制列表(ACL)以及分析會話(Session)和Cookie中保存的信息來得到非法的授權。
解決方案:
為應用程序定義明確的、一致的訪問策略,配置好用戶角色。
使用SSL加密措施防止攻擊。
不要在會話中包含個人敏感信息。
一旦改變權限要重新生成會話ID。
(四)非法輸入和參數篡改漏洞
在數據被輸入程序前忽略對數據合法性的檢驗是一個常見的編程漏洞,它導致SQL注入和數據存儲攻擊、腳本攻擊(包括跨站點腳本攻擊)和緩沖區溢出等。
注入漏洞,特別是SQL注入漏洞,主要是利用目標網站程序未對用戶輸入的字符進行特殊字符過濾或合法性校驗,可直接執行數據庫語句,導致網站存在安全風險。
跨站點腳本(XSS)攻擊利用網頁及Cookies漏洞,攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意用戶的特殊目的。
參數篡改包括操縱URL字符串,以檢索用戶以其他方式得不到的信息。訪問Web應用的后端數據庫就是通過常常包含在URL中的SQL調用來進行的。惡意的用戶可以操縱SQL代碼,以便將來有可能檢索一份包含所有用戶、口令、信用卡號的清單或者儲存在數據庫中的任何其他數據。
解決方案:
對輸入數據采用服務器端驗證。
限制輸入字段的長度和數字邊界檢查以防止緩沖區溢出。
對HTML和SQL格式中的字符進行編碼,如將腳本中的尖括號轉化為對應的編碼以防止腳本攻擊。
使用正則表達式查找授權或未經授權的內容。
在應用程序中使用參數來構建查詢以及盡可能在數據庫中使用存儲過程。
數據庫加密,通過表級別和字段級別的加密保護數據。
(五)Web應用管理漏洞
包括管理員配置錯誤和開發者錯誤造成的漏洞,例如不必要的Web服務器擴展、直接訪問瀏覽以及文件、用戶和狀態頁面信息泄露等。
服務器目錄瀏覽是一個不安全的配置,管理員把敏感log放在Web目錄上,又開放了瀏覽目錄權限,使得黑客直接訪問這個目錄就把這些敏感的log打開就獲取到了明文的用戶名、密碼。
開發人員常常建立一些后門并依靠調試來排除應用程序的故障,這些安全漏洞經常被留在一些放在Internet上的最終應用中。一些常見的后門使用戶不用口令就可以登錄或者訪問允許直接進行應用配置的特殊URL。
解決方案:
禁止IIS的擴展。
保持站點目錄整潔并實行正確的訪問控制。
提高站點開發者的水平和安全意識。
(六)Web客戶端攻擊
通過釣魚軟件、間諜軟件和惡意廣告對在線用戶進行欺詐。釣魚軟件是通常以精心設計的虛假網頁引誘用戶上當,達到盜取銀行賬號、信用卡號碼等目的。虛假網頁一般以eBay和PayPal等大家熟悉的網頁為招牌,用戶點擊鏈接之后就進入了一個看起來與真實網頁完全相似的網頁。
解決方案:
運行防病毒軟件以及反釣魚和反間諜軟件工具。
提高警惕,高度謹慎地處理基于Internet的請求和事務。
(七)程序拒絕服務攻擊
程序拒絕服務(DoS)攻擊包括計算機網絡帶寬攻擊和連通性攻擊。帶寬攻擊指以極大的通信量沖擊網絡,使得所有可用網絡資源都被消耗殆盡,最后導致合法的用戶請求就無法通過。連通性攻擊指用大量的連接請求沖擊計算機,使得所有可用的操作系統資源都被消耗殆盡,最終計算機無法再處理合法用戶的請求。
解決方案:
網絡管理員要積極謹慎地維護系統,增強服務器的安全性,確保無安全隱患和漏洞。
安裝防火墻等安全設備過濾DoS攻擊。
網絡管理員應當定期查看安全設備的日志,及時發現對系統的安全威脅行為。
在設計Web應用程序時,通過控制用戶登錄和各種數據處理方式來避免DoS攻擊。如盡可能不要在客戶端做數據處理,盡可能從緩存讀取數據庫等等。
(八)不適當的錯誤處理
通過對各種錯誤的處理操作,應用程序可能由于其不適當的錯誤處理在無意中泄露其配置信息、內部運作信息以及侵犯隱私的敏感信息。攻擊者利用該漏洞可能盜取敏感的數據,甚至發動更為危險的攻擊行為。
解決方案:
使用結構化錯誤處理,以避免使用軟件默認的錯誤處理器而暴露信息。
確定結構化錯誤處理器,當代碼失敗時,可以安全地失敗。
三、Web應用安全生命周期體系
以上是從技術角度討論Web應用的安全,但是Web應用安全是安全教育、安全技術、安全制度的綜合,是一個持續演進的過程,不僅僅局限于技術。Web應用開發生命周期包括可行性分析與開發項計劃、需求分析,分析設計、編碼實現、測試以及發布和維護,開始得到一個初始的版本,這個過程又重新整理新的需求,根據用戶反饋,新的需求又被更新、設計,加到新的開發計劃里去。這是一個迭代的過程。在每一個步驟都要實施安全教育,并且使用相關的安全技術,來保證常見的Web缺陷能夠在成本最低的階段把它解決掉。
第一步,定義角色、職責。一個典型的結構包括管理決策層負責安全制度的決策,然后簽署相關的政策文件。專業的安全部門負責安全技術的開發、研發,然后還有架構的安全審核、安全流程開發、漏洞的響應,這是一個專業的團隊。設立一個安全專員負責整個項目,整個流程里面所有的這些安全需求、安全規范,安全接口人為業務部門和安全部門起到一個溝通作用。通過這樣一個結構,每個人擔當什么角色都明確定義出來,這樣每個人就能知道具體做哪些事情。角色和職責確定之后,就是安全意識的培養。
第二步,在需求這個階段就必須把安全需求提出來。在開發過程中,還可能有需求變更的情況。如果需求變更了,對現有系統有哪些影響,這些都需要在需求這個階段確定,并且要保證安全需求能夠持續得到跟蹤。
第三步,設計一個安全的架構。明確資源、角色、邊界之后就可以對不同的資源提出不同的安全需求,提供不同程度的保護措施。當這些都確定后,可以設計一個最簡單的方案,包括安全的措施,并且在這個過程中設計一個驗證的方案和風險分析。這個主要通過幾個步驟來實現,首先是需要分析運營環境中有哪些安全因素,是網絡這一層還是應用這一層,還是合作方這一層。確定最有可能的威脅,哪一些威脅是最嚴重的,最有可能發生的。一旦發生之后它的影響會有多大,它發生的頻率有多高。一旦這些清楚之后,我們就可以制定降低威脅和風險的措施。當這個架構設計好之后,通常應該還是經過一個驗證、評審階段。還有在架構進行重大調整的時候,也需要評審,這個重構會不會對現有架構產生新的威脅。
第四步,安全編碼。對于跨站、跳轉、注入這些漏洞,大多數都是非常簡單的不安全編碼疏忽所導致的,可以在編碼這個階段通過使用一些安全編碼實踐來避免掉。在這個階段可以提供一些工具的支持,比如靜態代碼分析,可以分析一些SQL注入、跨站腳本,同時可以提供一些脆弱性測試工具。在這個階段還要進行重審代碼,把殘留的不安全代碼清理掉。
第五步,測試這個階段需要為安全需求創建測試策略和用例。
第六步,發布和維護階段。部署之前要確保運營主機環境安全,主要是一些配置。通過在線監控和掃描可以發現存在的漏洞和文件篡改,對于一些入侵也可以進行某些告警,同時對業務異常信息進行監測與分析。
通過以上幾個安全開發周期的相關策略,基本可以消滅大部分的安全隱患。但是還是可能會存在漏網之魚,那就是要通過安全響應來進行善后處理。主要是經常監視這些漏洞的來源,是來自外部報告還是內部滲透測試,還是被一些地下組織利用。漏洞發現之后要分析與定位,到底涉及哪些系統,發現的問題是在哪個地方,然后制定修復計劃。進行回歸測試,確保沒有問題之后再重新發布上線。
四、結語
只要我們從思想上重視Web應用的安全性并且在Web開發的生命周期的每個階段都采取行之有效的方法來避免漏洞和抵御攻擊,就一定可以將Web應用的風險降到最低。
本文作者創新點:從技術和管理兩個不同的角度分別討論了Web應用程序的安全性,并給出了行之有效的解決方案。
參考文獻:
[1]鄭明、邵貝恩等,企業應用集成服務的安全策略設計與實現[J].微計算機信息,2009,2-3:3-4.
[2](美)JoelScambray,黑客大曝光[M].北京:電子工業出版社,2008-6:108,140,208-209.
[3](美)Mark M.Burnett,拒絕黑客[M].北京:電子工業出版社,2005-2:264-267.
[4]張敏波,網絡安全實戰詳解[M].北京:電子工業出版社,2008-5:365-369.
[5]丁妮,Web應用安全研究[D].中國優秀碩士學位論文全文數據庫,2007-5:19-23.
[6]劉楠,一種Web應用安全增強方案的設計與實現[D].中國優秀碩士學位論文全文數據庫,2007-3:41-43.
[7]鄭繼勝,Web網站安全防御系統的研究與應用[D].中國優秀碩士學位論文全文數據庫,2009-6:28-30.
作者簡介:
孫繼紅(1970-),女,漢族,湖北武漢人,廣東科貿職業學院計算機信息工程系講師,研究生,主要從事網絡數據庫和軟件技術研究。