付俊,馮運波,楊光華,張峰,粟栗
(1 中國移動通信研究院,北京 100053;中國移動通信集團公司,北京 100032)
漏洞,在維基百科中又稱為計算機安全隱患,指計算機系統安全方面的缺陷,使得系統或其應用數據的保密性、完整性、可用性、訪問控制、監測機制等面臨威脅。
漏洞難以避免,一個系統自發布之日起,隨著用戶的深入使用,系統中存在的漏洞會被不斷暴露出來,這些早先被發現的漏洞也會不斷被系統供應商發布的補丁軟件修補,或在以后發布的新版系統中得以糾正。而在新版系統糾正了舊版本中具有漏洞的同時,也可能會引入一些新的漏洞和錯誤。因而隨著時間的推移,舊的漏洞會不斷消失,新的漏洞會不斷出現。漏洞問題也會長期存在。
所以關于漏洞的解決方案沒有一勞永逸的方法,需要一套完整的漏洞分析、發現和管理的機制。本文以某省曾出現的網上營業廳重置任意用戶密碼漏洞為例,闡述了漏洞的生命周期管理體系。
漏洞從產生至消亡,在整個生命周期中,可分為如下幾個階段:漏洞產生,漏洞發現,漏洞公開,漏洞管理和漏洞消亡。幾乎任何一個安全漏洞在其生命周期過程中都有被惡意用戶利用的風險,但是在不同階段,其風險類型也并不相同。用圖形來表示安全漏洞整個生命周期階段與風險的關系,如圖 1所示。

