南理勇(濱州學(xué)院 信息工程系,山東 濱州 256603)
提高可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)安全運(yùn)行的方案
南理勇
(濱州學(xué)院信息工程系,山東濱州256603)
可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)在運(yùn)行時(shí)會(huì)面臨攻擊者采用任務(wù)管理器或第三方工具強(qiáng)行關(guān)閉的攻擊,可能導(dǎo)致應(yīng)用程序無(wú)法正常運(yùn)行。為解決這類(lèi)應(yīng)用程序安全運(yùn)行的問(wèn)題,提出一種融合進(jìn)程隱藏和進(jìn)程守護(hù)技術(shù)的可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)安全運(yùn)行方案。該方案利用改進(jìn)的遠(yuǎn)程線(xiàn)程注入技術(shù)提高系統(tǒng)隱蔽性,利用雙守護(hù)進(jìn)程的兩級(jí)監(jiān)控體系提高系統(tǒng)健壯性,從而達(dá)到維護(hù)程序安全運(yùn)行的目的。應(yīng)用結(jié)果表明,該方案能夠很好地抵抗強(qiáng)行關(guān)閉攻擊。
進(jìn)程隱藏;信息隱藏;進(jìn)程守護(hù);遠(yuǎn)程線(xiàn)程注入;可移動(dòng)存儲(chǔ)設(shè)備
可移動(dòng)存儲(chǔ)設(shè)備由于其體積小、容量大、攜帶方便等優(yōu)點(diǎn)得到了廣泛應(yīng)用??梢苿?dòng)存儲(chǔ)設(shè)備在給人們帶來(lái)方便的同時(shí),也給企事業(yè)單位引入了極大的安全隱患,是個(gè)人計(jì)算機(jī)系統(tǒng)信息泄露的主要途徑[1]。在一些有保密性要求的單位,既希望利用可移動(dòng)存儲(chǔ)設(shè)備即插即用、無(wú)需安裝驅(qū)動(dòng)程序、攜帶方便等優(yōu)點(diǎn),同時(shí)又希望可移動(dòng)存儲(chǔ)設(shè)備只能在特定范圍內(nèi)使用,以保證所存儲(chǔ)的內(nèi)容不會(huì)向外泄漏。為滿(mǎn)足這一需求,需要開(kāi)發(fā)對(duì)可移動(dòng)存儲(chǔ)設(shè)備進(jìn)行綜合管理的系統(tǒng),對(duì)單位內(nèi)部的可移動(dòng)存儲(chǔ)設(shè)備進(jìn)行管理,禁止外部可移動(dòng)存儲(chǔ)設(shè)備在內(nèi)部使用[2]。然而,在實(shí)際應(yīng)用中,對(duì)要受保護(hù)的計(jì)算機(jī)安裝可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)后,用戶(hù)可以使用任務(wù)管理器或者第三方工具結(jié)束其進(jìn)程,這樣,即使安裝了該程序,也無(wú)法實(shí)現(xiàn)對(duì)可移動(dòng)存儲(chǔ)設(shè)備的管理。因此,如何增強(qiáng)系統(tǒng)隱蔽性防止被用戶(hù)發(fā)現(xiàn),或者被用戶(hù)發(fā)現(xiàn)時(shí)能夠防止被用戶(hù)結(jié)束,是可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)安全運(yùn)行亟待解決的問(wèn)題。解決這一問(wèn)題通常采用的技術(shù)路線(xiàn)有兩種:進(jìn)程隱藏技術(shù)和進(jìn)程守護(hù)技術(shù)。本文基于對(duì)進(jìn)程隱藏和進(jìn)程守護(hù)技術(shù)的分析,結(jié)合兩種技術(shù)的優(yōu)點(diǎn),給出了一種融合這兩種技術(shù)的可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)安全運(yùn)行的方案。
進(jìn)程隱藏技術(shù)有很多,現(xiàn)有進(jìn)程隱藏技術(shù)主要分為三類(lèi)[3]:(1)基于API Hook的進(jìn)程隱藏;(2)基于DLL的進(jìn)程隱藏;(3)基于遠(yuǎn)程線(xiàn)程注入的進(jìn)程隱藏。其中,基于遠(yuǎn)程線(xiàn)程注入的進(jìn)程隱藏技術(shù)隱蔽性和健壯性好,可以存在于任一進(jìn)程(包括系統(tǒng)進(jìn)程的內(nèi)存空間)中,因而成為目前最為常用的進(jìn)程隱藏技術(shù)[3]。遠(yuǎn)程線(xiàn)程注入技術(shù)有兩種:直接代碼注入和以DLL形式注入。雖然直接代碼注入技術(shù)隱蔽性比DLL形式注入技術(shù)的隱蔽性更好一些,但是直接代碼注入技術(shù)對(duì)注入代碼的大小有限制[4],所以,在實(shí)際開(kāi)發(fā)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí),多采用遠(yuǎn)程線(xiàn)程注入DLL的進(jìn)程隱藏技術(shù)。
1.1DLL形式遠(yuǎn)程線(xiàn)程注入技術(shù)
通常情況下,每個(gè)進(jìn)程都有自己的私有地址空間,其他進(jìn)程不允許對(duì)這個(gè)私有地址空間進(jìn)行訪問(wèn)操作。遠(yuǎn)程線(xiàn)程注入技術(shù)通過(guò)在目標(biāo)進(jìn)程中創(chuàng)建遠(yuǎn)程線(xiàn)程的方法進(jìn)入目標(biāo)進(jìn)程的內(nèi)存地址空間,由注入到遠(yuǎn)程進(jìn)程中的線(xiàn)程啟動(dòng)指定DLL,在指定DLL中完成要實(shí)現(xiàn)的功能,這樣就可以使要實(shí)現(xiàn)的功能的代碼運(yùn)行到遠(yuǎn)程進(jìn)程中。如果注入到進(jìn)程explorer.exe中,用戶(hù)使用任務(wù)管理器或者第三方進(jìn)程查看工具看到的是explorer.exe進(jìn)程,而注入到explorer.exe進(jìn)程中的代碼被隱藏起來(lái),因此,增強(qiáng)了系統(tǒng)的隱蔽性,不容易被發(fā)現(xiàn)。
1.2遠(yuǎn)程線(xiàn)程注入技術(shù)的實(shí)現(xiàn)
遠(yuǎn)程線(xiàn)程注入技術(shù)的實(shí)現(xiàn)主要有5個(gè)步驟[5]:(1)通過(guò)OpenProcess打開(kāi)試圖注入的遠(yuǎn)程進(jìn)程,獲取其句柄;(2)利用VirtualAllocEx在遠(yuǎn)程進(jìn)程中為要注入的DLL申請(qǐng)足夠的內(nèi)存地址空間;(3)利用WriteProcessMemory將DLL路徑名復(fù)制到遠(yuǎn)程進(jìn)程的內(nèi)存地址空間;(4)通過(guò)GetProcAddress計(jì)算LoadLibrary在Windows系統(tǒng)庫(kù)中的入口地址,用于后面加載DLL;(5)利用CreateRemote Thread創(chuàng)建遠(yuǎn)程線(xiàn)程并加載DLL。
雖然DLL文件在目標(biāo)進(jìn)程運(yùn)行時(shí)任務(wù)管理器中不會(huì)列出DLL文件名,看到的只是目標(biāo)進(jìn)程的文件名,這在一定程度上增強(qiáng)了系統(tǒng)隱蔽性,能夠有效防止被用戶(hù)發(fā)現(xiàn)進(jìn)程,但是通過(guò)DLL形式遠(yuǎn)程線(xiàn)程注入技術(shù)的實(shí)現(xiàn)步驟可以發(fā)現(xiàn)該技術(shù)也仍然存在缺點(diǎn),即不僅硬盤(pán)上有DLL文件存在,而且使用一些工具查看系統(tǒng)進(jìn)程加載DLL時(shí)也會(huì)發(fā)現(xiàn)進(jìn)程中可疑的DLL,這為系統(tǒng)的安全帶來(lái)隱患,需要在設(shè)計(jì)開(kāi)發(fā)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí)加以解決。
進(jìn)程守護(hù)技術(shù)的基本思想是啟動(dòng)一個(gè)新的進(jìn)程(即守護(hù)進(jìn)程)來(lái)對(duì)需要保護(hù)的進(jìn)程(即待檢測(cè)進(jìn)程)進(jìn)行輪詢(xún)檢測(cè),如果檢測(cè)到要受保護(hù)的進(jìn)程不存在,則守護(hù)進(jìn)程將立刻啟動(dòng)需要保護(hù)的進(jìn)程,如此循環(huán)往復(fù)。這樣,即使用戶(hù)使用任務(wù)管理器或者第三方進(jìn)程查看工具看到了需要保護(hù)的進(jìn)程,關(guān)閉了需要保護(hù)的進(jìn)程后,該進(jìn)程又被守護(hù)進(jìn)程啟動(dòng),使得關(guān)閉需要保護(hù)進(jìn)程的行為變得毫無(wú)實(shí)際意義。因此,在設(shè)計(jì)開(kāi)發(fā)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí)采用以進(jìn)程守護(hù)技術(shù)為主同時(shí)融合進(jìn)程隱藏技術(shù)的方案。
進(jìn)程守護(hù)技術(shù)的實(shí)現(xiàn)需要考慮兩個(gè)問(wèn)題:(1)如何防止守護(hù)進(jìn)程被結(jié)束。因?yàn)榇龣z測(cè)進(jìn)程有守護(hù)進(jìn)程的保護(hù),是無(wú)法結(jié)束的。但是,若沒(méi)有守護(hù)進(jìn)程的保護(hù),則是可以結(jié)束的。(2)如何提高守護(hù)進(jìn)程和待檢測(cè)進(jìn)程之間的工作效率。如果按時(shí)間直接輪詢(xún),將會(huì)耗費(fèi)系統(tǒng)資源,特別是CPU時(shí)間。占用過(guò)多CPU時(shí)間會(huì)引起用戶(hù)注意。
可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)的整體結(jié)構(gòu)設(shè)計(jì)分為兩個(gè)部分:可移動(dòng)存儲(chǔ)設(shè)備管理客戶(hù)端RSDMSClient和授權(quán)中心RSDMSACenter。授權(quán)中心負(fù)責(zé)對(duì)可移動(dòng)存儲(chǔ)設(shè)備的授權(quán),只有經(jīng)過(guò)授權(quán)的可移動(dòng)存儲(chǔ)設(shè)備才能在安裝有客戶(hù)端的計(jì)算機(jī)上使用??蛻?hù)端安裝在每個(gè)需要保護(hù)的計(jì)算機(jī)上,它實(shí)時(shí)監(jiān)測(cè)本地計(jì)算機(jī)系統(tǒng)的每個(gè)移動(dòng)存儲(chǔ)接口,當(dāng)監(jiān)測(cè)到有可移動(dòng)存儲(chǔ)設(shè)備接入本地計(jì)算機(jī)系統(tǒng)時(shí),客戶(hù)端進(jìn)程對(duì)來(lái)訪的可移動(dòng)存儲(chǔ)設(shè)備進(jìn)行鑒別,并根據(jù)鑒別結(jié)果采取相應(yīng)的訪問(wèn)控制策略。
一個(gè)普通的可移動(dòng)存儲(chǔ)設(shè)備,如果沒(méi)有授權(quán)是不能接入到安裝有客戶(hù)端程序的計(jì)算機(jī)上使用的。因此,只要對(duì)單位內(nèi)部的可移動(dòng)存儲(chǔ)設(shè)備進(jìn)行授權(quán),不對(duì)外部的可移動(dòng)存儲(chǔ)設(shè)備授權(quán)就可以達(dá)到禁止外部可移動(dòng)存儲(chǔ)設(shè)備在內(nèi)部使用這一需求。授權(quán)中心運(yùn)行在專(zhuān)用機(jī)器上,不運(yùn)行在客戶(hù)端,只有專(zhuān)職人員才能使用,其安全性相對(duì)較高??梢苿?dòng)存儲(chǔ)設(shè)備管理系統(tǒng)客戶(hù)端程序安裝在受保護(hù)的個(gè)人計(jì)算機(jī)上,易遭受用戶(hù)使用任務(wù)管理器或者第三方工具強(qiáng)行關(guān)閉的攻擊,需要采取措施抵抗用戶(hù)的強(qiáng)行關(guān)閉。在設(shè)計(jì)開(kāi)發(fā)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí),將客戶(hù)端程序編寫(xiě)成DLL,融合進(jìn)程隱藏和進(jìn)程守護(hù)技術(shù),能有效防止用戶(hù)的強(qiáng)行關(guān)閉攻擊。下面給出設(shè)計(jì)過(guò)程中的幾個(gè)要點(diǎn)。
3.1遠(yuǎn)程線(xiàn)程注入DLL后將其刪除提高系統(tǒng)隱蔽性
遠(yuǎn)程線(xiàn)程注入DLL后,DLL文件在目標(biāo)進(jìn)程中運(yùn)行時(shí),任務(wù)管理器中不會(huì)列出DLL文件名,看到的只是目標(biāo)進(jìn)程文件名,但一些工具可以查看一個(gè)進(jìn)程究竟裝入哪些DLL文件,通過(guò)這些工具仍然可以發(fā)現(xiàn)進(jìn)程中的可疑DLL。要解決這個(gè)問(wèn)題,必須脫離DLL文件,讓遠(yuǎn)程運(yùn)行的代碼只存在于內(nèi)存中,這樣就不會(huì)顯示有某個(gè)文件被非法裝入。因此,采用注入DLL后將其刪除的方法可以進(jìn)一步提高系統(tǒng)隱蔽性。
該方法基本思想:因?yàn)樽⑷隓LL后會(huì)在被注入的進(jìn)程內(nèi)存中產(chǎn)生映像,通過(guò)Get ProcAddress函數(shù)獲取映像的入口函數(shù)地址,并對(duì)內(nèi)存映像進(jìn)行備份;使用FreeLibrar y釋放加載的DLL,并刪除DLL文件;前面FreeLibrar y釋放加載的DLL時(shí),內(nèi)存映像的內(nèi)容也會(huì)隨之釋放,因此必須將內(nèi)存映像的備份復(fù)制到釋放前所在的地址空間。這樣,只要通過(guò)調(diào)用獲取的入口函數(shù)地址就實(shí)現(xiàn)了程序隱藏,從而提高了系統(tǒng)隱蔽性。
3.2雙守護(hù)進(jìn)程的兩級(jí)監(jiān)控體系提高系統(tǒng)健壯性
將客戶(hù)端RSDMSClient程序編寫(xiě)成DLL,采用遠(yuǎn)程線(xiàn)程注入技術(shù)注入到常用的系統(tǒng)進(jìn)程。這樣即使注入的DLL模塊被發(fā)現(xiàn),在任務(wù)管理器中系統(tǒng)進(jìn)程是不允許被關(guān)閉的,因此安全性得到提高。但是,用戶(hù)使用第三方工具還是有可能結(jié)束系統(tǒng)進(jìn)程的,系統(tǒng)進(jìn)程結(jié)束了,注入的監(jiān)控程序也就不存在了,外部的可移動(dòng)存儲(chǔ)設(shè)備就可以在內(nèi)部使用。所以,不能單純采用遠(yuǎn)程線(xiàn)程注入技術(shù),可以結(jié)合使用進(jìn)程守護(hù)技術(shù),形成兩級(jí)監(jiān)控。第一級(jí)監(jiān)控(即守護(hù)進(jìn)程注入到系統(tǒng)進(jìn)程)負(fù)責(zé)監(jiān)控第二級(jí)監(jiān)控是否已經(jīng)注入到另外的系統(tǒng)進(jìn)程,若沒(méi)有則將其注入到另外的系統(tǒng)進(jìn)程。第二級(jí)監(jiān)控才是真正負(fù)責(zé)具體監(jiān)控任務(wù)的。
采用兩級(jí)監(jiān)控對(duì)系統(tǒng)起到了隱藏和保護(hù)作用,使得系統(tǒng)更加安全。前面在進(jìn)程守護(hù)技術(shù)中提到,守護(hù)進(jìn)程沒(méi)有保護(hù),如果先關(guān)閉守護(hù)進(jìn)程,系統(tǒng)的安全性就降低很多。因此,需要提高守護(hù)進(jìn)程的安全性,在設(shè)計(jì)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí)采用雙進(jìn)程守護(hù)技術(shù)。
雙進(jìn)程守護(hù)技術(shù)是功能完全相同的兩個(gè)程序不斷地檢測(cè)對(duì)方是否已經(jīng)被結(jié)束,如果發(fā)現(xiàn)對(duì)方已經(jīng)被結(jié)束了,那么又開(kāi)始創(chuàng)建對(duì)方,這樣又能夠讓對(duì)方執(zhí)行。顯然,采用雙守護(hù)進(jìn)程的兩級(jí)監(jiān)控體系極大提高了系統(tǒng)健壯性。但是,需要注意的是,雙守護(hù)進(jìn)程彼此不斷檢測(cè)對(duì)方是否存在時(shí),對(duì)系統(tǒng)CPU資源的耗費(fèi)是致命的。解決CPU資源的耗費(fèi)方法是使用心跳機(jī)制。假設(shè)兩個(gè)進(jìn)程是proc1和proc2。proc1首先遍歷進(jìn)程快照,如果proc2存在,proc1刷新進(jìn)程快照,重新遍歷進(jìn)程快照;如果proc2不存在,proc1開(kāi)始創(chuàng)建proc2,然后proc1退出。當(dāng)proc1退出時(shí),proc2又開(kāi)始重復(fù)類(lèi)似proc1的動(dòng)作。
3.3基于WM_DEVICECHANGE消息提高探測(cè)效率
采用進(jìn)程守護(hù)技術(shù)確實(shí)提高了系統(tǒng)的健壯性,但如何提高守護(hù)進(jìn)程與待檢測(cè)進(jìn)程之間工作效率是必須解決的問(wèn)題。對(duì)可移動(dòng)存儲(chǔ)設(shè)備的實(shí)時(shí)探測(cè),若按照時(shí)間直接輪詢(xún),則會(huì)耗費(fèi)很多系統(tǒng)資源。因?yàn)橹灰蛻?hù)端程序RSDMSClient運(yùn)行,不管有沒(méi)有可移動(dòng)存儲(chǔ)設(shè)備接入都會(huì)不斷輪詢(xún),這其中有大部分是空轉(zhuǎn)輪詢(xún),極大地浪費(fèi)了系統(tǒng)CPU時(shí)間。為了提高探測(cè)效率,按照時(shí)間直接輪詢(xún)是不合理的,在設(shè)計(jì)可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)時(shí)采用基于WM_DEVICECHANGE消息的實(shí)時(shí)探測(cè)來(lái)提高守護(hù)進(jìn)程與待檢測(cè)進(jìn)程之間工作效率。
當(dāng)設(shè)備狀態(tài)發(fā)生變化時(shí),系統(tǒng)將會(huì)以WM_DEVICECHANGE消息通知應(yīng)用程序。在可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)中,當(dāng)有可移動(dòng)存儲(chǔ)設(shè)備接入到客戶(hù)端計(jì)算機(jī)并且準(zhǔn)備就緒,可以正常訪問(wèn)時(shí),系統(tǒng)會(huì)發(fā)出DBT_DEVICEARRIVAL類(lèi)型消息,如果這時(shí)探測(cè)接入的設(shè)備,不僅可以保證不漏掉任何可移動(dòng)存儲(chǔ)設(shè)備的探測(cè),而且可以避免出現(xiàn)空轉(zhuǎn)輪詢(xún),從而極大地提高了系統(tǒng)工作效率。WM_DEVICECHANGE所對(duì)應(yīng)的消息處理函數(shù)是OnDeviceChange,它在消息映射宏的位置比較特殊,具體使用可見(jiàn)參考文獻(xiàn)[6]。
目前,一般臺(tái)式機(jī)和筆記本電腦上基本是不配軟驅(qū)的,但為了完整性,在此還是做一下說(shuō)明。當(dāng)USB或1394接口的可移動(dòng)存儲(chǔ)設(shè)備接入系統(tǒng)時(shí),系統(tǒng)會(huì)發(fā)出WM_DEVICECHANGE消息,但是軟盤(pán)插入到軟驅(qū)時(shí),系統(tǒng)無(wú)消息產(chǎn)生,這時(shí)需要利用HOOK技術(shù)來(lái)解決軟盤(pán)探測(cè)問(wèn)題。
融合進(jìn)程隱藏和進(jìn)程守護(hù)技術(shù)的可移動(dòng)存儲(chǔ)設(shè)備管理系統(tǒng)目前已經(jīng)應(yīng)用到某政府機(jī)關(guān)單位。實(shí)際應(yīng)用結(jié)果表明,改進(jìn)的遠(yuǎn)程線(xiàn)程注入技術(shù)提高了系統(tǒng)隱蔽性,能夠抵抗常規(guī)的安全檢測(cè)技術(shù),雙守護(hù)進(jìn)程的兩級(jí)監(jiān)控體系使得系統(tǒng)運(yùn)行更加安全。
[1]王慶豐,劉功申.一種可信移動(dòng)存儲(chǔ)介質(zhì)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息安全與通信保密,2008(10):46-49.
[2]南理勇,左強(qiáng).可移動(dòng)存儲(chǔ)設(shè)備的識(shí)別[J].計(jì)算機(jī)與數(shù)字工程,2005,33(9):131-133.
[3]肖道舉,左佳,陳曉蘇.進(jìn)程隱藏的相關(guān)問(wèn)題研究[J].微處理機(jī),2008(4):78-80.
[4]何志,范明鈺,羅彬杰.基于遠(yuǎn)程線(xiàn)程注入的進(jìn)程隱藏技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2008,28(6):92-94.
[5]王崢,婁淵勝.遠(yuǎn)程線(xiàn)程注入技術(shù)在監(jiān)控系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010(3):207-210.[6]侯捷.深入淺出MFC[M].武漢:華中科技大學(xué)出版社,2001.
Safe running method of removable storage device management system
Nan Liyong
(Department of Information Engineering,Binzhou University,Binzhou 256603,China)
The removable storage device management system would be subject to force closing attack such as using task manager or third-party tools during runtime which could cause the system not to run.To cope with these system safe running problems,an integration of process hiding and process maintaining safe running method of removable storage device management system is proposed.Using modified remote thread inject technology to improve system stealthiness,using two monitoring system based on double process maintaining to improve system robustness,and then the system can run safely.Finally,application results show that the mothed can resist force closing attack effectively.
process hiding;information hiding;process maintaining;remote thread inject;removable storage device
TP333
A
1674-7720(2015)10-0004-03
2015-01-29)
南理勇(1979-),男,碩士,講師,主要研究方向:數(shù)據(jù)庫(kù)與信息系統(tǒng)、圖像處理。