引言
隨著計算機科技的發(fā)展,無紙辦公日益成為各單位日常辦公的主要形式,。而隨著USB存儲設(shè)備日益廣泛的使用,,數(shù)據(jù)泄漏的危害也越來越嚴重。因此在單位內(nèi)部對USB存儲設(shè)備的操作權(quán)限進行控制是很有必要的,。
本設(shè)計可將不同的USB存儲設(shè)備(包括安全存儲設(shè)備和普通存儲設(shè)備)通過不同的接口接入到主機上,,同時對主機和設(shè)備問傳輸?shù)臄?shù)據(jù)進行提取,分析和攔截,。其應用范圍比較廣泛,,為了方便介紹,本文將其作為USB存儲設(shè)備管理系統(tǒng)的一部分,,根據(jù)具體的應用來介紹控制器的設(shè)計原理,。讀寫控制器可應用在對PC機與安全存儲設(shè)備和普通存儲設(shè)備的數(shù)據(jù)共享管理上。其中,,PC機的數(shù)據(jù)要求被保護,,安全設(shè)備的使用權(quán)限被嚴格控制,不會泄漏數(shù)據(jù),;而普通設(shè)備則沒有采取任何安全措施,,很有可能向外泄漏數(shù)據(jù),比如通用的U盤,。
控制器的主要功能是通過不同的接口把兩種USB存儲設(shè)備區(qū)分開來,,實時監(jiān)測PC機和普通設(shè)備間的數(shù)據(jù),當檢測到PC機向普通設(shè)備寫入數(shù)據(jù)包時,,對其強行破壞,,防止數(shù)據(jù)泄漏。
1 硬件原理
系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,。集線器芯片將上游一路USB總線分為兩路:一路直接通過專用的USB接口與安全存儲設(shè)備連接,,另一路通過讀寫控制器和普通存儲設(shè)備連接。讀寫控制器采用CPLD,、USB轉(zhuǎn)發(fā)器以及外圍電路實現(xiàn)集線器和普通存儲設(shè)備的連接,。在CPLD中設(shè)計邏輯電路實現(xiàn)對USB轉(zhuǎn)發(fā)器傳輸方向的控制,并對數(shù)據(jù)進行分析和攔截,,以破壞從PC機向普通USB存儲設(shè)備傳輸?shù)臄?shù)據(jù),防止泄漏。
集線器采用的是帶有4個下游端口的GL850G,。其端口傳輸?shù)氖荱SB總線的差分信號,,故將其上游端口直接接PC機,下游端口接安全USB存儲設(shè)備或讀寫控制器,。
讀寫控制器是由1片CPLD和2片USB轉(zhuǎn)發(fā)器及其外圍電路組成,。CPLD采用的是Altera公司的EPM3512。它具有10000個可用的門,、512個宏單元,、208個可用的I/O引腳,調(diào)試和升級簡便,,開發(fā)十分靈活,。市場上關(guān)于USB轉(zhuǎn)接的芯片很多,本文設(shè)計的讀寫控制器要求功能簡單,、性能穩(wěn)定,,因此USB轉(zhuǎn)發(fā)器采用TI公司的TUSB1106,既滿足設(shè)計的要求,,也不存在資源浪費,。該芯片的詳細介紹見參考文獻。其中VP0,、VM0引腳由CPLD驅(qū)動,。VP、VM和RCV輸人到CPLD中,。TUSB1106和CPLD的接口電路如圖2所示,。
2 CPLD中的讀寫控制電路
CPLD中的讀寫控制電路包括時鐘提取、包識別,、不歸零解碼,、狀態(tài)控制、CBW包識別和數(shù)據(jù)流控制等模塊,,如圖3所示,。時鐘提取部分見參考文獻,包識別和不歸零解碼部分見參考文獻,。下面詳細介紹狀態(tài)控制,、CBW包識別和數(shù)據(jù)流控制3個模塊。
2.1 狀態(tài)控制模塊
因為IJSB總線是半雙工的,,所以CPLD要控制總線數(shù)據(jù)的方向,,即通過OE信號來控制TUSB1106是接收總線數(shù)據(jù)還是驅(qū)動總線??偩€上所有的傳輸事務(wù)都始于令牌包,。令牌包由主機發(fā)送,,指明本次事務(wù)處理過程的含義,包括數(shù)據(jù)的傳輸方向,、設(shè)備的地址及端點號等信息,。
在本模塊中,通過對PID的檢測可得到每個包的種類,,控制狀態(tài)機在初始狀態(tài),、主機發(fā)送數(shù)據(jù)、設(shè)備發(fā)送數(shù)據(jù),、主機發(fā)送握手包和設(shè)備發(fā)送握手包等幾個狀態(tài)間跳轉(zhuǎn),,從而控制其他模塊的狀態(tài)。下面為狀態(tài)機的部分代碼:
可以看出,,當令牌包是OUT包(PID為8'hE1)或SETUP包(PID為8'h2D)時,,數(shù)據(jù)包由主機發(fā)往設(shè)備,握手包由設(shè)備返回給主機,;如果令牌包是IN包(PID為8'h69)時,,則數(shù)據(jù)包由設(shè)備發(fā)給主機,握手包由主機返回給設(shè)備,。在全速模式下,,只可能有4種令牌包,除了這3種包外就只可能是SOF包,,而該包沒有后續(xù)的數(shù)據(jù)包和握手包,,因此狀態(tài)機仍為初始狀態(tài)。如果一次傳輸事務(wù)出錯,,沒有數(shù)據(jù)包或握手包,,則主機和設(shè)備會通過超時來判斷是否出錯,而不會持續(xù)等待,。在CPLD中,,超時信號和系統(tǒng)復位信號相與之后作為本模塊的復位信號。
2.2 CBW包識別和數(shù)據(jù)流控制模塊
USB Mass Storage Device在完成枚舉之后就進入到僅批量傳輸模式,。在僅批量傳輸協(xié)議中數(shù)據(jù)傳輸分為命令,、數(shù)據(jù)和狀態(tài)3個階段。主機發(fā)送的命令被封裝成CBW(Command Block Wrapper)包在命令階段發(fā)送,,以定義要操作的命令以及要傳輸?shù)臄?shù)據(jù)方向和長度,。CBW的前4個字節(jié)是標志位,第15個字節(jié)是操作代碼,。
在本設(shè)計中,,借助序列識別的思想識別出寫命令的CBW,并在接下來的數(shù)據(jù)階段將標志位CBW_flag置位為0,,使數(shù)據(jù)流控制模塊截斷從主機發(fā)往設(shè)備的數(shù)據(jù)包,。下面為狀態(tài)機的部分代碼:
可以看出,,只有在檢測到CBW包中的寫命令(操作代碼是8h2A和8hAA)時才將CBW_flg置0,其余狀態(tài)都為1,。
數(shù)據(jù)流控制模塊完成的工作比較簡單,,主要有3個:
①在系統(tǒng)復位有效或失效時控制轉(zhuǎn)發(fā)器模擬拔下或插入的過程;
②根據(jù)當前的傳輸方向提取總線數(shù)據(jù)以供分析,;
③cbw_flg無效時,將上游端口的VP和VM直接賦值給下游端口的VP0
和VM0,,同樣將下游端口的VP和VM賦給上游端口的VP0和VM0,,否則將上游端口的VM強制置0,使傳輸過程失敗以阻止數(shù)據(jù)從主機向普通存儲設(shè)備傳送數(shù)據(jù),。
3 實驗結(jié)果
控制器完全不干涉主機和安全USB存儲設(shè)備間的數(shù)據(jù)傳輸,。而將普通USB存儲設(shè)備通過控制器接到PC機上時,能正常完成除寫之外的所有操作,。當向USB存儲設(shè)備中寫入數(shù)據(jù)(包括新建,、粘貼、刪除,、寫入和修改文件)時,,系統(tǒng)彈出圖4所示的對話框,操作無法完成,。
結(jié)語
本文針對信息安全系統(tǒng)設(shè)計了一種對USB存儲設(shè)備的讀寫控制器,。該控制器包括一個與主機連接的上游端口,以及安全存儲設(shè)備專用和普通存儲設(shè)備通用兩種下游端口,。
對安全存儲設(shè)備使用的硬件接口進行異化,,以防止普通存儲設(shè)備通過該口接入;普通存儲設(shè)備采用普通的USB A型口連接,。
控制器不干預主機和安全存儲設(shè)備的數(shù)據(jù)交換,,能夠破壞PC機寫入普通存儲設(shè)備上的數(shù)據(jù)包,從而防止了PC機上的數(shù)據(jù)通過普通存儲設(shè)備外泄,。