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