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