本發(fā)明涉及計算機軟件開發(fā)領(lǐng)域,具體涉及一種在linux系統(tǒng)中對惡意軟件Rootkit的檢測和修復(fù)方法,本發(fā)明可以在不重新編譯內(nèi)核的基礎(chǔ)上,實現(xiàn)linux系統(tǒng)內(nèi)核級別的對惡意軟件Rootkit的檢測以及修復(fù),從而能夠有效檢測linux系統(tǒng)存在的異常狀況,提高linux系統(tǒng)的安全性。
背景技術(shù):
隨著計算機技術(shù)不斷發(fā)展,各種網(wǎng)站、移動終端以及移動終端上app服務(wù)的廣泛應(yīng)用,服務(wù)器系統(tǒng)的安全性問題越來越受到重視。linux系統(tǒng)作為服務(wù)器系統(tǒng)中重要的一員,采用Linux系統(tǒng)的服務(wù)器的使用數(shù)量也與日俱增,針對linux系統(tǒng)的各種木馬病毒也在不斷地更新。
Rootkit是linux系統(tǒng)上最為頑固的一種惡意病毒。Rootkit是一種特殊類型的malware(惡意軟件),之所以特殊是因為用戶不知道它們在做什么事情。Rootkit基本上是無法檢測到的,而且?guī)缀醪豢赡軇h除它們。雖然檢測工具在不斷增多,但是惡意軟件的開發(fā)者也在不斷尋找新的途徑來掩蓋他們的蹤跡。Rootkit幾乎可以隱藏任何軟件,包括文件服務(wù)器、鍵盤記錄器、Botnet和Remailer,許多Rootkit甚至可以隱藏大型的文件集合并允許攻擊者在計算機上保存許多文件,而用戶卻無法看到。Rootkit本身不會像病毒或蠕蟲那樣影響計算機的運行,它可以悄無聲息的隱藏自己,然后為所欲為。如今很多手機系統(tǒng)采用的是安卓系統(tǒng),安卓系統(tǒng)使用的正是linux內(nèi)核,所以Rootkit同樣會發(fā)生在手機上,因為Rootkit攻擊的自我隱藏性,我們很難發(fā)現(xiàn)并且鏟除被隱藏的文件和進程。
針對上述問題,本申請發(fā)明了一種能夠在內(nèi)核級別檢測linux系統(tǒng)是否被Rootkit攻擊,并對linux系統(tǒng)做出修復(fù)的方法,可以在不影響linux系統(tǒng)業(yè)務(wù)的基礎(chǔ)上發(fā)現(xiàn)被隱藏的Rootkit文件和進程,從而達到檢測和修復(fù)linux系統(tǒng)的效果。
技術(shù)實現(xiàn)要素:
本發(fā)明通過鍵入內(nèi)核模塊的方式對系統(tǒng)調(diào)用和函數(shù)的輸出來檢測是否被Rootkit攻擊,并通過HOOK技術(shù)修復(fù)被替換的系統(tǒng)掉調(diào)用,從而達到修復(fù)系統(tǒng)的結(jié)果。
本申請發(fā)明一種在linux系統(tǒng)中對惡意軟件Rootkit的檢測方法,其特征在于,該檢測方法具體包括如下步驟:動態(tài)加載linux系統(tǒng)肉核模塊;輸出目前系統(tǒng)內(nèi)存中的系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)的地址;將該輸出的系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)地址內(nèi)容與預(yù)備好的地址表進行比對;如果系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)地址與預(yù)備的地址表不能對應(yīng),則表示系統(tǒng)已經(jīng)被Rootkit攻擊;如果系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)地址與預(yù)備的地址表可以對應(yīng),則表示系統(tǒng)安全,未被攻擊。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的檢測方法,其特征還在于,該預(yù)備好的地址表可以使用系統(tǒng)本身預(yù)留的系統(tǒng)調(diào)用map文件,也可以使用標(biāo)準(zhǔn)的內(nèi)核產(chǎn)生的map文件。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的檢測方法,其特征還在于,所述的動態(tài)加載linux系統(tǒng)內(nèi)核模塊步驟是使用insmod加載內(nèi)核模塊。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的檢測方法,其特征還在于,所述的動態(tài)加載linux系統(tǒng)內(nèi)核模塊步驟具體包括:使用insmod在用戶空間啟動加載過程并定義需要加載的模塊,執(zhí)行l(wèi)oad_module函數(shù)將內(nèi)核模塊嵌入內(nèi)核,獲取內(nèi)核級別的信息。
本申請還發(fā)明一種在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征在于,該修復(fù)方法具體包括如下步驟:動態(tài)加載linux系統(tǒng)內(nèi)核模塊;輸出目前系統(tǒng)內(nèi)存中的系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)的地址;將該輸出的系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)地址內(nèi)容與預(yù)備好的地址表進行比對;如果系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)地址與預(yù)備的地址表不能對應(yīng),則表示系統(tǒng)已經(jīng)被Rootkit攻擊,通過HOOK技術(shù)將不一致的系統(tǒng)調(diào)用和函數(shù)的地址替換為正確的地址。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征還在于,該預(yù)備好的地址表可以使用系統(tǒng)本身預(yù)留的系統(tǒng)調(diào)用map文件,也可以使用標(biāo)準(zhǔn)的內(nèi)核產(chǎn)生的map文件。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征還在于,所述的動態(tài)加載linux系統(tǒng)內(nèi)核模塊步驟是使用insmod加載內(nèi)核模塊。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征還在于,所述的動態(tài)加載linux系統(tǒng)內(nèi)核模塊步驟具體包括:使用insmod在用戶空間啟動加載過程并定義需要加載的模塊,執(zhí)行l(wèi)oad_module函數(shù)將內(nèi)核模塊嵌入內(nèi)核,獲取內(nèi)核級別的信息。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征還在于,通過HOOK技術(shù)將不一致的系統(tǒng)調(diào)用和函數(shù)的地址替換為正確的地址步驟具體包括:找出所有的被劫持的函數(shù);將錯誤的函數(shù)的地址通過HOOK的方式更改為正確的地址;找到相關(guān)的惡意Rootkit的文件和程序;刪除相關(guān)的惡意Rootkit的文件和程序。
所述的在linux系統(tǒng)中對惡意軟件Rootkit的修復(fù)方法,其特征還在于,通過HOOK技術(shù)將不一致的系統(tǒng)調(diào)用和函數(shù)的地址替換為正確的地址步驟可以通過更改sys-read和syswrite是這兩個系統(tǒng)函數(shù)指針來實現(xiàn)。
本文提出檢測和保護方案可以補充SSR(浪潮操作系統(tǒng)安全增強系統(tǒng))的不足,SSR只能在未被Rootkit的基礎(chǔ)上保護系統(tǒng)不被攻擊,但是此方法可以實現(xiàn)對已經(jīng)被攻擊的系統(tǒng)進行修復(fù),然后再使用SSR對系統(tǒng)進行保護,來補充SSR的不足之處。
附圖說明
圖1、重定向系統(tǒng)調(diào)用示意圖
具體實施方式
下面對本發(fā)明的內(nèi)容進行更加詳細的闡述:
本發(fā)明提出了一種linux系統(tǒng)內(nèi)核級別Rootkit檢測和修復(fù)程序。本發(fā)明的顯著特征是在不重新編譯內(nèi)核的基礎(chǔ)上,實現(xiàn)內(nèi)核級別的Rootkit檢測以及修復(fù)。
Rootkit技術(shù)是惡意程序用于隱藏自身的主要技術(shù)手段之一,其原理為:系統(tǒng)調(diào)用實現(xiàn)函數(shù)位于內(nèi)核空間,而可加載內(nèi)核模塊可以通過內(nèi)核符號表訪問內(nèi)核空間中的各種資源,利用HOOK技術(shù)掛鉤系統(tǒng)調(diào)用來執(zhí)行相關(guān)的自定義操作,比如隱藏文件和惡意的進程?,F(xiàn)有的內(nèi)核級Rootkit正是基于這種原理實現(xiàn)的。修改系統(tǒng)調(diào)用表的Rootkit對位于系統(tǒng)調(diào)用表中的一些系統(tǒng)調(diào)用函數(shù)地址進行修改。同樣我們也可以利用這種技術(shù)檢測系統(tǒng)是否被攻擊,并在檢測的基礎(chǔ)上進行修復(fù)。
本發(fā)明基于linux動態(tài)模塊加載和HOOK技術(shù),嵌入內(nèi)核模塊對系統(tǒng)的系統(tǒng)調(diào)用和函數(shù)進行檢測,然后使用HOOK技術(shù)對系統(tǒng)進行修復(fù),并顯示已經(jīng)被隱藏的文件,從而達到真正的修復(fù)系統(tǒng)的效果。
本文通過動態(tài)加載內(nèi)核模塊,將目前系統(tǒng)內(nèi)存中的系統(tǒng)調(diào)用和內(nèi)核級別函數(shù)的地址輸出,然后將輸出內(nèi)容與預(yù)備好的地址表進行比對。如果系統(tǒng)調(diào)用和函數(shù)地址的與預(yù)備的地址表不能對應(yīng),則表示系統(tǒng)被Rootkit攻擊。
通過HOOK技術(shù)將不一致的系統(tǒng)調(diào)用和函數(shù)的地址替換為正確的地址。此時系統(tǒng)就恢復(fù)正常。但此時惡意的Rootkit模塊仍然在我們的肉核模塊中,只是不能再對兄內(nèi)核的系統(tǒng)調(diào)用進行劫持,也不能隱藏自身的文件和進程,這時我們可以通過找到相關(guān)的惡意文件和程序來進行對linux系統(tǒng)的徹底修復(fù)。
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將對每個部分作出詳細的闡釋:
獲取系統(tǒng)調(diào)用表地址System.map文件包含了系統(tǒng)的內(nèi)核符號地址,由于每次編譯內(nèi)核時,內(nèi)核符號有可能會發(fā)生變化,因此每次編譯都會生成一個新的System.map。因此本發(fā)明可以使用系統(tǒng)本身預(yù)留的系統(tǒng)調(diào)用map文件,也可以使用標(biāo)準(zhǔn)的內(nèi)核產(chǎn)生的map文件,按實際情況使用。
然后加載用戶linux系統(tǒng)的內(nèi)核模塊,獲取到內(nèi)存中的system.map的內(nèi)容并輸出。首先使用insmod加載內(nèi)核模塊。insmod在用戶空間啟動加載過程并定義需要加載的模塊,然后它會調(diào)用init_module系統(tǒng)調(diào)用。init_module將模塊二進制文件復(fù)制到內(nèi)核后,接著系統(tǒng)調(diào)用實現(xiàn)函數(shù)sys-init_module先檢查調(diào)用者是否具有執(zhí)行加載模塊操作的權(quán)限,然后調(diào)用load_module函數(shù)。執(zhí)行完成load_module函數(shù)后用戶linux系統(tǒng)的內(nèi)核模塊就被嵌入內(nèi)核,然后就可以按照寫好的程序獲取內(nèi)核級別的信息,將內(nèi)存中的地址表輸出出來,最終可以將地址的內(nèi)容與預(yù)留的內(nèi)容對比。比如我們從內(nèi)存輸出的系統(tǒng)調(diào)用open函數(shù)的地址是A,然而我們預(yù)留的標(biāo)準(zhǔn)中open函數(shù)的地址是B,那么我們的open系統(tǒng)調(diào)用就被劫持了。此時我們就能確定我們的系統(tǒng)被Rootkit攻擊了。
通過以上方式可以找出所有的被劫持的函數(shù),然后將錯誤的函數(shù)的地址通過HOOK的方式,再更改為正確的地址,如此就可以去掉惡意肉核模塊對操作系統(tǒng)的影響,這樣處理之后,能夠看到被惡意內(nèi)核模塊隱藏的文件和程序。比如惡意的內(nèi)核模塊可以通過劫持open和read等系統(tǒng)調(diào)用是我們看不到某些關(guān)鍵系統(tǒng)的配置文件中的相關(guān)內(nèi)容。利用hook技術(shù)實現(xiàn)系統(tǒng)調(diào)用函數(shù)的劫持。實現(xiàn)方法是在Rootkit模塊加載時將系統(tǒng)調(diào)用表中待劫持的系統(tǒng)調(diào)用索引替換為攻擊者定義的函數(shù)指針,如圖1所示,read和write系統(tǒng)調(diào)用展示了重定向系統(tǒng)調(diào)用過程。sys_read和sys_write是這兩個系統(tǒng)調(diào)用的實現(xiàn)函數(shù),系統(tǒng)調(diào)用表中-NR_read和-NR_write兩個索引指向這兩個函數(shù)(圖中虛線所示)。攻擊者將系統(tǒng)調(diào)用表中相關(guān)索引指向的具體實現(xiàn)函數(shù)更改為:Rootkit-read和Rootkit_write(圖中實線所示),這樣當(dāng)read和write被調(diào)用時,實際執(zhí)行的就是攻擊者函數(shù)。這兩個系統(tǒng)調(diào)用被替換后,我們也可以使用這種方式將正確的函數(shù)的地址替換回去,從而在不干擾系統(tǒng)正常運行的情況下將系統(tǒng)進行部分的修復(fù)。
將系統(tǒng)調(diào)用和函數(shù)被修復(fù)后,我們就可以看到所有的文件系統(tǒng)的調(diào)用情況。此時我們就可以判定哪些是惡意攻擊中的文件或進程。最主要的是要找到Rootkit的內(nèi)核模塊文件。此文件就是隱藏文件和進程的罪魁禍?zhǔn)?。此文件與我們的內(nèi)核模塊的文件類似,一般是以.ko結(jié)尾。找到此文件并且刪除文件,然后刪除相關(guān)的之前被隱藏的文件,開機啟動文件等,此時系統(tǒng)就從Rootkit攻擊中恢復(fù)回來。等待合適的時間重啟系統(tǒng)即可。
本文提出的檢測和保護方案可以補充SSR的不足,SSR只能在未被Rootkit攻擊的基礎(chǔ)上保護系統(tǒng)不被攻擊,但是此方法可以實現(xiàn)對已經(jīng)被攻擊的linux系統(tǒng)進行修復(fù),然后再使用SSR對linux系統(tǒng)進行保護,來補充SSR的不足之處。