摘 要: 可移動存儲設(shè)備管理系統(tǒng)在運行時會面臨攻擊者采用任務(wù)管理器或第三方工具強行關(guān)閉的攻擊,可能導(dǎo)致應(yīng)用程序無法正常運行,。為解決這類應(yīng)用程序安全運行的問題,,提出一種融合進程隱藏和進程守護技術(shù)的可移動存儲設(shè)備管理系統(tǒng)安全運行方案。該方案利用改進的遠程線程注入技術(shù)提高系統(tǒng)隱蔽性,,利用雙守護進程的兩級監(jiān)控體系提高系統(tǒng)健壯性,,從而達到維護程序安全運行的目的。應(yīng)用結(jié)果表明,,該方案能夠很好地抵抗強行關(guān)閉攻擊,。
關(guān)鍵詞: 進程隱藏;信息隱藏,;進程守護,;遠程線程注入;可移動存儲設(shè)備
0 引言
可移動存儲設(shè)備由于其體積小,、容量大,、攜帶方便等優(yōu)點得到了廣泛應(yīng)用??梢苿哟鎯υO(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],。然而,在實際應(yīng)用中,,對要受保護的計算機安裝可移動存儲設(shè)備管理系統(tǒng)后,用戶可以使用任務(wù)管理器或者第三方工具結(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中,用戶使用任務(wù)管理器或者第三方進程查看工具看到的是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路徑名復(fù)制到遠程進程的內(nèi)存地址空間,;(4)通過GetProcAddress計算LoadLibrary在Windows系統(tǒng)庫中的入口地址,用于后面加載DLL,;(5)利用CreateRemote Thread創(chuàng)建遠程線程并加載DLL,。
雖然DLL文件在目標進程運行時任務(wù)管理器中不會列出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)往復(fù)。這樣,,即使用戶使用任務(wù)管理器或者第三方進程查看工具看到了需要保護的進程,,關(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è)備才能在安裝有客戶端的計算機上使用,。客戶端安裝在每個需要保護的計算機上,,它實時監(jiān)測本地計算機系統(tǒng)的每個移動存儲接口,,當監(jiān)測到有可移動存儲設(shè)備接入本地計算機系統(tǒng)時,客戶端進程對來訪的可移動存儲設(shè)備進行鑒別,,并根據(jù)鑒別結(jié)果采取相應(yīng)的訪問控制策略。
一個普通的可移動存儲設(shè)備,,如果沒有授權(quán)是不能接入到安裝有客戶端程序的計算機上使用的,。因此,只要對單位內(nèi)部的可移動存儲設(shè)備進行授權(quán),,不對外部的可移動存儲設(shè)備授權(quán)就可以達到禁止外部可移動存儲設(shè)備在內(nèi)部使用這一需求,。授權(quán)中心運行在專用機器上,不運行在客戶端,,只有專職人員才能使用,,其安全性相對較高??梢苿哟鎯υO(shè)備管理系統(tǒng)客戶端程序安裝在受保護的個人計算機上,,易遭受用戶使用任務(wù)管理器或者第三方工具強行關(guān)閉的攻擊,需要采取措施抵抗用戶的強行關(guān)閉,。在設(shè)計開發(fā)可移動存儲設(shè)備管理系統(tǒng)時,,將客戶端程序編寫成DLL,融合進程隱藏和進程守護技術(shù),,能有效防止用戶的強行關(guān)閉攻擊,。下面給出設(shè)計過程中的幾個要點。
3.1 遠程線程注入DLL后將其刪除提高系統(tǒng)隱蔽性
遠程線程注入DLL后,,DLL文件在目標進程中運行時,,任務(wù)管理器中不會列出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)存映像的備份復(fù)制到釋放前所在的地址空間,。這樣,,只要通過調(diào)用獲取的入口函數(shù)地址就實現(xiàn)了程序隱藏,從而提高了系統(tǒng)隱蔽性,。
3.2雙守護進程的兩級監(jiān)控體系提高系統(tǒng)健壯性
將客戶端RSDMSClient程序編寫成DLL,,采用遠程線程注入技術(shù)注入到常用的系統(tǒng)進程。這樣即使注入的DLL模塊被發(fā)現(xiàn),,在任務(wù)管理器中系統(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)控任務(wù)的。
采用兩級監(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又開始重復(fù)類似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消息通知應(yīng)用程序,。在可移動存儲設(shè)備管理系統(tǒng)中,當有可移動存儲設(shè)備接入到客戶端計算機并且準備就緒,,可以正常訪問時,,系統(tǒng)會發(fā)出DBT_DEVICEARRIVAL類型消息,如果這時探測接入的設(shè)備,,不僅可以保證不漏掉任何可移動存儲設(shè)備的探測,,而且可以避免出現(xiàn)空轉(zhuǎn)輪詢,從而極大地提高了系統(tǒng)工作效率,。WM_DEVICECHANGE所對應(yīng)的消息處理函數(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)應(yīng)用到某政府機關(guān)單位,。實際應(yīng)用結(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].計算機應(yīng)用,,2008,,28(6):92-94.
[5] 王崢,婁淵勝.遠程線程注入技術(shù)在監(jiān)控系統(tǒng)中的應(yīng)用[J].計算機技術(shù)與發(fā)展,,2010(3):207-210.
[6] 侯捷.深入淺出MFC[M].武漢:華中科技大學出版社,,2001.