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