付俊,馮運波,楊光華,張峰,粟栗
(1 中國移動通信研究院,北京 100053;中國移動通信集團(tuán)公司,北京 100032)
漏洞,在維基百科中又稱為計算機(jī)安全隱患,指計算機(jī)系統(tǒng)安全方面的缺陷,使得系統(tǒng)或其應(yīng)用數(shù)據(jù)的保密性、完整性、可用性、訪問控制、監(jiān)測機(jī)制等面臨威脅。
漏洞難以避免,一個系統(tǒng)自發(fā)布之日起,隨著用戶的深入使用,系統(tǒng)中存在的漏洞會被不斷暴露出來,這些早先被發(fā)現(xiàn)的漏洞也會不斷被系統(tǒng)供應(yīng)商發(fā)布的補丁軟件修補,或在以后發(fā)布的新版系統(tǒng)中得以糾正。而在新版系統(tǒng)糾正了舊版本中具有漏洞的同時,也可能會引入一些新的漏洞和錯誤。因而隨著時間的推移,舊的漏洞會不斷消失,新的漏洞會不斷出現(xiàn)。漏洞問題也會長期存在。
所以關(guān)于漏洞的解決方案沒有一勞永逸的方法,需要一套完整的漏洞分析、發(fā)現(xiàn)和管理的機(jī)制。本文以某省曾出現(xiàn)的網(wǎng)上營業(yè)廳重置任意用戶密碼漏洞為例,闡述了漏洞的生命周期管理體系。
漏洞從產(chǎn)生至消亡,在整個生命周期中,可分為如下幾個階段:漏洞產(chǎn)生,漏洞發(fā)現(xiàn),漏洞公開,漏洞管理和漏洞消亡。幾乎任何一個安全漏洞在其生命周期過程中都有被惡意用戶利用的風(fēng)險,但是在不同階段,其風(fēng)險類型也并不相同。用圖形來表示安全漏洞整個生命周期階段與風(fēng)險的關(guān)系,如圖 1所示。
圖 1 漏洞生命周期風(fēng)險圖
以某網(wǎng)上營業(yè)廳重置任意用戶密碼漏洞為例,在編碼階段,沒有對用戶提交的數(shù)據(jù)進(jìn)行有效校驗,導(dǎo)致存在嚴(yán)重邏輯錯誤,攻擊者可以重置任意用戶網(wǎng)上營業(yè)廳登錄密碼。該漏洞雖然存在于現(xiàn)網(wǎng),但在未被發(fā)現(xiàn)之前,其風(fēng)險最低;一旦被發(fā)現(xiàn),在公開之前,其漏洞細(xì)節(jié)和利用方法往往掌握在少數(shù)人手中,這些人可能是業(yè)界安全人員,也可能是地下黑客組織,其風(fēng)險很高,但由該漏洞產(chǎn)生的后果或受影響的程度是未知的,稱之為黑色風(fēng)險;如果漏洞出現(xiàn)在用戶端,則漏洞會由官方公開,并同時公布修復(fù)方法或修復(fù)補丁,由用戶自行修復(fù),如果漏洞出現(xiàn)在服務(wù)端,則漏洞的公開和修復(fù)管理是同時進(jìn)行的,該階段的風(fēng)險是可以做到預(yù)知和監(jiān)控的,稱為灰色風(fēng)險;最后是漏洞的消亡,即漏洞生命周期的最后終止階段。
2.1.1 漏洞產(chǎn)生階段分析
很多因素可能導(dǎo)致漏洞的產(chǎn)生,主要在設(shè)計和編碼階段引入,大致可分為以下兩類。
(1)設(shè)計缺陷:系統(tǒng)或軟件在設(shè)計階段,可能沒考慮到安全因素或安全機(jī)制設(shè)計不健全,則必然會產(chǎn)生安全漏洞。如TCP/IP的漏洞,TCP/IP現(xiàn)在已經(jīng)廣為應(yīng)用、但是它卻是很早以前設(shè)計出來的。因此,存在許多不足造成安全漏洞在所難免,例如smurf攻擊、IP地址欺騙以及SYNflood等。
(2)編碼缺陷:由于編程人員的水平問題,經(jīng)驗或當(dāng)時安全技術(shù)和方法所局限,或者未按安全設(shè)計進(jìn)行編碼實現(xiàn),使得系統(tǒng)存在一些安全隱患。無論是服務(wù)器程序、客戶端軟件還是操作系統(tǒng),都可能會存在不同程度的缺陷。
2.1.2 漏洞產(chǎn)生階段防護(hù)措施
針對上述漏洞產(chǎn)生的原因分析,制定有效的管理方法,能夠在漏洞的產(chǎn)生階段對漏洞進(jìn)行有效預(yù)防,避免漏洞帶來的風(fēng)險,減少后期修復(fù)的成本。
(1)設(shè)計缺陷:在設(shè)計階段,充分考慮各種可能出現(xiàn)的安全漏洞與風(fēng)險,使用各種安全設(shè)計方法和工具進(jìn)行軟件安全建模,制定相應(yīng)的安全機(jī)制。
(2)編碼缺陷:針對軟件在編寫過程中的漏洞和問題引入,可采取以下措施合理改善軟件源頭帶來的漏洞:加強技術(shù)人員的安全意識,提高安全技術(shù),確保高質(zhì)量代碼的完成同時不留下后門等一系列安全隱患;嚴(yán)格安全設(shè)計進(jìn)行編碼,避免在編碼階段漏洞的引入。
2.2.1 漏洞的常見發(fā)掘手段
安全漏洞的挖掘與發(fā)現(xiàn)機(jī)制有很多,主要包括下述方式。
(1) Fuzz測試(黑盒測試):是一種特殊的黑盒測試, 通過輸入隨機(jī)構(gòu)造的數(shù)據(jù),使得軟件出錯甚至崩潰。Fuzz測試的用例一般是大量的能引起軟件產(chǎn)生異常的數(shù)據(jù)。Fuzz測試記錄了大量的異常信息,為漏洞分析提供了原材料。 分析人員從這些信息中篩選出可能存在漏洞的信息, 并通過原測試用例再次進(jìn)行測試、分析,最終確定漏洞是否存在。
(2) 白盒測試(源碼審計):現(xiàn)在有了一系列的工具都能協(xié)助發(fā)現(xiàn)程序中的安全BUG。這類測試通常由廠商自己完成,通過開發(fā)人員的單元測試,發(fā)現(xiàn)代碼中的安全缺陷并進(jìn)行修復(fù)。
(3) 灰盒測試(IDA反匯編審計):這和上面的源碼審計非常類似,對分析對象不是源碼,而是可運行的程序或系統(tǒng),但I(xiàn)DA是一個非常強大的反匯編平臺,能夠支持基于匯編碼進(jìn)行安全審計。
(4) 動態(tài)跟蹤分析:記錄程序在不同條件下執(zhí)行的全部和安全問題相關(guān)的操作(如文件操作),然后分析這些操作序列是否存在問題,這是競爭條件類漏洞發(fā)現(xiàn)的主要途徑之一,其它的污點傳播跟蹤也屬于這類。
2.2.2 漏洞發(fā)現(xiàn)后的處理方法
對于已發(fā)現(xiàn)的安全漏洞,主要依據(jù)以下流程進(jìn)行處理。
(1) 記錄漏洞存在點及詳細(xì)信息。
(2) 對漏洞進(jìn)行驗證,確認(rèn)為系統(tǒng)真實存在的安全隱患。
(3) 分析漏洞的危害程度。
(4) 嘗試進(jìn)行解決和修復(fù)。
(5) 確認(rèn)漏洞是否已被修復(fù),或該漏洞不會產(chǎn)生任何安全問題。
2.3.1 漏洞的分類
根據(jù)漏洞的公開方式可分為以下幾種:
(1) 官方公布:這類漏洞通常由于補丁的發(fā)布而進(jìn)行公開,廠商對已發(fā)現(xiàn)的安全漏洞進(jìn)行修補并發(fā)布補丁,期望通過補丁的方式避免用戶由于該漏洞帶來的損失。這類公開方式通常為定期公開,或即時公開,根據(jù)不同公司的補丁策略方式有所不同。
(2) 善意公開(白帽子):一些技術(shù)人員或普通用戶在使用或?qū)Ξa(chǎn)品的嘗試過程發(fā)現(xiàn)了一些漏洞,并不對所有用戶進(jìn)行公開,而是通過提醒系統(tǒng)的對應(yīng)廠商的形式進(jìn)行漏洞的修補,這類漏洞的公開通常是善意的,發(fā)現(xiàn)者通常不會利用發(fā)現(xiàn)的漏洞對系統(tǒng)進(jìn)行攻擊或破壞。
(3) 惡意利用(黑客):攻擊者利用不斷的探索和嘗試發(fā)現(xiàn)系統(tǒng)存在的漏洞,并利用該漏洞進(jìn)行操作以獲取利益或進(jìn)行惡意破壞等。這類漏洞一旦由惡意攻擊者進(jìn)行公開后,帶來的損失比較巨大。
值得一提的是,在計算機(jī)領(lǐng)域中,有一類漏洞稱為0day漏洞,通常是指還沒有補丁的漏洞。這類漏洞通常對大眾不會有什么影響,但會導(dǎo)致攻擊者瞄準(zhǔn)的目標(biāo)受到精確攻擊,危害也是非常之大。而0day攻擊則是指利用這種漏洞進(jìn)行的攻擊。提供該漏洞細(xì)節(jié)或者利用程序的人通常是該漏洞的發(fā)現(xiàn)者。0day漏洞的利用程序?qū)W(wǎng)絡(luò)安全具有巨大威脅。
2.3.2 漏洞公開后的采用措施
系統(tǒng)官方應(yīng)立即對已公開的漏洞進(jìn)行修復(fù),及時發(fā)布漏洞補丁,并在發(fā)現(xiàn)漏洞至發(fā)布補丁期間采取必要的措施避免給用戶帶來損失或不良體驗。
用戶應(yīng)即時或定期對系統(tǒng)或應(yīng)用軟件進(jìn)行更新,對發(fā)布的補丁及時進(jìn)行安裝與升級,確保自身系統(tǒng)不被攻擊者利用。
安全漏洞被披露或公開后,對漏洞進(jìn)行有效管理,降低漏洞帶來的影響。對于服務(wù)端出現(xiàn)的漏洞,可先評估漏洞的威脅等級,以及漏洞利用的實施成本,再制定漏洞的修復(fù)方案,對于威脅等級較高且實施成本較低的漏洞,需要及時進(jìn)行修復(fù),對于威脅等級較低且實施成本較高的漏洞,可酌情根據(jù)實際情況制定防護(hù)措施,如加強訪問控制隔離等措施。對于出現(xiàn)在用戶端的漏洞,及時發(fā)布更新補丁或臨時解決方案,避免影響的擴(kuò)大。
2.4.1 漏洞的分級
為了減少主觀臆測對漏洞等級評定的影響,應(yīng)對不同程度的漏洞進(jìn)行分級,合理定制解決方案,確保系統(tǒng)安全,可根據(jù)以下屬性對漏洞進(jìn)行等級分析:
(1)潛在危險程度(風(fēng)險從高至低):遠(yuǎn)程獲取系統(tǒng)權(quán)限或使系統(tǒng)拒絕服務(wù);本地越權(quán)訪問;敏感信息泄露。
(2)漏洞利用實施成本(風(fēng)險從高至低):只有極少人掌握該項漏洞利用技術(shù),或只有在某些特殊情況下才具備該漏洞的利用條件;對漏洞利用人員有一定門檻要求,且需要投入一些資源,如租賃和搭建釣魚網(wǎng)站服務(wù)器;漏洞利用非常簡單,存在自動化的利用工具。
(3)影響用戶程度(風(fēng)險從高至低):對所有用戶有影響;對關(guān)鍵用戶或部分用戶有影響;對極少數(shù)用戶有影響;對用戶無影響。
(4)修復(fù)成本(人力和時間):修復(fù)成本較高,大于重新進(jìn)行開發(fā)的成本;修復(fù)成本中等,時間較長;修復(fù)成本較低,人力時間消耗較少。
根據(jù)以上幾項對漏洞進(jìn)行定級,根據(jù)每項進(jìn)行加權(quán)處理,得到每個漏洞的處理優(yōu)先級,再進(jìn)行下一步操作。
2.4.2 漏洞的管理修復(fù)方式
根據(jù)漏洞產(chǎn)生的生命周期,對漏洞進(jìn)行不同的管理和修復(fù)。漏洞管理方式主要分為主動修復(fù)及漏洞規(guī)避等方式。
(1)主動修復(fù):對于服務(wù)端漏洞,可修改代碼或系統(tǒng)升級進(jìn)行主動修復(fù);對于客戶端漏洞,可發(fā)布更新補丁,由公眾進(jìn)行升級修復(fù),升級方式可直接在官網(wǎng)下載或使用第三方工具進(jìn)行自動更新;
(2)漏洞規(guī)避:對于服務(wù)端漏洞,可使用其它方式,如部署安全防護(hù)設(shè)備或增加訪問控制策略的方式進(jìn)行漏洞規(guī)避;對于客戶端漏洞,可使用臨時解決方案,如個人防火墻、禁用漏洞端口或服務(wù)以及注冊表修改等方式進(jìn)行漏洞規(guī)避。
漏洞的消亡通常通過補丁進(jìn)行修復(fù),在保證不引進(jìn)新的漏洞前提下完成以往漏洞的修補,達(dá)到漏洞消亡的目的。
除對漏洞進(jìn)行修復(fù)以外,還可以對軟件進(jìn)行新版本更新,徹底從根源上去除漏洞的載體,避免后期產(chǎn)生安全問題。
在對漏洞進(jìn)行處理后,應(yīng)記錄有關(guān)漏洞共性信息,確保再次開發(fā)或應(yīng)用時不會重蹈覆轍,對以往漏洞進(jìn)行研究,避免類似問題再次產(chǎn)生。
針對當(dāng)前安全漏洞生命周期理論化以及系統(tǒng)化方面不足的問題,本文首先系統(tǒng)闡述安全漏洞生命周期的各個階段及其風(fēng)險特點,然后從各個階段如何防控與修復(fù)漏洞進(jìn)行闡述,對系統(tǒng)安全漏洞的危害性進(jìn)行全面評估。為安全人員快速、有效地制定有針對性的防御策略提供有力的理論依據(jù)。
[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.