專利名稱:一種基于快照的系統(tǒng)防護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種系統(tǒng)防護(hù)方法。
背景技術(shù):
在學(xué)校機(jī)房或網(wǎng)吧等公共場所,一般一臺電腦都是分時(shí)段的提供給多個(gè)用戶使 用,這種方案優(yōu)勢明顯,但在實(shí)際運(yùn)作中也存在著不足,其中一個(gè)較明顯的問題是,當(dāng)上一 個(gè)用戶惡意或無意(誤操作/中病毒等)修改了系統(tǒng)的文件或配置,則就可能直接影響了 后面用戶的正常使用。為解決這一問題,比較典型的解決方案就是安裝硬盤還原卡,這樣只 要通過一次重啟,軟件系統(tǒng)就恢復(fù)到原來的狀態(tài),也可以理解為還原到原來的系統(tǒng)快照。一般還原方法的實(shí)現(xiàn)原理(如圖1),主要是截獲對磁盤的寫操作,再將該寫操作 區(qū)間重定向到空閑區(qū)間進(jìn)行寫入,同時(shí)記錄該寫操作區(qū)間與重定向區(qū)間的對應(yīng)關(guān)系,最后 完成該寫操作。當(dāng)截獲到讀磁盤操作時(shí),則結(jié)合已記錄的重定向區(qū)間的對應(yīng)關(guān)系,進(jìn)行判斷 處理,如該讀操作區(qū)間與已記錄的重定向?qū)?yīng)關(guān)系中的區(qū)間無交集,則按正常讀流程執(zhí)行 讀操作,最后完成該讀操作;如有上述兩區(qū)間有交集,則可先按正常讀流程讀取非交集區(qū)間 的內(nèi)容,再結(jié)合重定向區(qū)間的對應(yīng)關(guān)系,讀取被重定向的該交集區(qū)間的內(nèi)容,在合并兩種讀 操作的讀取的內(nèi)容后,最后完成該讀操作。結(jié)合上述還原程序?qū)ψx寫的處理,還原程序只要 在系統(tǒng)重啟后,清空上次重定向區(qū)間的對應(yīng)關(guān)系及重定向區(qū)間所占用的空間,就可使軟件 系統(tǒng)恢復(fù)到原來的狀態(tài),到達(dá)還原的目的。但隨著計(jì)算機(jī)病毒或惡意軟件技術(shù)的發(fā)展,一些更底層的攻擊技術(shù)也在不斷的加 強(qiáng),上述基于還原的系統(tǒng)保護(hù)方法,受到了很大的挑戰(zhàn),甚至?xí)?。目前已發(fā)現(xiàn)的病毒中, 有通過加載一個(gè)惡意的驅(qū)動來進(jìn)行對上述還原軟件進(jìn)行破壞的例子,這種病毒通過加載驅(qū) 動程序,獲得操作系統(tǒng)內(nèi)核權(quán)限后,直接修改上述運(yùn)行中的還原軟件的執(zhí)行指令,而使還原 軟件的截獲磁盤讀寫的功能失效,更有甚者出于特殊目的,直接通過惡意內(nèi)核模塊使系統(tǒng) 崩潰,擾亂正常秩序。要對付這種情況,就需要對內(nèi)核模塊的加載運(yùn)行進(jìn)行監(jiān)控,對不可信任的內(nèi)核模 塊,拒絕讓其加載運(yùn)行,而使可信任的內(nèi)核模塊依舊能正常運(yùn)行。但考慮到實(shí)際的情況,如 一般網(wǎng)絡(luò)游戲都自帶內(nèi)核程序,用于防止盜號,及用戶的USB磁盤或攝像頭等,使用時(shí)也會 加載驅(qū)動,再結(jié)合系統(tǒng)已有的很多的驅(qū)動程序,這樣數(shù)量眾多的內(nèi)核模塊,而且有的內(nèi)核模 塊有一定的隱蔽性,要逐個(gè)區(qū)分出其是否是可信任的,是項(xiàng)工作量很大的工作。同時(shí)由于實(shí) 際運(yùn)行環(huán)境的不同,就需要用戶協(xié)助來對內(nèi)核模塊的可信任性做判斷,這樣易用性差,且有 較大的誤操作可能,因?yàn)橛脩舨灰欢ㄓ羞@方面很專業(yè)的知識來判斷。
發(fā)明內(nèi)容
本發(fā)明的目的就在于提供一種在實(shí)現(xiàn)還原功能的同時(shí),又能簡單有效的抵御內(nèi)核 模塊攻擊的系統(tǒng)防護(hù)方法。—種基于快照的系統(tǒng)防護(hù)方法,包括如下步驟
步驟(一)a)在磁盤中指定用于重定向的預(yù)留空間;b)在磁盤或內(nèi)存中指定用于記錄對應(yīng)關(guān)系的第一空間;C)生成用于讀取原始磁盤數(shù)據(jù)的私有接口 ;所述的在磁盤中指定的預(yù)留空間可以是在啟動操作系統(tǒng)之前就已經(jīng)預(yù)先完成劃 分;也可以是啟動操作系統(tǒng)后,再向操作系統(tǒng)申請。指定預(yù)留空間之后,用戶所有的正常讀、寫操作均針對非預(yù)留空間,而不會針對所 述的預(yù)留空間。步驟(二)截獲用戶對磁盤的讀、寫操作,對截獲到的讀、寫操作進(jìn)行如下處理關(guān)于寫操作將截獲到的寫操作所針對的原磁盤空間(非預(yù)留空間)重定向到步驟(一)所述 的預(yù)留空間,即將該寫操作所涉及的數(shù)據(jù)寫入預(yù)留空間;并將該寫操作所針對的原磁盤空間與實(shí)際寫入的預(yù)留空間的對應(yīng)關(guān)系記錄到所 述的第一空間中;也可以說該寫操作所針對的原磁盤空間已被重定向。關(guān)于讀操作a)如果該讀操作是通過私有接口發(fā)起的,則按正常的讀操作流程,不經(jīng)過重定向 處理而直接進(jìn)行讀取操作;b)如果該讀操作不是通過私有接口發(fā)起的,則結(jié)合第一空間中記錄的對應(yīng)關(guān)系, 進(jìn)行如下判斷如該讀操作所針對的區(qū)間與參照區(qū)間無交集,則按正常讀流程執(zhí)行讀操作,最后 完成該讀操作;如該讀操作所針對的區(qū)間與參照區(qū)間有交集,則對于非交集區(qū)間的內(nèi)容按正常讀 流程讀?。粚τ诮患瘏^(qū)間的內(nèi)容,根據(jù)該交集區(qū)間與預(yù)留空間的對應(yīng)關(guān)系,從預(yù)留空間中讀 取相對應(yīng)的內(nèi)容;最后將讀取的非交集區(qū)間的內(nèi)容和交集區(qū)間的內(nèi)容合并,完成該讀操作; 在讀取非交集區(qū)間和交集區(qū)間的內(nèi)容時(shí)并沒有嚴(yán)格的先后順序要求,可以如下三種情況①先將非交集區(qū)間的內(nèi)容A和交集區(qū)間的內(nèi)容B均按正常流程從非預(yù)留空間中讀 取,再從預(yù)留空間中讀取與交集區(qū)間相對應(yīng)的內(nèi)容『,然后用從預(yù)留空間中讀取的交集區(qū) 間的內(nèi)容『把從非預(yù)留空間中讀取的交集區(qū)間的內(nèi)容B覆蓋,構(gòu)成完整的內(nèi)容②先將非交集區(qū)間的內(nèi)容A按正常流程從非預(yù)留空間中讀取,再從預(yù)留空間中讀 取與交集區(qū)間相對應(yīng)的內(nèi)容經(jīng)合并后構(gòu)成完整的內(nèi)容③先從預(yù)留空間中讀取與交集區(qū)間相對應(yīng)的內(nèi)容『,再將非交集區(qū)間的內(nèi)容A按 正常流程從非預(yù)留空間中讀取,經(jīng)合并后構(gòu)成完整的內(nèi)容AB\所述的參照區(qū)間是在寫操作過程中經(jīng)過重定向?qū)懙筋A(yù)留空間且其對應(yīng)關(guān)系已記 錄在第一空間中的所有區(qū)間。經(jīng)過上述的對讀寫處理,我們可以發(fā)現(xiàn)對磁盤數(shù)據(jù)的正常讀寫,都被做了重定向 處理,這樣磁盤原始數(shù)據(jù)不會被改變,也可以理解為對磁盤原始數(shù)據(jù)做了快照,而該快照內(nèi) 容可以通過私有接口讀取。步驟(三)
截獲內(nèi)核模塊的加載,對于截獲到的內(nèi)核模塊,如果該內(nèi)核模塊是不可信任的,則 拒絕該內(nèi)核模塊的加載,如果該內(nèi)核模塊是可信任的,則允許加載并運(yùn)行。其中對內(nèi)核模塊的可信任性,可以通過上層管理程序來進(jìn)行額外的控制。當(dāng)一個(gè) 內(nèi)核模塊加載時(shí),我們可以通過私有接口讀取快照即磁盤原始數(shù)據(jù)中該內(nèi)核模塊所對應(yīng)的 該數(shù)據(jù),判斷內(nèi)核模塊與其所對應(yīng)數(shù)據(jù)的一致性,如果數(shù)據(jù)內(nèi)容是一致的,則就是可信任 的,如果不一致的,就是不可信任,此時(shí)直接拒絕或提示用戶協(xié)助判斷,這樣就能簡單有效 的對絕大部分內(nèi)核模塊作出正確的判斷。本發(fā)明所述的內(nèi)核模塊是指可具有CPU的Ring 0權(quán)限的可執(zhí)行代碼,可以直接訪 問所有內(nèi)存(包括所有的用戶模式進(jìn)程和應(yīng)用程序的地址空間)和硬件。步驟(四)系統(tǒng)重啟時(shí),清空并釋放用于記錄對應(yīng)關(guān)系的第一空間;若所述的預(yù)留空間是啟動操作系統(tǒng)后,再向操作系統(tǒng)申請的,則釋放該預(yù)留空 間;若所述的預(yù)留空間是在啟動操作系統(tǒng)之前就已經(jīng)預(yù)先完成劃分,則無需進(jìn)行操 作。需要說明的是,本發(fā)明方法進(jìn)行系統(tǒng)還原時(shí),清空第一空間以及有選擇的釋放預(yù) 留空間的過程是在重啟操作系統(tǒng)進(jìn)入用戶登錄界面之前已經(jīng)完成,這一點(diǎn)是與現(xiàn)有技術(shù)相 同的。例如關(guān)機(jī)時(shí)就會清空第一空間,而重啟操作系統(tǒng)時(shí)完成有選擇的釋放預(yù)留空間。本發(fā)明在現(xiàn)有技術(shù)中系統(tǒng)還原方法的基礎(chǔ)上,再加一個(gè)私有接口及截獲內(nèi)核模塊 加載的功能,該私有接口能讀取磁盤原始數(shù)據(jù),當(dāng)截獲到是通過該私有接口,對磁盤進(jìn)行讀 操作時(shí),就不經(jīng)過重定向而直接對該區(qū)域進(jìn)行讀讀操作,當(dāng)截獲到加載的內(nèi)核模塊是不可 信任的,則拒絕加載,當(dāng)為可信任時(shí)才允許加載運(yùn)行。這樣就能簡單有效的抵御內(nèi)核攻擊, 同時(shí)又能確保原來的還原系統(tǒng)能正常工作,從而達(dá)到系統(tǒng)防護(hù)的目的。
圖1為現(xiàn)有技術(shù)中系統(tǒng)還原方法的實(shí)現(xiàn)原理的示意圖。圖2為本發(fā)明的基于快照的系統(tǒng)防護(hù)方法的實(shí)現(xiàn)原理的示意圖。
具體實(shí)施例方式在以下的詳細(xì)說明中,描述了特定的細(xì)節(jié)以便提供對本發(fā)明全面的理解。然而本 專業(yè)的技術(shù)人員會認(rèn)識到,本發(fā)明也可以用其它相類似的細(xì)節(jié)實(shí)施。盡管本發(fā)明不限于此,但作為本發(fā)明的一個(gè)具體的實(shí)施例,一種在硬盤中有C/D 兩個(gè)分區(qū),并在C分區(qū)安裝了 Windows XP系統(tǒng),而將D分區(qū)作為預(yù)留空間的使用情況。參見圖2,通過本發(fā)明提供的方法,在運(yùn)行過程中,能正常加載并運(yùn)行已有的 C:\a. sys驅(qū)動,同時(shí)又能拒絕加載新生成的惡意C:\b. sys驅(qū)動的步驟如下本發(fā)明提供的方法可通過編寫還原功能軟件來實(shí)現(xiàn),該軟件包含一個(gè)底層驅(qū)動 程序如命名為Driver, sys及一個(gè)上層管理程序如命名為Manager, exe,其中的Driver, sys在初始時(shí)通過調(diào)用系統(tǒng)函數(shù)IoAttachDevice,掛接到代表C分區(qū)的系統(tǒng)設(shè)備\DeviCe\ HarddiskVolumel上,這樣在該Driver, sys運(yùn)行后,就可以截獲到系統(tǒng)中對C分區(qū)的所在磁盤區(qū)域的讀寫操作,該Driver, sys對寫操作截獲的函數(shù)接口命名為ProtectWrite,對讀操作操作截獲的函數(shù)接口命名為ProtectRead,同時(shí)再通過調(diào)用系統(tǒng)函數(shù)IoCreateDevice創(chuàng) 建另一個(gè)私有的設(shè)備名如命名為\Device\PassthruC,即生成了用于讀取原始磁盤數(shù)據(jù)的 私有接口,同時(shí)再通過系統(tǒng)函數(shù)PsSetLoadlmageNotifyRoutine來注冊截獲內(nèi)核模塊的加 載的接口,該接口命名為Sys ImageLoadNot ify。并在該Driver, sys初始運(yùn)行時(shí)申請一部分內(nèi)存空間,如命名為Map,用于記錄重 定向區(qū)間對應(yīng)關(guān)系,即為第一空間。同時(shí)從D分區(qū)申請一部分磁盤空間,如命名為Swap,用于保存重定向后操作的內(nèi) 容,即預(yù)留空間。當(dāng)用戶在運(yùn)行程序的過程中加載C:\a.SyS驅(qū)動(內(nèi)核模塊)時(shí),此時(shí)被 SysImageLoadNotify接口截獲,在該接口內(nèi)的處理過程中,通過私有接口 \Device\ PassthruC對C: \a. sys內(nèi)容發(fā)起磁盤讀操作,而此時(shí)會被ProtectRead接口截獲,在該 接口內(nèi)的處理過程中,先通過調(diào)用系統(tǒng)函數(shù)ObQueryNameString,得到該讀操作發(fā)起設(shè)備 名是\Device\PassthruC,可以得知是通過私有接口發(fā)起的操作,這種情況下就直接調(diào)用 ZwReadFile,而不經(jīng)過重定向,直接讀取磁盤原始數(shù)據(jù),通過比較判斷可以確認(rèn)該C:\a. sys 與原始數(shù)據(jù)一致時(shí),則認(rèn)為是可信任的,允許其加載并運(yùn)行;當(dāng)用戶在運(yùn)行程序的過程中,生成了個(gè)惡意C: \b. sys驅(qū)動(內(nèi)核模塊),由于該 C:\b. sys文件生成過程中,需要先對磁盤進(jìn)行寫操作,所以其寫磁盤操作,會被Driver, sys截獲,從而進(jìn)入ProtectWrite接口,最后將其重定向?qū)懙搅?Swap的扇區(qū)中,進(jìn)行寫入操 作,并在前面申請的Map中,記錄該重定向的關(guān)系,用于表示文件C \b. sys所涉及到的扇區(qū) 被重定向到了 Swap的空間中,最后完成該寫請求;在處理完該C:\b. sys文件的寫操作后, 惡意程序嘗試加載該C: \b. sys驅(qū)動時(shí),同樣再會被Driver, sys截獲,此時(shí)會進(jìn)入前面注冊 的截獲內(nèi)核模塊加載的SysImageLoadNotify接口,在該接口的處理過程中,通過私有接口 \Device\PassthruC對C:\b. sys內(nèi)容發(fā)起磁盤讀操作,由于磁盤原始數(shù)據(jù)中沒有該C:\b. sys (因?yàn)橐驯籔rotectWrite接口處理中,重定向?qū)懙搅?Swap的扇區(qū)中),所以可知該驅(qū)動 是不信任的,就可以拒絕其加載,這樣就能防護(hù)該惡意C:\b. sys驅(qū)動的加載;當(dāng)系統(tǒng)重啟后,Driver, sys再次運(yùn)行時(shí),上次申請的Map已在關(guān)機(jī)時(shí)被清空釋 放,此時(shí)可以再次申請一定的內(nèi)容空間并同樣命名為Map,而對上次申請的Swap空間, 可以刪除后再重新申請或直接復(fù)用,如用戶后面有對C分區(qū)進(jìn)行讀操作,此時(shí)Map中還 沒有該扇區(qū)的重定向關(guān)系(無交集),所以直接通過調(diào)用系統(tǒng)函數(shù)ZwReadFile,讀取的 就為原始內(nèi)容,這樣就達(dá)到了還原的目的,同時(shí)結(jié)合前面的ProtectRead/ProtectWrite/ SysImageLoadNotiffy等接口的處理,又能有效的防護(hù)內(nèi)核模塊的攻擊。為了友好及易用性考慮,可以通過Manager.exe程序,在必要的時(shí)候提示用戶當(dāng) 前內(nèi)核模塊的狀態(tài)。雖然此處說明描述了本發(fā)明的某此特征及一種實(shí)現(xiàn)方法,但是對于本專業(yè)的技術(shù) 人員來說,將會出現(xiàn)許多等同的修改、替換、變化和等代換,均應(yīng)屬本發(fā)明的保護(hù)范圍。
權(quán)利要求
一種基于快照的系統(tǒng)防護(hù)方法,其特征在于,包括如下步驟步驟(一)a)在磁盤中指定用于重定向的預(yù)留空間;b)在磁盤或內(nèi)存中指定用于記錄對應(yīng)關(guān)系的第一空間;c)生成用于讀取原始磁盤數(shù)據(jù)的私有接口;指定預(yù)留空間之后,用戶所有的正常讀、寫操作均針對非預(yù)留空間;步驟(二)截獲用戶對磁盤的讀、寫操作,對截獲到的讀、寫操作進(jìn)行如下處理關(guān)于寫操作將截獲到的寫操作所針對的原磁盤空間重定向到步驟(一)所述的預(yù)留空間,即將該寫操作所涉及的數(shù)據(jù)寫入預(yù)留空間;并將該寫操作所針對的原磁盤空間與實(shí)際寫入的預(yù)留空間的對應(yīng)關(guān)系記錄到所述的第一空間中;也可以說該寫操作所針對的原磁盤空間已被重定向;關(guān)于讀操作a)如果該讀操作是通過私有接口發(fā)起的,則按正常的讀操作流程,不經(jīng)過重定向處理而直接進(jìn)行讀取操作;b)如果該讀操作不是通過私有接口發(fā)起的,則結(jié)合第一空間中記錄的對應(yīng)關(guān)系,進(jìn)行如下判斷如該讀操作所針對的區(qū)間與參照區(qū)間無交集,則按正常讀流程執(zhí)行讀操作,最后完成該讀操作;如該讀操作所針對的區(qū)間與參照區(qū)間有交集,則對于非交集區(qū)間的內(nèi)容按正常讀流程讀??;對于交集區(qū)間的內(nèi)容,根據(jù)該交集區(qū)間與預(yù)留空間的對應(yīng)關(guān)系,從預(yù)留空間中讀取相對應(yīng)的內(nèi)容;最后將讀取的非交集區(qū)間的內(nèi)容和交集區(qū)間的內(nèi)容合并,完成該讀操作;步驟(三)截獲內(nèi)核模塊的加載,對于截獲到的內(nèi)核模塊,如果該內(nèi)核模塊是不可信任的,則拒絕該內(nèi)核模塊的加載,如果該內(nèi)核模塊是可信任的,則允許加載并運(yùn)行;步驟(四)系統(tǒng)重啟時(shí),清空并釋放用于記錄對應(yīng)關(guān)系的第一空間;若所述的預(yù)留空間是啟動操作系統(tǒng)后,再向操作系統(tǒng)申請的,則釋放該預(yù)留空間;若所述的預(yù)留空間是在啟動操作系統(tǒng)之前就已經(jīng)預(yù)先完成劃分,則無需進(jìn)行操作。
2.如權(quán)利要求1所述的基于快照的系統(tǒng)防護(hù)方法,其特征在于,步驟(二)的讀操作中 所述的參照區(qū)間是在寫操作過程中經(jīng)過重定向?qū)懙筋A(yù)留空間且其對應(yīng)關(guān)系已記錄在第一 空間中的所有區(qū)間。
3.如權(quán)利要求1所述的基于快照的系統(tǒng)防護(hù)方法,其特征在于,步驟(三)中判斷內(nèi) 核模塊是否可信任時(shí),通過所述的私有接口讀取磁盤原始數(shù)據(jù)中的與該內(nèi)核模塊對應(yīng)的數(shù) 據(jù),判斷該內(nèi)核模塊與其所對應(yīng)數(shù)據(jù)的一致性,如果一致則是可信任的內(nèi)核模塊,否則為不 可信任的內(nèi)核模塊。
全文摘要
本發(fā)明公開了一種基于快照的系統(tǒng)防護(hù)方法,包括在磁盤中指定用于重定向的預(yù)留空間;在磁盤或內(nèi)存中指定用于記錄對應(yīng)關(guān)系的第一空間;生成用于讀取磁盤原始數(shù)據(jù)即快照的私有接口;截獲用戶對磁盤的讀、寫操作,截獲內(nèi)核模塊的加載,對截獲到的磁盤讀、寫操作,依據(jù)是否是通過私有接口發(fā)起的而進(jìn)行分別處理,對截獲到的內(nèi)核模塊與快照中的內(nèi)容,比較后進(jìn)行分別處理。本發(fā)明在現(xiàn)有技術(shù)中系統(tǒng)還原方法的基礎(chǔ)上,再加一個(gè)私有接口及內(nèi)核監(jiān)控模塊,能簡單有效的抵御內(nèi)核攻擊,同時(shí)又能確保原來的還原系統(tǒng)能正常工作,從而達(dá)到系統(tǒng)防護(hù)的目的。
文檔編號G06F21/00GK101833485SQ201010130799
公開日2010年9月15日 申請日期2010年3月23日 優(yōu)先權(quán)日2010年3月23日
發(fā)明者將關(guān)平, 程琛, 謝海燕 申請人:杭州順網(wǎng)科技股份有限公司