顏建林 張蕊蕊
摘 要 隨著病毒木馬技術(shù)的發(fā)展,傳統(tǒng)的依賴特征碼查殺病毒木馬的方法不能很好地查殺病毒木馬。病毒木馬可以通過(guò)加殼,混淆等方法繞過(guò)特征碼查殺。同時(shí)近年來(lái),勒索軟件的流行,大部分殺毒軟件針對(duì)已存在的勒索軟件進(jìn)行防御,卻不能很好的防御未知或者新型的勒索軟件,因此找到一種能夠防御已知和未知的勒索軟件的方法就顯的尤為重要。針對(duì)病毒木馬,本軟件沒有采用基于特征碼的方式去檢查,而是采用了在內(nèi)核中對(duì)各個(gè)關(guān)鍵點(diǎn)進(jìn)行監(jiān)測(cè),以此來(lái)避免用戶層的監(jiān)測(cè)被病毒木馬繞過(guò)的情況。同時(shí)在對(duì)病毒木馬行為監(jiān)測(cè)的同時(shí)會(huì)對(duì)關(guān)鍵數(shù)據(jù)進(jìn)行記錄,如注入的數(shù)據(jù),操作的文件,注冊(cè)表敏感位置的修改,能夠極大的減少后續(xù)人工逆向分析的時(shí)間。本文采用了多種方法進(jìn)行防御勒索軟件:通過(guò)放置陷阱文件,監(jiān)測(cè)進(jìn)程的文件讀寫數(shù)量,記錄每個(gè)進(jìn)程最近讀寫文件的內(nèi)容,能盡最大的可能發(fā)現(xiàn)勒索軟件的存在,同時(shí)減少錯(cuò)誤中止進(jìn)程的概率。
關(guān)鍵詞 行為分析;勒索軟件;檢測(cè);惡意軟件;網(wǎng)絡(luò)安全
中圖分類號(hào) TP3 文獻(xiàn)標(biāo)識(shí)碼 A 文章編號(hào) 1674-6708(2018)217-0110-03
1 惡意軟件的發(fā)展和現(xiàn)狀
惡意軟件是病毒,木馬,流氓軟件等一系列軟件的總稱。在早期個(gè)人計(jì)算機(jī)運(yùn)算能力不足,存儲(chǔ)容量不夠的情況下,流行的主要是以破壞為目的或者黑客以炫耀技術(shù)為目的的病毒。Mcafee在他們的2016年度報(bào)告中稱2016年為勒索軟件之年,就可以看出勒索軟件在近年來(lái)的發(fā)展趨勢(shì)。勒索軟件流行不僅僅是因?yàn)閭€(gè)人計(jì)算機(jī)上存儲(chǔ)的敏感數(shù)據(jù)增多,相比其他類型的木馬勒索軟件更具隱蔽性,更容易逃過(guò)殺毒軟件的查殺,而且一旦受害者計(jì)算機(jī)被感染后只能選擇交付贖金解密也是勒索軟件流行的一個(gè)原因。比較知名的勒索軟件有TeslaCrypt,CryptXXX,Jigsaw等,目前在多數(shù)情況下,被勒索軟件加密的文件無(wú)法解密,只有少數(shù)存在設(shè)計(jì)缺陷如密鑰管理不當(dāng),密鑰空間過(guò)小的勒索軟件能夠被解密。
2 惡意軟件防御與檢測(cè)現(xiàn)狀
早期惡意軟件數(shù)量較少時(shí),多數(shù)殺毒軟件,防火墻檢測(cè)惡意軟件的方法都是特征碼掃描,在這個(gè)時(shí)期,特征碼掃描的方法是較為準(zhǔn)確可靠的。但是,在Mcafee的2016年度報(bào)告中,僅2016年第2季度就有6億惡意軟件被檢測(cè)到。因此傳統(tǒng)的特征碼掃描在惡意軟件大量增多的情況下,就顯得十分不可靠,低效率。
現(xiàn)在大部分殺毒軟件都開始采用動(dòng)態(tài)行為分析,云端檢測(cè)等多種方法來(lái)查殺惡意軟件,也有部分安全產(chǎn)品使用了機(jī)器學(xué)習(xí)來(lái)查殺惡意軟件。但是勒索軟件比較容易繞過(guò)這些防御手段,主要在于勒索軟件相比其他惡意軟件可能不會(huì)有添加開機(jī)啟動(dòng)項(xiàng),頻繁聯(lián)網(wǎng),修改注冊(cè)表等操作。目前主要是通過(guò)放置陷阱文件,備份,以及基于機(jī)器學(xué)習(xí),通過(guò)行為分析,布置蜜罐等方法來(lái)防御勒索軟件的。
3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
3.1 用戶層管理與顯示模塊
該模塊是本程序中用戶唯一可見的模塊,主要起到初始化整個(gè)程序,顯示惡意進(jìn)程處理結(jié)果,轉(zhuǎn)發(fā)模塊之間消息的作用。為了提高通信效率,采用了多線程的方式在多模塊之間進(jìn)行消息傳遞。
3.1.1 初始化
該模塊會(huì)使用net start命令啟動(dòng)已經(jīng)安裝在操作系統(tǒng)中的其他模塊,然后運(yùn)行,針對(duì)不同的模塊,分別創(chuàng)建線程進(jìn)行通信。
3.1.2 通信信息處理
在進(jìn)行通信前需要定義好通信協(xié)議的結(jié)構(gòu),同時(shí)要確定通信的發(fā)起方。在文件過(guò)濾模塊與用戶層通信時(shí),用戶層首先與驅(qū)動(dòng)建立連接,確定通信端口,之后用戶層的通信線程一直處于循環(huán)中,等待內(nèi)核發(fā)來(lái)消息。當(dāng)過(guò)濾模塊監(jiān)測(cè)到異常文件操作時(shí)會(huì)將信息按預(yù)先定義好的結(jié)構(gòu)發(fā)向用戶層,當(dāng)有消息發(fā)來(lái)時(shí),用戶層的線程會(huì)接收消息,按格式提取出進(jìn)程信息,并將該消息發(fā)向其他驅(qū)動(dòng)中。
用戶層與行為分析基礎(chǔ)框架模塊進(jìn)行通信時(shí)采用的時(shí)DeviceIoControl函數(shù),需要預(yù)先定義對(duì)應(yīng)的控制碼類型,如TYPE_RANSOMEWARE是關(guān)于勒索軟件信息,TYPE_INJECT是關(guān)于進(jìn)程注入的信息。當(dāng)存在勒索軟件時(shí),用戶層軟件會(huì)主動(dòng)向行為分析模塊發(fā)生勒索軟件信息,行為分析模塊嘗試中止勒索軟件后將處理結(jié)果返回。但是當(dāng)用戶層軟件查詢注入,注冊(cè)表等其他敏感操作時(shí),會(huì)發(fā)起一個(gè)對(duì)應(yīng)類型的請(qǐng)求,然后進(jìn)入阻塞等待狀態(tài),直到有對(duì)應(yīng)類型的惡意操作產(chǎn)生,內(nèi)核中的行為分析模塊才會(huì)進(jìn)行消息的回復(fù),用戶層的線程接收到消息后會(huì)恢復(fù)運(yùn)行,按預(yù)先定義的格式提取出敏感操作發(fā)起的進(jìn)程信息。
當(dāng)系統(tǒng)中存在勒索軟件時(shí),消息的傳遞方向和順序。首先文件過(guò)濾模塊會(huì)使用FltSendMessage函數(shù)將數(shù)據(jù)按預(yù)先定義的格式發(fā)向用戶層,用戶層接收到消息后馬上將消息以TYPE_RANSOMEWARE的類型發(fā)向行為分析模塊,行為分析模塊中止勒索進(jìn)程后將處理結(jié)果發(fā)向用戶層進(jìn)行顯示。
查詢注入情況的消息處理流程,首先由用戶層發(fā)起查詢注入情況的請(qǐng)求,然后進(jìn)入等待狀態(tài),行為分析模塊會(huì)一直再內(nèi)核中監(jiān)測(cè)注入情況,直到存在注入,才會(huì)將消息返回用戶層,會(huì)話用戶層線程的運(yùn)行狀態(tài)。
3.2 行為分析基礎(chǔ)模塊
該部分主要是整個(gè)程序的基礎(chǔ)部分,用戶層的管理顯示模塊會(huì)將其他模塊的信息轉(zhuǎn)發(fā)到這個(gè)。比如防御勒索軟件的模塊檢測(cè)到勒索軟件,它會(huì)將進(jìn)程與其相關(guān)的信息發(fā)向用戶層的管理顯示模塊,再由用戶層的管理顯示模塊發(fā)向行為分析基礎(chǔ)模塊中去終止該進(jìn)程。行為分析基礎(chǔ)模塊維護(hù)了整個(gè)系統(tǒng)中的進(jìn)程以及進(jìn)程相關(guān)的其他信息,如進(jìn)程的文件讀寫操作,注冊(cè)表操作等。
3.2.1 基礎(chǔ)框架和結(jié)構(gòu)
在操作系統(tǒng)中每個(gè)程序都是以進(jìn)程為單位進(jìn)行資源的分配。所以最為基礎(chǔ)的是記錄當(dāng)前操作系統(tǒng)中存在的進(jìn)程,在程序中以一個(gè)自定義的結(jié)構(gòu)保存進(jìn)程信息。該結(jié)構(gòu)保存了每個(gè)進(jìn)程的文件路徑,父進(jìn)程信息,以及每個(gè)進(jìn)程的威脅分?jǐn)?shù)。結(jié)構(gòu)體中的score就是威脅分?jǐn)?shù)。一個(gè)進(jìn)程添加了自啟動(dòng)項(xiàng),會(huì)增加一個(gè)自啟動(dòng)對(duì)應(yīng)的分?jǐn)?shù),一個(gè)進(jìn)程注入了其他進(jìn)程會(huì)添加一個(gè)注入對(duì)應(yīng)的分?jǐn)?shù),一旦進(jìn)程威脅分?jǐn)?shù)達(dá)到一個(gè)閾值就可以判斷這個(gè)進(jìn)程是一個(gè)可疑進(jìn)程。
如果只是記錄單個(gè)進(jìn)程的威脅分?jǐn)?shù),可能會(huì)存在不能檢測(cè)到部分惡意軟件的情況。因?yàn)楝F(xiàn)在很大惡意軟件將惡意操作分布到多個(gè)進(jìn)程中執(zhí)行,所以在程序中還保存了每個(gè)進(jìn)程父進(jìn)程的信息,如果存在一個(gè)惡意軟件創(chuàng)建一個(gè)新的進(jìn)程,并將惡意代碼解密出來(lái),注入到新的進(jìn)程中執(zhí)行的情況,雖然兩個(gè)進(jìn)程的威脅分?jǐn)?shù)都沒有達(dá)到閾值也會(huì)被判斷為可疑進(jìn)程。
進(jìn)程的信息需要實(shí)時(shí)的更新,當(dāng)有新的進(jìn)程創(chuàng)建時(shí)需要把新進(jìn)程信息保存下來(lái),當(dāng)有進(jìn)程退出時(shí)需要將進(jìn)程信息釋放,避免整個(gè)程序信息的不可靠和冗余。因此需要在NtCreateUserProcess等進(jìn)程相關(guān)的API處進(jìn)行HOOK,系統(tǒng)中所有的進(jìn)程以雙向鏈表的形式保存,每當(dāng)有新的進(jìn)程創(chuàng)建時(shí),將新進(jìn)程信息寫入鏈表末尾,有進(jìn)程退出時(shí),將進(jìn)程信息從鏈表中刪除。
3.2.2 惡意操作監(jiān)測(cè)
在有了之前的基礎(chǔ)上,對(duì)惡意操作的監(jiān)測(cè)就是對(duì)SSDT中的函數(shù)進(jìn)行hook了。
惡意軟件為了保證自身常駐與操作系統(tǒng)中肯定會(huì)想辦法在每次開機(jī)時(shí)啟動(dòng),這可以通過(guò)添加注冊(cè)表操作的回調(diào)函數(shù)來(lái)進(jìn)行監(jiān)測(cè),同時(shí)惡意軟件肯定會(huì)為了逃避殺軟查殺使用各種小技巧,比如將自身惡意代碼注入正常進(jìn)程,這可以通過(guò)對(duì)進(jìn)程創(chuàng)建和內(nèi)存讀寫的函數(shù)進(jìn)行hook。
除了上文提到的方法還有以下幾種方法檢測(cè)進(jìn)程注入:
1)針對(duì)特殊進(jìn)程,比如svchost的進(jìn)程父進(jìn)程是一個(gè)映像文件在D盤中的進(jìn)程,就可以判斷存在進(jìn)程注入。
2)當(dāng)一個(gè)進(jìn)程中的代碼段的屬性為可讀可寫可執(zhí)行時(shí),也可以判斷存在有殼,注入的情況。
3)比較VAD和PEB中是否都存在主模塊,如果是進(jìn)程注入,VAD中會(huì)不存在主模塊。
對(duì)注冊(cè)表的監(jiān)測(cè)主要在于對(duì)一些啟動(dòng)項(xiàng)的監(jiān)測(cè)和對(duì)一些惡意軟件常常讀取用來(lái)判斷自己是否在虛擬機(jī)中的位置進(jìn)行監(jiān)測(cè)。常見的啟動(dòng)項(xiàng)HKCU\ Software\Microsoft\Windows\Curr
entVersion\Policies\Explorer,Software\ Microsoft\Windows\CurrentVersion\Run, Software\Micro
soft\Windows\CurrentVersion\RunOnce等。
還有一些惡意軟件會(huì)阻止分析,比如阻止任務(wù)管理器的打開,阻止cmd的運(yùn)行,阻止控制面板的打開等。
在內(nèi)核中提供了注冊(cè)表操作通知的回調(diào)接口。可以使用CmRegisterCallback注冊(cè)回調(diào)函數(shù)。在回調(diào)函數(shù)中可以最任意的注冊(cè)表操作進(jìn)行記錄和監(jiān)控。
3.3 文件過(guò)濾模塊
這個(gè)模塊主要使用多種方法結(jié)合進(jìn)行防御勒索軟件。如果只是單純的對(duì)短時(shí)間內(nèi)大量讀寫文件的進(jìn)程進(jìn)行中斷,錯(cuò)誤率極高,因此使用了3種方法,分別是陷阱文件是否被修改,文件讀寫數(shù)量是否達(dá)到閾值,文件讀寫內(nèi)容是否符合勒索軟件特點(diǎn)。
3.3.1 文件過(guò)濾
本系統(tǒng)使用minifilter而不是傳統(tǒng)的文件過(guò)濾驅(qū)動(dòng),當(dāng)驅(qū)動(dòng)檢查到有異常時(shí)會(huì)把異常進(jìn)程的信息通過(guò)FltSendMessage發(fā)向用戶層,用戶層再將該信息發(fā)向保存進(jìn)程列表的驅(qū)動(dòng)中做進(jìn)一步的判斷和決定是否中止進(jìn)程。
3.3.2 陷阱文件
這里模仿的是安全防御中常見的蜜罐的思想,蜜罐是一種故意布置在網(wǎng)絡(luò)中存在漏洞或者安全問題的計(jì)算機(jī)系統(tǒng),主要的作用是用來(lái)提醒網(wǎng)絡(luò)管理員去防范某一類攻擊,或者去追溯黑客組織信息。蜜罐中暴露出來(lái)的信息實(shí)際上都是虛假的或者無(wú)意義的。在本防火墻中就布置了類似思想的陷阱文件。陷阱文件的布置由用戶層管理與顯示模塊在初始化時(shí)完成。陷阱文件本身的內(nèi)容是無(wú)意義的,但是一旦陷阱文件被加密就可以產(chǎn)生一個(gè)警報(bào)給操作系統(tǒng)使用者。
除去針對(duì)MBR進(jìn)行加密的勒索軟件,幾乎所有加密文件的勒索軟件會(huì)調(diào)用FindFirstFile,F(xiàn)indNextFile這兩個(gè)API對(duì)文件進(jìn)行遍歷,然后對(duì)文件進(jìn)行加密。所以可以放置一個(gè)陷阱文件,實(shí)時(shí)的監(jiān)測(cè)這個(gè)文件的讀寫狀態(tài),如果這個(gè)文件被修改就可以判斷有勒索軟件存在,因?yàn)檫@個(gè)陷阱文件是無(wú)實(shí)際意義的文件,一般情況下是不會(huì)有進(jìn)程對(duì)其進(jìn)行修改的,只有勒索文件在遍歷磁盤加密文件時(shí),會(huì)對(duì)該陷阱文件進(jìn)行讀寫操作。
3.3.3 文件讀寫數(shù)量和內(nèi)容監(jiān)測(cè)
勒索軟件還有一個(gè)特征就是短時(shí)間內(nèi)會(huì)進(jìn)行大量的文件讀寫,因此可以設(shè)置一個(gè)時(shí)間,比如1分鐘,如果在這一分鐘內(nèi)某一個(gè)進(jìn)程對(duì)文件的讀寫超過(guò)閾值就可以說(shuō)這個(gè)進(jìn)程是可疑的,但是很多正常進(jìn)程同樣會(huì)在短時(shí)間內(nèi)會(huì)對(duì)文件進(jìn)行大量讀寫,所以在該模塊中對(duì)每個(gè)進(jìn)程增加一個(gè)結(jié)構(gòu),保存該進(jìn)程最近讀取的文件名字和路徑,因?yàn)槔账鬈浖x取的時(shí)候是按照順序來(lái)的,那么肯定會(huì)對(duì)同一目錄下的多個(gè)文件進(jìn)行加密,如果在該結(jié)構(gòu)中檢查到同一個(gè)目錄下多個(gè)文件,再加上這個(gè)進(jìn)程短時(shí)間內(nèi)有大量的讀寫情況,就能減少誤判的概率。
3.4 網(wǎng)絡(luò)流量監(jiān)測(cè)模塊
這個(gè)模塊是整個(gè)防火墻的最后一道防線,除了勒索軟件的惡意軟件,其他的惡意軟件如DDOS木馬,遠(yuǎn)控木馬,竊取敏感信息的木馬最后都會(huì)有聯(lián)網(wǎng)的操作,一旦能夠在聯(lián)網(wǎng)的過(guò)程中將其阻止,阻斷其與控制端通信的途徑,即使惡意軟件收集到了足夠多的敏感信息也不會(huì)造成損失。
流量監(jiān)測(cè):
這個(gè)模塊需要結(jié)合行為分析基礎(chǔ)模塊,一個(gè)進(jìn)程在行為分析的過(guò)程中達(dá)到威脅的閾值,該模塊的網(wǎng)絡(luò)連接就會(huì)被中斷。
4 結(jié)論
本系統(tǒng)設(shè)計(jì)了一個(gè)基于行為分析檢測(cè)的內(nèi)核級(jí)惡意程序監(jiān)控與分析系統(tǒng),在內(nèi)核層對(duì)系統(tǒng)關(guān)鍵API進(jìn)行監(jiān)測(cè),并且對(duì)流量進(jìn)行過(guò)濾和記錄就可以在一定程度上避免惡意程序造成的破壞。
參考文獻(xiàn)
[1]譚文,陳銘霖,張佩,等.Windows內(nèi)核安全與驅(qū)動(dòng)開發(fā)[M].北京:電子工業(yè)出版社,2015:45-78.
[2]Mark Russinovich,David A.Solomon,Alex Ionescu.深入解析Windows操作系統(tǒng)上冊(cè)[M].北京:電子工業(yè)出版社,2014:69-127.
[3]Mark Russinovich,David A.Solomon,Alex Ionescu.深入解析Windows操作系統(tǒng):卷2.北京:人民郵電出版社,2013,200-230.