圖 1 漏洞生命周期風險圖
以某網上營業廳重置任意用戶密碼漏洞為例,在編碼階段,沒有對用戶提交的數據進行有效校驗,導致存在嚴重邏輯錯誤,攻擊者可以重置任意用戶網上營業廳登錄密碼。該漏洞雖然存在于現網,但在未被發現之前,其風險最低;一旦被發現,在公開之前,其漏洞細節和利用方法往往掌握在少數人手中,這些人可能是業界安全人員,也可能是地下黑客組織,其風險很高,但由該漏洞產生的后果或受影響的程度是未知的,稱之為黑色風險;如果漏洞出現在用戶端,則漏洞會由官方公開,并同時公布修復方法或修復補丁,由用戶自行修復,如果漏洞出現在服務端,則漏洞的公開和修復管理是同時進行的,該階段的風險是可以做到預知和監控的,稱為灰色風險;最后是漏洞的消亡,即漏洞生命周期的最后終止階段。
2.1.1 漏洞產生階段分析
很多因素可能導致漏洞的產生,主要在設計和編碼階段引入,大致可分為以下兩類。
(1)設計缺陷:系統或軟件在設計階段,可能沒考慮到安全因素或安全機制設計不健全,則必然會產生安全漏洞。如TCP/IP的漏洞,TCP/IP現在已經廣為應用、但是它卻是很早以前設計出來的。因此,存在許多不足造成安全漏洞在所難免,例如smurf攻擊、IP地址欺騙以及SYNflood等。
(2)編碼缺陷:由于編程人員的水平問題,經驗或當時安全技術和方法所局限,或者未按安全設計進行編碼實現,使得系統存在一些安全隱患。無論是服務器程序、客戶端軟件還是操作系統,都可能會存在不同程度的缺陷。
2.1.2 漏洞產生階段防護措施
針對上述漏洞產生的原因分析,制定有效的管理方法,能夠在漏洞的產生階段對漏洞進行有效預防,避免漏洞帶來的風險,減少后期修復的成本。
(1)設計缺陷:在設計階段,充分考慮各種可能出現的安全漏洞與風險,使用各種安全設計方法和工具進行軟件安全建模,制定相應的安全機制。
(2)編碼缺陷:針對軟件在編寫過程中的漏洞和問題引入,可采取以下措施合理改善軟件源頭帶來的漏洞:加強技術人員的安全意識,提高安全技術,確保高質量代碼的完成同時不留下后門等一系列安全隱患;嚴格安全設計進行編碼,避免在編碼階段漏洞的引入。
2.2.1 漏洞的常見發掘手段
安全漏洞的挖掘與發現機制有很多,主要包括下述方式。
(1) Fuzz測試(黑盒測試):是一種特殊的黑盒測試, 通過輸入隨機構造的數據,使得軟件出錯甚至崩潰。Fuzz測試的用例一般是大量的能引起軟件產生異常的數據。Fuzz測試記錄了大量的異常信息,為漏洞分析提供了原材料。 分析人員從這些信息中篩選出可能存在漏洞的信息, 并通過原測試用例再次進行測試、分析,最終確定漏洞是否存在。
(2) 白盒測試(源碼審計):現在有了一系列的工具都能協助發現程序中的安全BUG。這類測試通常由廠商自己完成,通過開發人員的單元測試,發現代碼中的安全缺陷并進行修復。
(3) 灰盒測試(IDA反匯編審計):這和上面的源碼審計非常類似,對分析對象不是源碼,而是可運行的程序或系統,但IDA是一個非常強大的反匯編平臺,能夠支持基于匯編碼進行安全審計。
(4) 動態跟蹤分析:記錄程序在不同條件下執行的全部和安全問題相關的操作(如文件操作),然后分析這些操作序列是否存在問題,這是競爭條件類漏洞發現的主要途徑之一,其它的污點傳播跟蹤也屬于這類。
2.2.2 漏洞發現后的處理方法
對于已發現的安全漏洞,主要依據以下流程進行處理。
(1) 記錄漏洞存在點及詳細信息。
(2) 對漏洞進行驗證,確認為系統真實存在的安全隱患。
(3) 分析漏洞的危害程度。
(4) 嘗試進行解決和修復。
(5) 確認漏洞是否已被修復,或該漏洞不會產生任何安全問題。
2.3.1 漏洞的分類
根據漏洞的公開方式可分為以下幾種:
(1) 官方公布:這類漏洞通常由于補丁的發布而進行公開,廠商對已發現的安全漏洞進行修補并發布補丁,期望通過補丁的方式避免用戶由于該漏洞帶來的損失。這類公開方式通常為定期公開,或即時公開,根據不同公司的補丁策略方式有所不同。
(2) 善意公開(白帽子):一些技術人員或普通用戶在使用或對產品的嘗試過程發現了一些漏洞,并不對所有用戶進行公開,而是通過提醒系統的對應廠商的形式進行漏洞的修補,這類漏洞的公開通常是善意的,發現者通常不會利用發現的漏洞對系統進行攻擊或破壞。
(3) 惡意利用(黑客):攻擊者利用不斷的探索和嘗試發現系統存在的漏洞,并利用該漏洞進行操作以獲取利益或進行惡意破壞等。這類漏洞一旦由惡意攻擊者進行公開后,帶來的損失比較巨大。
值得一提的是,在計算機領域中,有一類漏洞稱為0day漏洞,通常是指還沒有補丁的漏洞。這類漏洞通常對大眾不會有什么影響,但會導致攻擊者瞄準的目標受到精確攻擊,危害也是非常之大。而0day攻擊則是指利用這種漏洞進行的攻擊。提供該漏洞細節或者利用程序的人通常是該漏洞的發現者。0day漏洞的利用程序對網絡安全具有巨大威脅。
2.3.2 漏洞公開后的采用措施
系統官方應立即對已公開的漏洞進行修復,及時發布漏洞補丁,并在發現漏洞至發布補丁期間采取必要的措施避免給用戶帶來損失或不良體驗。
用戶應即時或定期對系統或應用軟件進行更新,對發布的補丁及時進行安裝與升級,確保自身系統不被攻擊者利用。
安全漏洞被披露或公開后,對漏洞進行有效管理,降低漏洞帶來的影響。對于服務端出現的漏洞,可先評估漏洞的威脅等級,以及漏洞利用的實施成本,再制定漏洞的修復方案,對于威脅等級較高且實施成本較低的漏洞,需要及時進行修復,對于威脅等級較低且實施成本較高的漏洞,可酌情根據實際情況制定防護措施,如加強訪問控制隔離等措施。對于出現在用戶端的漏洞,及時發布更新補丁或臨時解決方案,避免影響的擴大。
2.4.1 漏洞的分級
為了減少主觀臆測對漏洞等級評定的影響,應對不同程度的漏洞進行分級,合理定制解決方案,確保系統安全,可根據以下屬性對漏洞進行等級分析:
(1)潛在危險程度(風險從高至低):遠程獲取系統權限或使系統拒絕服務;本地越權訪問;敏感信息泄露。
(2)漏洞利用實施成本(風險從高至低):只有極少人掌握該項漏洞利用技術,或只有在某些特殊情況下才具備該漏洞的利用條件;對漏洞利用人員有一定門檻要求,且需要投入一些資源,如租賃和搭建釣魚網站服務器;漏洞利用非常簡單,存在自動化的利用工具。
(3)影響用戶程度(風險從高至低):對所有用戶有影響;對關鍵用戶或部分用戶有影響;對極少數用戶有影響;對用戶無影響。
(4)修復成本(人力和時間):修復成本較高,大于重新進行開發的成本;修復成本中等,時間較長;修復成本較低,人力時間消耗較少。
根據以上幾項對漏洞進行定級,根據每項進行加權處理,得到每個漏洞的處理優先級,再進行下一步操作。
2.4.2 漏洞的管理修復方式
根據漏洞產生的生命周期,對漏洞進行不同的管理和修復。漏洞管理方式主要分為主動修復及漏洞規避等方式。
(1)主動修復:對于服務端漏洞,可修改代碼或系統升級進行主動修復;對于客戶端漏洞,可發布更新補丁,由公眾進行升級修復,升級方式可直接在官網下載或使用第三方工具進行自動更新;
(2)漏洞規避:對于服務端漏洞,可使用其它方式,如部署安全防護設備或增加訪問控制策略的方式進行漏洞規避;對于客戶端漏洞,可使用臨時解決方案,如個人防火墻、禁用漏洞端口或服務以及注冊表修改等方式進行漏洞規避。
漏洞的消亡通常通過補丁進行修復,在保證不引進新的漏洞前提下完成以往漏洞的修補,達到漏洞消亡的目的。
除對漏洞進行修復以外,還可以對軟件進行新版本更新,徹底從根源上去除漏洞的載體,避免后期產生安全問題。
在對漏洞進行處理后,應記錄有關漏洞共性信息,確保再次開發或應用時不會重蹈覆轍,對以往漏洞進行研究,避免類似問題再次產生。
針對當前安全漏洞生命周期理論化以及系統化方面不足的問題,本文首先系統闡述安全漏洞生命周期的各個階段及其風險特點,然后從各個階段如何防控與修復漏洞進行闡述,對系統安全漏洞的危害性進行全面評估。為安全人員快速、有效地制定有針對性的防御策略提供有力的理論依據。
[1] Rozenblit M. Security for Telecommunications Network Management[M].Wiley-IEEE Press, 2000.
[2] Jacobs S. Engineering Information Security: The Application of Systems Engineering Concepts to Achieve Information Assurance[M]. Wiley-IEEE Press, 2000.
[3] Douligeri C, Serpanos D. Network Security:Current Status and Future Directions[M]. Wiley-IEEE Press 2007.