王猛 王靜 錢永濤
摘要:該文通過對(duì)USB移動(dòng)存儲(chǔ)設(shè)備使用控制的研究,以防范非授權(quán)使用USB移動(dòng)存儲(chǔ)設(shè)備或私自對(duì)文件的輸入/輸出進(jìn)行操作。并使用VC++編程實(shí)現(xiàn)其原型系統(tǒng),控制USB端口的數(shù)據(jù)流向,許可或禁止針對(duì)USB移動(dòng)存儲(chǔ)設(shè)備的操作,既不影響文件交換,又可防止針對(duì)USB移動(dòng)存儲(chǔ)設(shè)備的非授權(quán)操作,從而對(duì)USB移動(dòng)存儲(chǔ)設(shè)備的使用控制做出積極的探討。
關(guān)鍵詞:USB;攔截技術(shù);HOOK;Detours;區(qū)域邊界
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)33-8042-04
Abstract:The existing USB technology can provide the extremely quick datatransmission speed, redeposits through the USB connection dataextremely conveniently, however simultaneously also brings somesecurity hidden dangers. Based on this, this article wants to study to the USB migrationstorage device use control, guards against the non- authorization touse the USB migration storage device or secretly to carry on theoperation to the document input/output. Based on the findings, programs with VC++ realizes a prototype system,controls the USB port the data to flow to, permits or the prohibitionin view of the USB migration storage device operation, both does notaffect the document exchange, and may prevent in view of the USBmigration storage device non- authorized operation, thus makes thepositive discussion to the USB migration storage device use control.
Key words: USB; intercept; hook; detours; region boundary
隨著電子技術(shù)及計(jì)算機(jī)技術(shù)的發(fā)展,基于USB接口的移動(dòng)存儲(chǔ)設(shè)備(包括:U盤、移動(dòng)硬盤、MP3、數(shù)碼相機(jī)、智能手機(jī)等等)作為當(dāng)今數(shù)據(jù)存儲(chǔ)最重要的媒介是各種計(jì)算機(jī)廣泛采用的設(shè)備?;旧厦颗_(tái)計(jì)算機(jī)都有USB端口,用移動(dòng)存儲(chǔ)設(shè)備實(shí)現(xiàn)將數(shù)據(jù)從USB端口高速高效拷貝傳輸已非常方便(相比軟盤等設(shè)備)。但另一方面,這也給人們帶來方便的同時(shí)也帶來了一些安全威脅。某些行業(yè),如國(guó)防、外交和商務(wù)部門,USB端口使用安全對(duì)整個(gè)計(jì)算機(jī)系統(tǒng)意義重大。一些公司USB端口管理不善則會(huì)造成重要機(jī)密(如:公司重要的客戶信息、公司內(nèi)部員工的工資信息,或者公司內(nèi)部的戰(zhàn)略方針等)外泄。 大量保密數(shù)據(jù)經(jīng)常從USB端口流出而得不到靈活得控制(要么完全關(guān)閉USB存儲(chǔ),給自己也帶來不便,要么完全打開)。 在此背景下,筆者通過軟件編程實(shí)現(xiàn)相應(yīng)的機(jī)制,控制USB端口的數(shù)據(jù)流出。既能方便人們的工作需要,又能夠阻止他人用USB存儲(chǔ)設(shè)備非法拷貝走一些機(jī)密數(shù)據(jù),從而保證本地計(jì)算機(jī)的信息安全。
1 設(shè)計(jì)思想及關(guān)鍵技術(shù)
1.1設(shè)計(jì)思想概述
筆者的設(shè)計(jì)思想是利用windows提供的HOOK(鉤子)技術(shù),攔截windows操作系統(tǒng)中的消息,過濾出來自USB設(shè)備的消息,再基于配置程序中配置的安全策略(如:允許或禁止對(duì)USB設(shè)備的操作行為),對(duì)用戶的操作行為進(jìn)行判斷。例如:如果安全策略中允許用戶從USB設(shè)備里讀文件,則當(dāng)攔截windows操作系統(tǒng)中對(duì)USB設(shè)備進(jìn)行讀的消息時(shí),放行該消息;如果安全策略中禁止用戶向USB設(shè)備里寫文件,則當(dāng)攔截到windows操作系統(tǒng)中有數(shù)據(jù)欲寫入U(xiǎn)SB設(shè)備的消息時(shí),阻止該消息。從而實(shí)現(xiàn)對(duì)USB移動(dòng)存儲(chǔ)使用的控制。本程序使用VC++編寫,基于Detours軟件包的Win32 API (HOOK)攔截技術(shù),在計(jì)算機(jī)應(yīng)用區(qū)域邊界進(jìn)行控制,實(shí)現(xiàn)編程目的?;谧皂斚蛳碌木幊谭绞剑帜K編程,調(diào)用模塊函數(shù)。
1.2關(guān)鍵技術(shù)原理與應(yīng)用
1.2.1 HOOK
Windows的系統(tǒng)機(jī)制是事件驅(qū)動(dòng),各個(gè)子系統(tǒng)之間通信是通過消息的傳遞實(shí)現(xiàn)的。一般情況下,應(yīng)用程序只能處理進(jìn)程內(nèi)部發(fā)出的消息以及其他進(jìn)程發(fā)出的消息,如果需要對(duì)進(jìn)程外傳遞的消息進(jìn)行攔截處理就必須采取一種被稱為HOOK(鉤子)的技術(shù)。鉤子是Windows操作系統(tǒng)中非常重要的一種系統(tǒng)接口,用它可以輕松截獲并處理其他應(yīng)用程序之間傳遞的消息,并由此可以完成一些普通應(yīng)用程序難以實(shí)現(xiàn)的特殊功能。
鉤子本質(zhì)上是一種可以對(duì)消息進(jìn)行處理的程序段,是Windows消息處理機(jī)制自帶的函數(shù),通過對(duì)應(yīng)用程序設(shè)置子程序的方法可以指定監(jiān)視其上的某個(gè)消息,并且被監(jiān)視的消息窗口還可以是其他應(yīng)用程序的進(jìn)程創(chuàng)建的。通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子函數(shù)通過捕獲該消息的方式獲得對(duì)其的控制權(quán),然后鉤子函數(shù)對(duì)該消息加以改變處理,或者不作任何改變處理,繼續(xù)傳遞該消息,或者對(duì)該消息的傳遞過程強(qiáng)制中斷。
1.2.2 DETOURS
軟件應(yīng)用的日益深入和復(fù)雜,使得對(duì)其功能擴(kuò)充的要求日益頻繁。應(yīng)用傳統(tǒng)的Windows程序,如何在不涉及源代碼且不重新編譯整個(gè)系統(tǒng)的情況下擴(kuò)充現(xiàn)有的系統(tǒng)功能,則是個(gè)普遍的問題。為此微軟在內(nèi)部廣泛的將Detours軟件包應(yīng)用與Win32應(yīng)用程序和Windows NT操作系統(tǒng)。Detours軟件包能在運(yùn)行態(tài)動(dòng)態(tài)的攔截x86機(jī)器上的任意Win32二進(jìn)制函數(shù)。Detours首先把Target函數(shù)開始幾條指令替換成一個(gè)無(wú)條件跳轉(zhuǎn)指令(JMP),這個(gè)指令跳轉(zhuǎn)到用戶提供的Detours 函數(shù)。而這些被覆蓋的指令被保存到一個(gè)Trampoline函數(shù)中,(我們可以稱它為跳板函數(shù)),Trampoline函數(shù)由這些指令和一個(gè)跳轉(zhuǎn)指令(JMP)組成,跳轉(zhuǎn)指令跳轉(zhuǎn)到修改后的Target函數(shù)的第二條指令,即開始的JMP Detours指令后的一條指令。如圖1所示:
Detours函數(shù)插入是在運(yùn)行態(tài)進(jìn)行的。Target函數(shù)的修改完全是在內(nèi)存中進(jìn)行的,而不是在磁盤上,因此是在很小的時(shí)間間隔內(nèi)就輕松的完成了函數(shù)的替換工作。利用Detours可以實(shí)現(xiàn)動(dòng)態(tài)連接庫(kù)的一個(gè)過程在一個(gè)應(yīng)用程序的進(jìn)程之中被掛接(API HOOK),而在另一個(gè)同時(shí)運(yùn)行的進(jìn)程中不被掛接。與動(dòng)態(tài)鏈接庫(kù)再鏈接和靜態(tài)重定位不同的是,Detours庫(kù)使用的攔截技術(shù)可以保證無(wú)論使用程序和系統(tǒng)代碼采用何種方法定位Target函數(shù),攔截都會(huì)起作用。
Detours作為一個(gè)通用性的開發(fā)工具包,它把原始的Target函數(shù)作為一個(gè)可調(diào)用的函數(shù)過程(Trampoline函數(shù))保存起來。大大方便了對(duì)現(xiàn)有二進(jìn)制Win 32軟件的擴(kuò)充。
在本設(shè)計(jì)中,利用了Detours開發(fā)包中的HOOK(鉤子)函數(shù),實(shí)現(xiàn)對(duì)USB接口的WINDOWS信息攔截。
1.2.3區(qū)域邊界
“區(qū)域”是指通過局域網(wǎng)相互連接、采用統(tǒng)一的安全策略且不考慮物理位置的本地計(jì)算機(jī)設(shè)備的集合。因安全策略獨(dú)立于所處理的信息的類型和級(jí)別,但同一物理設(shè)備可能位于不同的區(qū)域之內(nèi)。本地和遠(yuǎn)程元素訪問某個(gè)區(qū)域內(nèi)的資源時(shí),必須滿足該區(qū)域的安全策略。這樣的一個(gè)區(qū)域可能跨多個(gè)地理位置分散的物理網(wǎng)絡(luò),這些網(wǎng)絡(luò)通過廣域網(wǎng)上商家提供的點(diǎn)到點(diǎn)通信線路相連。
“區(qū)域邊界”是信息進(jìn)入或離開區(qū)域機(jī)構(gòu)的網(wǎng)絡(luò)節(jié)點(diǎn)。因許多機(jī)構(gòu)都與其控制范圍以外的網(wǎng)絡(luò)相連,故需要一個(gè)分層的保護(hù)設(shè)施來保障進(jìn)入的信息不影響機(jī)構(gòu)的操作或資源,且離開的信息是經(jīng)過授權(quán)并得到保護(hù)的。
“區(qū)域邊界”是信息系統(tǒng)的一個(gè)門戶(包括邏輯上、物理上的),從信息系統(tǒng)的安全保護(hù)角度來看,是一個(gè)控制點(diǎn)。
在本設(shè)計(jì)中,基于Detours軟件包的HOOK技術(shù)即運(yùn)行態(tài)實(shí)現(xiàn)攔截,即在“區(qū)域邊界”中完成。
2 方案設(shè)計(jì)與實(shí)現(xiàn)
本方案將整個(gè)設(shè)計(jì)分為四個(gè)函數(shù)模塊。分別為GetUSBSymbol、ScanSymbol、MatchReadPolicy和MatchWritePolicy。分別實(shí)現(xiàn)以下功能:
①插入U(xiǎn)SB移動(dòng)存儲(chǔ)設(shè)備的盤符
根據(jù)Windows系統(tǒng)發(fā)送的WM_DEVICECHANGE消息和該消息附帶的DBT_DEVICEARRIVAL結(jié)構(gòu)的參數(shù),獲取USB移動(dòng)存儲(chǔ)設(shè)備的盤符,并將盤符保存到注冊(cè)表中。該功能作為USBCcontrol.dll的一個(gè)導(dǎo)出函數(shù)(GetUSBSymbol)提供給其它模塊使用。GetUSBSymbol函數(shù)的內(nèi)部結(jié)構(gòu),如圖3所示。
②掃描盤符
自動(dòng)掃描A-Z盤,確定哪些盤是USB移動(dòng)存儲(chǔ)設(shè)備,并將是USB移動(dòng)存儲(chǔ)設(shè)備的盤符保存到注冊(cè)表中。該功能作為USBCcontrol.dll的一個(gè)導(dǎo)出函數(shù)(ScanUSBSymbol)提供給其它模塊使用。ScanSymbol函數(shù)的內(nèi)部結(jié)構(gòu),如圖4所示。
③讀操作控制
根據(jù)管理員設(shè)置的USB移動(dòng)存儲(chǔ)設(shè)備使用策略,對(duì)從USB移動(dòng)存儲(chǔ)設(shè)備讀取文件進(jìn)行控制。該功能作為USBCcontrol.dll的一個(gè)導(dǎo)出函數(shù)(MatchReadPolicy)提供給其它模塊使用。MatchReadPolicy函數(shù)的內(nèi)部結(jié)構(gòu),如圖5所示。
④寫操作控制
3 結(jié)束語(yǔ)
本文首先提出此研究的現(xiàn)實(shí)意義,然后介紹整體的設(shè)計(jì)思想以及相關(guān)的主要技術(shù),最后對(duì)四個(gè)模塊進(jìn)行詳細(xì)的探討和設(shè)計(jì)。論文的后續(xù)工作是在原有的基礎(chǔ)上實(shí)現(xiàn)更好的安全性以及增加新的業(yè)務(wù)模塊。
參考文獻(xiàn):
[1] 林青松,胡方霞,劉杰,等.Visual C++案例開發(fā)[M].中國(guó)水利水電出版社,2005.
[2] 陳興蜀.應(yīng)用區(qū)域邊界的安全體系結(jié)構(gòu)及使用模型研究[D].四川大學(xué),2004.
[3] 李春葆,章啟俊.C++程序設(shè)計(jì)[M].清華大學(xué)出版社,2005.
[4] 冉林倉(cāng).用Detours攔截Win 32 API 函數(shù)[J].電腦編程技巧與維護(hù),2001(8).
[5] 李占紅,王世卿,石磊. Detours攔截技術(shù)及其應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2004(6).
[6] 朱強(qiáng),周清雷,周世俊.基于Detours軟件包的Win 32 API攔截技術(shù)[J].計(jì)算機(jī)應(yīng)用,2002,22(12):94.