淄博礦業(yè)集團(tuán)有限公司 劉新俊
0 引言
計(jì)算機(jī)和計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)成為當(dāng)前企業(yè)、ZF和其它各種組織的重要信息載體和傳輸渠道。但是,人們在享受計(jì)算機(jī)以及計(jì)算機(jī)網(wǎng)絡(luò)所帶來的方便性的同時,信息安全也成為目前受到廣泛關(guān)注的問題。美國聯(lián)邦調(diào)查局(FBI)和計(jì)算機(jī)安全機(jī)構(gòu)(CSl)等權(quán)威機(jī)構(gòu)的研究證明:超過80%的信息安全隱患是來自組織內(nèi)部。內(nèi)部的安全狀況較差,不僅會給攻擊者以可乘之機(jī),還會使已構(gòu)建的安全設(shè)施形同虛設(shè),為內(nèi)部安全違規(guī)事件的發(fā)生打開方便之門。目前廣泛采用的安全設(shè)備和安全措施,均側(cè)重于對付外部的攻擊、侵犯和威脅,而無法阻止內(nèi)部不懷好意的員工**涉密信息并將其拷貝或傳播出去。因此,數(shù)據(jù)資源的保密以及非法外泄的防范已成為當(dāng)前迫在眉睫的安全需求。而利用USB存儲設(shè)備的單向控制技術(shù)可對接人計(jì)算機(jī)的存儲介質(zhì)進(jìn)行控制,以防止信息被有意或者無意地從移動存儲設(shè)備泄漏出去。由于用戶可以根據(jù)需要設(shè)定存儲設(shè)備的使用權(quán)限(比如只讀或者讀寫等),因此,該方法既保留了移動設(shè)備的方便性,又堵截了移動存儲設(shè)備可能帶來的安全隱患。
1 單向控制的設(shè)計(jì)與實(shí)現(xiàn)
本文采用對磁盤驅(qū)動器進(jìn)行過濾的方法來實(shí)現(xiàn)USB存儲設(shè)備的單向控制。該技術(shù)以DDK中的filter為原形。采用標(biāo)準(zhǔn)的WDM過濾,可攔截所有對USB存儲設(shè)備的寫操作,從而實(shí)現(xiàn) U盤的單向控制。其中過濾器驅(qū)動程序是可選擇的驅(qū)動程序,它可以給設(shè)備增加值或修改設(shè)備行為,而且,該過濾器驅(qū)動程序能服務(wù)于一個或多個設(shè)備。由于頂層的過濾器驅(qū)動程序主要是為某一設(shè)備提供增值特征,而低層過濾器驅(qū)動程序則主要修改設(shè)備的硬件行為。所以,本文選擇使用低層設(shè)備過濾器驅(qū)動程序,來監(jiān)視和修改磁盤驅(qū)動器的I/0請求。
1.1 驅(qū)動程序的基本結(jié)構(gòu)
一個WDM驅(qū)動程序的基本結(jié)構(gòu)包括一組必要的,通過系統(tǒng)定義的標(biāo)準(zhǔn)驅(qū)動程序函數(shù),同時還有一些可選的標(biāo)準(zhǔn)函數(shù)與內(nèi)部函數(shù)(取決于驅(qū)動程序的類型和下層設(shè)備)。對于所有的驅(qū)動程序,不管它們在附屬驅(qū)動程序鏈中所處的是那一層,都必須有一組基本的標(biāo)準(zhǔn)函數(shù)來處理IRP。一個驅(qū)動程序是否必須執(zhí)行附加標(biāo)準(zhǔn)函數(shù),取決于該驅(qū)動程序的類型和下層設(shè)備是控制一個物理設(shè)備的驅(qū)動程序,還是在一個物理設(shè)備驅(qū)動程序之上的驅(qū)動程序,同時也取決于下層物理設(shè)備的屬性。控制物理設(shè)備的最低層驅(qū)動程序比較高層驅(qū)動程序擁有更多所要求的函數(shù),較高層的驅(qū)動程序一般將IRP傳送給較低層的驅(qū)動程序來處理。
下面所列是本驅(qū)動程序所需要的標(biāo)準(zhǔn)驅(qū)動程序函數(shù):
(1)DIiveEntry
該函數(shù)可用于初始化驅(qū)動程序并設(shè)置其他標(biāo)準(zhǔn)函數(shù)的人口點(diǎn)。當(dāng)驅(qū)動程序的DriverEntry函數(shù)被調(diào)用,它將直接在驅(qū)動程序?qū)ο笾性O(shè)置Dispatch和Unload的入口點(diǎn),方法如下:
在驅(qū)動程序?qū)ο髢?nèi)的DriverExtension中設(shè)置它的AddDevice函數(shù)的人口點(diǎn)方法如下:
DriverObject->DriverExtension一>AddDevice=DDAddDevice;
驅(qū)動程序能定義若干Dispatch人口點(diǎn),但是它只能在其驅(qū)動程序?qū)ο笾卸x一個AddDevice人口點(diǎn)和一個Unload人口點(diǎn)。
(2) AddDevice
AddDevice函數(shù)主要用于創(chuàng)建設(shè)備對象,地址在DriverObject->DriverExtension->AddDevice。
(3)Dispatch
該函數(shù)至少應(yīng)一個Dispatch人口點(diǎn)。因?yàn)橐靡粋或多個主要功能來編碼處理IRP,以得到請求PnP、電源和I/O操作的IRP。