本发明涉及一种基于薄虚拟机监控器的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识别和读写控制信号不同而实现方式稍有变化,也属于本发明保护的范围。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。