[摘要] 本文論述了內(nèi)部網(wǎng)文件監(jiān)控審計系統(tǒng)的設(shè)計和實現(xiàn)。在系統(tǒng)監(jiān)控端上,利用木馬的“隱蔽性”,實現(xiàn)了在Win2002系統(tǒng)中的進程隱藏和通信隱藏。在文件監(jiān)控上,論述了內(nèi)部網(wǎng)文件監(jiān)控審計系統(tǒng)對數(shù)據(jù)進行全方位安全保護機制。
[關(guān)鍵詞] 文件監(jiān)控 木馬 網(wǎng)絡(luò)安全 P2DR模型
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,在關(guān)注外部網(wǎng)安全的同時,必須要加倍地重視內(nèi)部網(wǎng)的安全控制,內(nèi)部網(wǎng)安全已成為整體網(wǎng)絡(luò)安全的基石和出發(fā)點,而要想控制內(nèi)網(wǎng)則首選文件操作監(jiān)控技術(shù),本文通過分析這兩種常用技術(shù)的利蔽,最后實現(xiàn)本系統(tǒng)對內(nèi)網(wǎng)的安全管理的實現(xiàn)。
一、系統(tǒng)設(shè)計
內(nèi)部網(wǎng)文件監(jiān)控審計系統(tǒng)(NFAMS)是基于Windows平臺的內(nèi)部網(wǎng)安全行為監(jiān)控審計系統(tǒng),采用集中式管理、分布式控制結(jié)構(gòu)對網(wǎng)絡(luò)用戶操作行為監(jiān)控,并提供事后安全審計功能。
代理登錄控制臺:連接認(rèn)證控制臺模塊周期地向控制臺建立連接請求,并認(rèn)證控制臺身份,檢測到控制臺已經(jīng)啟動,則進入代理生存心博模塊;處理控制臺:代理監(jiān)聽TCP網(wǎng)絡(luò)端口,等待控制臺的連接請求,并根據(jù)操作碼,進入不同的命令處理模塊。
1.系統(tǒng)安全性設(shè)計
控制臺采用須獲得對控制臺軟件所在的主機的使用權(quán)和能夠通過控制臺軟件的身份認(rèn)證的雙重的安全防護方法,來保證控制臺的安全管理,另外控制臺還提供了災(zāi)難恢復(fù)技術(shù);代理進程是隨著操作系統(tǒng)的啟動代理進程進行正常的監(jiān)控狀態(tài)。同時,具有防止代理進程被意外地殺死或者終止。
2.系統(tǒng)實現(xiàn)的相關(guān)技術(shù)
鑒于本系統(tǒng)監(jiān)控端的需要,需要采用以下一些技術(shù)。
程序隱藏,分偽隱藏和真隱藏。偽隱藏,在Win9x的系統(tǒng)中把木馬服務(wù)器端的程序注冊為一個服務(wù)即可,在Win NT、2000中可使用API的攔截技術(shù);真隱藏,就是這個程序完全的溶進了系統(tǒng)的內(nèi)核。把它作為一個線程。
端口隱藏,有端口重用、反向連接和潛伏方式進行通信等方法。在本系統(tǒng)中,采用了潛伏的方式,利用 IP 協(xié)議簇中的自定義協(xié)議來進行網(wǎng)絡(luò)傳輸。
攔截系統(tǒng)調(diào)用技術(shù),在Windows系統(tǒng)中,修改系統(tǒng)調(diào)用表實現(xiàn)指向本系統(tǒng)的監(jiān)控代碼。
二、系統(tǒng)實現(xiàn)
系統(tǒng)要防止代理進程被意外地殺死或者終止,就要替換系統(tǒng)API調(diào)用的方式,使之調(diào)用自己定義的API函數(shù),進行安全性的檢查。因此要將操作系統(tǒng)的所有用戶態(tài)進程相應(yīng)的API進行替換,實現(xiàn)對操作系統(tǒng)的行為監(jiān)控。Explorer.exe進程是所有的用戶態(tài)進程的父進程,在操作系統(tǒng)進入用戶桌面環(huán)境的時候,Explorer.exe被創(chuàng)建,所有的用戶態(tài)的進程都是由Explorer.exe進程創(chuàng)建的。將Explorer.exe的相關(guān)API替換以后,其中替換了進程創(chuàng)建的相關(guān)API,包括Kernel32.dll中的CreateProcessA、CreateProcessW、WinExec和Advapi32.dll中的CreateProcessAsUserA、CreateProcessAsUserW、CreateProcessWithLogonW,所以當(dāng)Explorer.exe創(chuàng)建新進程,能夠得到這種消息,然后再將新進程的相關(guān)API進程替換,那么也就能夠監(jiān)控新進程的行為。
系統(tǒng)的API是按照動態(tài)鏈接庫的方式存放的。如同系統(tǒng)API的存儲方式,將自己定義的API也存儲在動態(tài)鏈接庫DLL中,將DLL插入到要監(jiān)控的進程中。動態(tài)鏈接庫DLL有一個初始化的過程,在此過程中,進行系統(tǒng)API的替換,從而實現(xiàn)對相應(yīng)進程的行為監(jiān)控。
遠程線程插入DLL,Windows的大多數(shù)函數(shù)允許進程只對自己進行操作,它能夠防止一個進程破壞另一個進程的運作。但是,有些最初是為調(diào)試程序和其他工具設(shè)計的函數(shù)卻允許一個進程對另一個進程進行操作。即一個稱為CreateRemoteThread的函數(shù),使我們能夠非常容易地在另一個進程中創(chuàng)建線程。
這個DLL插入方法基本上要求目標(biāo)進程中的線程調(diào)用LoadLibrary函數(shù)來夾帶必要的DLL。由于除了自己進程中的線程外,無法方便地控制其它進程中的線程,因此這種解決方案要求在目標(biāo)進程中創(chuàng)建一個能夠控制它執(zhí)行什么代碼新線程。
三、行為監(jiān)控效率
由于操作系統(tǒng)會對需要監(jiān)控的系統(tǒng)API進行大量的調(diào)用,為提高系統(tǒng)的響應(yīng)速度。采用了兩個措施來提供系統(tǒng)的效率:安全策略文件的訪問速度和規(guī)則的匹配速度。
在策略檢查的時候,如果采用正常的文件讀寫方法,需要頻繁的打開關(guān)閉文件,頻繁的讀寫文件,導(dǎo)致系統(tǒng)的效率低。本系統(tǒng)采用內(nèi)存文件映射方法,即使應(yīng)用程序通過內(nèi)存指針對磁盤上的文件進行訪問,其過程就如同對加載了文件的內(nèi)存的訪問。在使用內(nèi)存映射文件進行I/O處理時,系統(tǒng)對數(shù)據(jù)的傳輸按頁面來進行。至于內(nèi)部的所有內(nèi)存頁面則是由虛擬內(nèi)存管理器來負(fù)責(zé)管理,由于虛擬內(nèi)存管理器是以一種統(tǒng)一的方法來處理所有磁盤I/O的,因此這種優(yōu)化使其有能力以足夠快的速度來處理內(nèi)存操作。
規(guī)則的匹配速度。安全策略規(guī)則不是無序的排列,而是按照監(jiān)控對象所在的磁盤驅(qū)動器進行分類,按照字母順序有序的排列。在安全策略檢查的時候,已知的是監(jiān)控對象的名字,即文件或者文件夾的名字,根據(jù)這個名字,可以獲得監(jiān)控對象所在的磁盤驅(qū)動器??梢酝ㄟ^磁盤驅(qū)動器,根據(jù)策略文件相應(yīng)的位置索引,直接定位到該監(jiān)控對象所適用的策略范圍,大大降低了需要進行規(guī)則匹配檢查的數(shù)量。
參考文獻:
[1]黃良斌:透視木馬程序開發(fā)技術(shù)[J].浙江交通職業(yè)技術(shù)學(xué)院學(xué)報,2004,5(4):39
[2]何會民胡躍湘臧衛(wèi)華:Linux2.6系統(tǒng)調(diào)用鉤子的原理分析與實現(xiàn)應(yīng)用[J].湖南工程學(xué)院學(xué)報,2007(3):54~57
[3]紀(jì)勇李祥和:Windows系統(tǒng)下木馬程序的設(shè)計與實現(xiàn)[J],計算機安全,2003(23):66~67