本發明涉及一種基于薄虛擬機監控器的usb存儲設備安全訪問控制方法,屬于軟件工程技術領域。
背景技術:
目前linux操作系統中,usb存儲設備安全訪問控制機制主要包括基于udev、基于lsm框架、基于系統usb設備驅動層等幾種。
基于udev的usb存儲設備安全訪問控制機制:udev是linuxkernel2.6系列的設備管理器。該機制通過修改udev的規則文件來實現usb存儲設備不可用的目標。該方法在應用層實現,安全性不高。
基于系統usb設備驅動層的usb存儲設備安全訪問控制機制:該機制主要是修改驅動層對應的函數來達到目標,但是驅動開發較為復雜,要進行重新進行編譯,實用性差。
基于lsm框架進行usb存儲設備訪問控制機制:lsm框架在linux內核數據結構中加入了安全域,基于lsm框架的usb存儲設備訪問控制的研究主要是利用lsm在文件系統以及inode中的hook函數,當進行mount、open、read、write等系統調用時通過hook函數進行判斷,如果操作針對的是usb存儲設備文件系統,則不再繼續相應操作。但是lsm框架本身存在著不具備綜合決策能力等缺點,雖然可以動態加載實現的模塊,但是當攻擊者獲得root權限時,完全可以繞過這些usb訪問控制模塊,然后利用usb存儲設備盜取數據。
目前在windows操作系統中,主要研究包括:基于wdm(windowsdrivermodel)過濾驅動的usb移動存儲設備訪問控制系統,利用microsoft推出的設備驅動程序模型實現了usb存儲設備的訪問控制;或利用windows提供的api接口,在應用層開發usb存儲設備的監控系統,但安全性不高。
基于虛擬化平臺的usb設備安全訪問機制,目前主要是基于xen虛擬化平臺的usb數據保護機制,它利用xen系統中的pvusb設備驅動,pvusb驅動分為前端驅動和后端驅動,利用前端驅動以及后端驅動中數據流的特點,來區分i/o中的數據流部分,然后對數據流進行透明的加解密操作,從而達到數據安全的目的。該機制利用虛擬機的回滾機制來擦除usb存儲設備使用時遺留在虛擬機中數據痕跡,該機制的數據保護模塊是放在dom0管理域中,但相關研究都是基于dom0是安全的這一假設之上的。
技術實現要素:
本發明技術解決問題:克服現有操作系統平臺和虛擬化平臺安全訪問控制機制的不足,提供一種基于薄虛擬機監控器bitvisor的usb存儲設備安全訪問控制方法。bitvisor作為薄虛擬機監控器,具有極好的輕量化特點,只支持單個guestos(客戶操作系統),但對所支持的操作系統的類型沒有任何限制。因此本發明所提出的基于薄虛擬機監控器bitvisor的usb存儲設備安全訪問控制方法,與guestos的類型無關。同時虛擬機監控器的運行環境獨立于guestos,所以其安全性不依賴于guestos的安全性。bitvisor相比于現有的虛擬化架構,可信計算基更小,安全性更好。本發明主要針對bitvisor的usb主機控制器以及usb設備數據傳輸協議的特點,在bitvisor中實現了對usb存儲設備的讀操作、寫操作、識別操作的控制。
本發明采用的技術方案如下:
一種基于薄虛擬機監控器的usb存儲設備安全訪問控制方法,其步驟包括:
1)在薄虛擬機監控器bitvisor中,利用usb主機控制器模擬bulk-only數據傳輸協議;
2)通過薄虛擬機監控器bitvisor中的bulk-only數據傳輸協議,對usb存儲設備的識別操作、讀操作和寫操作進行攔截,實現對usb存儲設備的安全訪問控制。
進一步地,通過bitvisor控制轉發命令塊包cbw和命令狀態包csw,實現對usb存儲設備的i/o的攔截。
進一步地,按照usb存儲設備安全訪問控制需求,通過bitvisor修改cbw的傳輸長度域和csw的狀態位信息來控制usb存儲設備與操作系統之間的數據傳遞,從而在只寫條件下控制操作系統對特定usb存儲設備的讀操作,在只讀條件下控制操作系統對特定usb存儲設備的寫操作,以及使用受限條件下控制對特定usb存儲設備的識別操作。
進一步地,在所述使用受限條件下,通過在bitvisor中為usb存儲設備注冊hook函數,控制對特定usb存儲設備的識別操作。
進一步地,對于禁止訪問的usb存儲設備,當系統對該usb存儲設備進行配置時,hook函數會被調用,并在hook函數中返回給操作系統配置錯誤的信息,此時操作系統對該usb存儲設備的配置失敗,導致該usb存儲設備不能被操作系統識別。
進一步地,在bitvisor中設有緩沖區列表,稱為影子緩存,在操作系統中設有與其對應的緩沖區列表,稱為客機緩存,在bitvisor中實現客機緩存與影子緩存中的數據交換,進而通過影子緩存與usb存儲設備直接進行數據。
進一步地,當有數據從usb存儲設備到主機時,數據首先從usb存儲設備傳輸到bitvisor的影子緩存中,然后再從影子緩存中拷貝到操作系統的客機緩存中以供用戶使用;當有數據從主機到usb存儲設備時,數據首先從客機緩存中拷貝到影子緩存中,然后再由bitvisor控制影子緩存中的數據傳輸到usb存儲設備中。
進一步地,通過以下步驟實現usb存儲設備的只讀控制:
a)在hook函數中得到cbw命令塊,解析該命令塊并根據其中數據的傳輸方向來判斷數據是否是主機發送至usb存儲設備的,若是則將其傳輸長度修改為0,并記錄下命令塊中scsi命令,以及該命令塊的標識;
b)當scsi命令為0x2a或者0xaa時,阻止客機緩存中的數據被復制到bitvisor中的影子緩存,從而阻止數據流向usb存儲設備;
c)將bitvisor中此次數據傳輸的傳輸描述符qtds中狀態標識設為傳輸完成,以使bitvisor能夠接收usb存儲設備發來的csw傳輸狀態包,完成一次完整的i/o傳輸過程;當bitvisor檢查數據傳輸狀態時,數據傳輸完成,則接收從usb存儲設備返回的csw命令狀態塊,根據csw中的標識來判斷是否是cbw命令包對應的csw,若是則將該csw的狀態修改為1,代表此次讀寫操作傳輸錯誤,返回給操作系統。
本發明的有益效果如下:
本發明的基于薄虛擬機監控器bitvisor的usb設備安全訪問控制的方法,其中usb存儲設備i/o攔截的關鍵步驟是通過分析bitvisor中模擬實現的usb存儲設備的bulk-only協議中數據流程提出的。該方法通過分析bitvisor中usbcontroller(usb主機控制器)的實現原理,根據設備具有的訪問權限,對特定設備的識別操作、讀操作、寫操作進行攔截,達到設備安全訪問控制的目的。同時,由于該方法基于薄虛擬機監控器bitvisor實現,usb存儲設備的安全訪問控制對操作系統透明,其安全性不依賴于操作系統的安全性,且相較于xen等虛擬機監控器,薄虛擬機監控器bitvisor體積更小,本身的安全可靠性更高,因此本發明的安全性和可靠性也更高。
附圖說明
圖1.本發明的系統架構圖。
圖2.usb存儲設備識別控制流程圖;
圖3.bulk-onlyusb存儲設備的數據傳輸協議數據流圖;
圖4.usb存儲設備只讀控制流程圖。
具體實施方式
下面通過具體實施例和附圖,對本發明做進一步詳細說明。
圖1是本發明的系統架構圖。本發明通過分析bitvisor中usb主機控制器的實現原理,根據usb存儲設備具有的訪問權限,對特定usb存儲設備的識別操作、讀操作、寫操作進行攔截(即圖1中“攔截模塊”所示的功能),達到設備安全訪問控制的目的。即本發明是在bitvisor中的usb主機控制器的基礎上增加了usb識別模塊、只讀控制模塊和只寫控制模塊。
1.設備識別控制實現方法
在bitvisor中為禁止訪問的usb存儲設備注冊一個hook函數(鉤子函數),如圖1所示,當系統對該usb存儲設備進行配置時,該hook函數會被調用,并在hook函數中返回給操作系統配置錯誤的信息,此時操作系統對該設備的配置失敗,導致該設備不能被操作系統識別。禁止設備識別的控制流程圖如圖2所示。
2.設備只讀控制實現方法
bitvisor的usb主機控制器模仿了usbbulk-only協議,bulk-only傳輸協議有三種數據類型:cbw(commandblockwrap,命令塊包)、csw(commandstatuswrap,命令狀態包)和普通數據包。
cbw是命令塊包,它是usbhost(usb主機)向usb存儲設備發送的命令,其中主要包括該cbw的命令塊標識dcbwtag、此次傳輸的數據長度dcbwdatatransferlength、傳輸的具體命令cbwcb、數據傳輸方向bmcbwflags等信息。cbw的命令塊標識dcbwtag主要是用來關聯此次傳輸對應的csw的,當usb存儲設備收到cbw后,對cbw進行解析,然后執行相應的命令,進入數據傳輸階段,傳輸完成后,將此次命令執行的狀態封裝到csw中返回給usb主機。csw命令狀態包中包含與相對應的cbw中dcbwtag相一致的dcswtag。usb主機控制器根據csw來決定是否繼續發送下一個cbw或數據。bulk-only協議的數據傳輸流程如圖3所示,其中data-out表示從主機向usb存儲設備傳輸數據,data-in表示從usb存儲設備向主機傳輸數據。
bitvisor作為操作系統與usb存儲設備之間的橋梁。模擬bulk-only協議傳輸的流程,將從操作系統層復制的cbw與要寫的數據發送給usb存儲設備,接收csw以及要讀的數據,并將其復制給操作系統。在bitvisor中,發送數據后,它會根據自身內部實現的傳輸描述符qtds中的傳輸狀態標志判斷發送的數據是否完成,若沒有完成則bitvisor不會接收usb存儲設備發送的信息,也就不會收到此次傳輸的命令狀態包csw,而是會一直阻塞到數據傳輸狀態。
為了完成與usb存儲設備之間的數據傳輸,bitvisor擁有自己的緩沖區列表,被稱為shadowbuffer(影子緩存),它屬于bitvisor自身的內存區域,在guestos中與它對應的是guestbuffer(客機緩存)。bitvisor中實現了guestbuffer與shadowbuffer中的數據交換。而與usb存儲設備直接進行數據傳輸的是shadowbuffer,當有數據從usb存儲設備到主機時,數據首先從usb存儲設備傳輸到bitvisor的shadowbuffer中,然后再從shadowbuffer中拷貝到操作系統的guestbuffer中,此時設備中的數據才會真正到操作系統層供用戶使用。當有數據從主機到usb存儲設備時,數據首先從guestbuffer中拷貝到shadowbuffer中,然后再由bitvisor控制shadowbuffer中的數據傳輸到設備中。
在bitvisor中,已經注冊了usb寫操作bulkout所調用的hook函數,本發明方法在該函數中進行寫操作i/o的攔截。禁止寫操作的數據流程圖如圖4所示。首先在該函數中得到cbw命令塊,解析該命令塊,根據命令塊中數據的傳輸方向來判斷數據是否是主機發送至usb存儲設備的,若是則將其傳輸長度修改為0,并記錄下命令塊中scsi(smallcomputersysteminterface)命令,以及該命令塊的標識。當cbw傳輸完成后,開始傳輸數據,由于usb存儲設備接收到的cbw傳輸長度是0,不會接收bitvisor的數據,所以要阻止操作系統層數據被復制到bitvisor。通過上述記錄下的scsi命令來進行判斷,當scsi命令為0x2a或者0xaa時,則阻止guestbuffer中的數據被復制到bitvisor中shadowbuffer,從而阻止了數據流向usb存儲設備。然后為了讓bitvisor能夠接收usb存儲設備發來的csw傳輸狀態包,完成一次完整的i/o傳輸過程,還要將bitvisor中此次數據傳輸的傳輸描述符qtds中狀態標識設為傳輸完成。當bitvisor檢查數據傳輸狀態時,數據傳輸完成,則接收從usb存儲設備返回的csw命令狀態塊,根據csw中的標識來判斷是否是cbw命令包對應的csw,若是則將該csw的狀態修改為1,代表此次讀寫操作傳輸錯誤,返回給操作系統。
上述過程的主要實現思路是bitvisor層認為此次傳輸已經完成,進行bitvisor層傳輸所消耗內存的回收操作,但是操作系統層則被告知此次傳輸發生錯誤。操作系統層則會選擇重傳,這樣又會陷入bitvisor中,循環進行上述操作,當操作系統層經過多次約定的重傳嘗試之后,則放棄了此次數據傳輸。導致對usb存儲設備的寫操作失敗,從而實現usb存儲設備的只讀控制。
3.設備只寫控制實現方法
在bitvisor的usb主機控制器中讀操作數據流程與寫操作數據流程原理一致,故usb存儲設備的只寫控制方法與只讀控制方法一致。
對本發明的實驗驗證:
實驗環境采用quadcore四核處理器,內存2g,硬盤120g,usb存儲設備(u盤、usb2.0接口);ubuntu16.04,bitvisortip(經修改,利用一個處理器一直監控usb存儲設備線程)。對3種環境配置狀態進行了對比測試,實驗中對u盤進行寫操作的文件大小分別為10.5mb、27.8mb、61.4mb。數據傳輸速度影響實驗結果如表1所示。
表1.實驗結果列表
從實驗結果看出,百mb以下文件,bitvisor對usb存儲設備的寫操作影響在秒級,在可接受范圍內,而在bitvisor中部署本發明系統進行i/o攔截等操作,對性能影響更小,在秒級以下。
本發明方法適用于不同種類和/或型號的usb存儲設備,當然可能由于usb識別和讀寫控制信號不同而實現方式稍有變化,也屬于本發明保護的范圍。
以上實施例僅用以說明本發明的技術方案而非對其進行限制,本領域的普通技術人員可以對本發明的技術方案進行修改或者等同替換,而不脫離本發明的精神和范圍,本發明的保護范圍應以權利要求書所述為準。