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