高发桂
(湖北民族学院 信息工程学院,湖北 恩施 445000)
一种基于Windows的通用外设管控系统
高发桂
(湖北民族学院 信息工程学院,湖北 恩施 445000)
提出一种基于Windows设备过滤驱动实现的外设管控方案,主要讨论建立一种通用的Windows外部设备的管控系统,即无需针对新型设备另外开发一套新的系统.该外部设备主要指USB移动存储设备、串口、并口、蓝牙、红外等物理设备.系统包括对设备使用权限的控制以及设备使用行为的审计并形成日志存储在本地.该方法具有与操作系统联系紧密,安装监控模块便捷,在用户无感知的情况下完成对终端外部设备的管控.
设备过滤驱动;Windows驱动程序模型;I/O请求包;权限控制;操作审计
随着信息技术的发展,外部存储设备的使用越来越普遍,同时外部设备的表现形式也是花样繁多,比如USB接口的无线网卡等,这直接导致了用户借助于硬件设备的途径将机密数据泄露[1].对于局域网中的硬件设备本身不是很严谨,重要的数据很容易通过串、并口、可移动存储设备拷贝,使得在局域网内违规获取机密信息变得十分快捷.缺少通用的外设管控系统,使得局域网内任何人都有可能有意或者无意的泄露机密信息.目前国内针对设备的监控采用Hook Windows API[2],通过在ring3模式下HOOK CreateFile、ReadFile、WriteFile等API以达到实现监控硬件设备的目的,此种方式缺点非常明显,比如在多线程调用下缺乏健壮性以及外部容易绕过而出现监控不彻底的情况.张赟[3]等人通过SSDT HOOK内核函数,以达到外设监控的目的,此种方式存在的缺陷在于Windows X64平台的系统存在内核patch,在该平台上,此种方式会出现蓝屏.杨思燕[4]提出基于Windows文件过滤驱动监控USB可移动存储设备,效果较好,但是只能针对USB等存储设备监控,无法对串口等设备进行有效的监控.岳亮[5]提出了USB外设的监控,较好的实现了USB设备的存储控制以及USB访问日志记录,但是对于其他外设的监控却没有提供支持.
本文提出的基于Windows的通用外设的管控系统实现方案,通过WDM设备过滤驱动程序[6]实现管控通用外设的目的.过滤驱动[7-8]是一种中层驱动程序,它位于其他的功能驱动程序的层次之间.处于功能驱动程序之上的被称为上层过滤器,处于功能驱动程序之下的被称为下层过滤器.上层过滤器的作用是通过拦截IRP驱动请求包来处理设备的附加功能,而下层过滤器的作用是可以拦截并且修改发往设备驱动的IRP驱动请求包,已达到拦截的目的[9].WDM模式的过滤驱动程序可以不断的叠加,即任何一方的设备过滤驱动程序可以被更为底层的过滤驱动程序附加[10].
把硬件设备的管理与Windows功能设备驱动程序无缝集成,对设备的权限使用的控制以及操作行为的审计对用户透明,用户无感知,可以方便部署在局域网中主动防御通过硬件资源的泄密.本文首先介绍了本系统的目标,其次介绍了通用外设管控系统的实现原理;再次介绍了基于Windows设备过滤驱动的通用外设管控系统实现;最后对系统做了功能以及性能测试.
为了克服现有硬件监控系统的不足,使本文介绍的方案具有高安全性和实用性,提出以下目标:
1)管控彻底,从Windows底层入手,拦截一切外部设备的IRP_MJ_CREATE与IRP_MJ_WRITE等IRP,不会出现ring3层监控容易绕过的问题;
2)用户体验好,效率高,整个监控过程是在内核中透明完成的,用户无感知;
3)系统兼容性强,摒弃内核HOOK的办法,采用WDM下层过滤器的方式拦截设备操作,在X64平台不会蓝屏死机;
4)管控精细,不仅对硬件设备进行权限控制,同时也对硬件设备的使用行为进行审计,便于事后追溯;
5)策略灵活,系统控制应该较为灵活,可以很快修改某类设备的权限;
2.1设备过滤驱动的工作原理
图1 WDM过滤驱动层次图Fig.1 WDM filter driven hierarchical diagram
WDM驱动是对NT模式驱动的有效补充,增加了对即插即用的支持[11],同时需要提供一个用以描述安装过程的INF文件,在INF文件中注明过滤驱动程序所对应的功能驱动程序在注册表中子键的信息以及本过滤器自身的信息.WDM是一个层次化的驱动程序模型,在该模型中,驱动的层和堆栈一起协同处理I/O请求.Windows的子系统是基于对象的,同时也是包驱动的,每个I/O操作是通过一个IRP描述,驱动程序的工作过程即是IRP包处理的过程[12].WDM设备过滤驱动的层次如图1所示.
图2 基于设备过滤驱动的通用外设管控系统的总体设计模型Fig.2 A general design model of universal peripheral management and control system based on device filter driver
WDM使用了图1所示的模型,右边是一个设备对象的堆栈.任意一个物理硬件设备都可以有多个这样的数据结构,处于堆栈最底层的设备对象称为物理设备对象,简称PDO,在设备对象堆栈的中间某一层的对象称为功能设备对象,简称FDO,位于FDO上面的称为上层过滤器,位于FDO下面的称为下层过滤器.操作系统的PNP管理器按照设备驱动程序的要求去构造设备对象堆栈.一旦总线驱动检测到新硬件的存在,那么PNP(即插即用)管理器即会创建一个PDO,之后开始生成上述数据结构的堆栈.PNP管理器最先装入最底层的过滤器驱动程序并调用AddDevice函数,创建FIDO,然后AddDevice将PDO连接到FIDO上,PNP管理器继续向上执行,装入并调用每个底层过滤器、功能驱动程序、高层过滤器,直至完成整个堆栈[13].在下层过滤器驱动的初始化过程中,AddDevice函数作用是创建设备类对象,即所过滤设备驱动的类对象[14],进一步是通过调用IoCreateDevice实现的.
2.2通用外设管控系统总体设计模型
基于设备过滤驱动的通用外设管控系统的总体设计模型如图2所示.
用户通过设置各类硬件设备的使用权限,设备过滤驱动模块依据应用程序所设置的硬件设备的权限,在IRP_MJ_CREATE以及IRP_MJ_WRITE上进行控制设备的打开以及写入操作.同时在AddDevice处记录通过事件通知应用程序,有设备接入系统,需要记录接入行为.在IRP_MN_REMOVE_DEVICE派遣函数中通过事件通知应用程序,有设备移除系统,需要记录移除行为.
2.3设备权限的管理
在应用层与设备过滤驱动的交互中,设备权限的数据结构如下:
typedef struct _tag_FilterDeviceType_Auth
{
INT32 dwDeviceType; //待监控的设备类型
INT32 dwAuthFlag; //权限
} FilterDeviceType_Auth, *LPFilterDeviceType_Auth;
//设备类型表
enum _DEVICETYPE
{
DEVICETYPE_UDISK = 0x0000, //USB可移动存储设备
DEVICETYPE_OPTICAL_DRIVER = 0x0001, //光驱设备
试剂:硫酸铝铵(批号20120827),购自天津市光复精细化工研究所。氢氧化钠(批号20160803)、硼酸(批号20130107)、甲基红(批号20161020)、溴甲酚绿(批号20160330),均购自国药集团化学试剂有限公司。0.05 mol·L-1硫酸滴定液(批号539906-161001),购自中国食品药品检定研究院。水为Milli-Q过滤水。
DEVICETYPE_BLUETOOTH = 0x0002, //蓝牙设备
DEVICETYPE_INFRARED = 0x0003, //红外设备
DEVICETYPE_PARALLEL = 0x0004, //串并口
DEVICETYPE_1394 = 0x0005, //1394线设备
DEVICETYPE_FLOPPY_DRIVER = 0x0006 //软驱设备
};
//设备权限表
enum _DEVICE_AUTH_FLAG
{
_DEVICE_AUTH_FLAG_NORMAL = 0x00, //设备正常使用
_DEVICE_AUTH_FLAG_READONLY = 0x01, //设备只读
_DEVICE_AUTH_FLAG_FORBID = 0x10, //设备完全禁用
};
在FilterDeviceType_Auth结构成员中,dwDeviceType表示待监控的设备类型,其取值为枚举_ DEVICETYPE中对应数据,权限字段dwAuthFlag表示待监控设备所具有的权限,其取值为枚举_DEVICE_AUTH_FLAG中对应的数据.
对于外设正常的使用情况下,仅需过滤驱动将IRP向下层传递即可,而对于完全禁用和只读的情况需要分开处理,下面分完全禁用和只读两种情况分别阐述拦截的流程.
图3 设备完全禁用情况下的处理流程图Fig.3 The flow chart of the processing when the device is completely disabled
a) 对于硬件设备完全禁用的处理流程如下图3所示.
用户通过设置各类硬件设备的使用权限,设备过滤驱动模块依据应用程序所设置的硬件设备的权限,控制设备完全禁用的情况下,只需要控制硬件设备的打开操作即可,控制了打开,其设备的读写无需控制.在IRP_MJ_CREATE例程中,先查询设备的类型,根据设备类型查询设备权限控制链表,如果不属于完全禁用的设备,只需将IRP传递至下层总线驱动即可,如果属于完全禁用的设备,需要在本层完成此IRP,同时返回状态STATUS_INVALID_DEVICE_REQUEST.
b) 对于硬件设备只读的处理流程如下图4所示.
图4 设备只读情况下的处理流程图Fig.4 Process flow chart for device read-only case
用户通过设置各类硬件设备的使用权限,设备过滤驱动模块依据应用程序所设置的硬件设备的权限,控制设备只读的情况下,只需要控制硬件设备的写入操作即可.在IRP_MJ_WRITE例程中,先查询设备的类型,根据设备类型查询设备权限控制链表,如果不属于正常的设备,只需将IRP传递至下层总线驱动即可,如果属于只读的设备,需要在本层完成此IRP,同时返回状态STATUS_INVALID_DEVICE_REQUEST.不能返回STATUS_ACCESS_DENIED状态,因为在写入的时候,如果返回拒绝写入,I/O管理器会误认为是权限问题,会多次写入,造成资源管理器响应缓慢的情况.
2.4硬件设备插拔行为审计
硬件设备插拔行为的审计依赖于AddDevice以及IRP_MN_REMOVE_DEVICE.应用层通过与设备过滤驱动共享事件,设备过滤驱动一旦发现有设备接入,检查设备类型是否为待管控设备,如果为管控设备,即将设备信息存储在日志链表中,触发共享事件,应用程序检测到共享事件被触发,即向设备过滤驱动请求日志信息.硬件设备插拔行为审计处理流程如下图5所示.
图5 硬件设备行为插拔审计的处理流程图Fig.5 Hardware device behavior plug-in audit process flow chart
其中产生的外设审计日志结构如下:
typedef struct _tag_AuthLogRecord
{
INT32 dwDeviceType; //设备类型
INT32 dwDevicePnpType; //设备插入/拔出行为
INT32 dwTime; //行为发生的时间
WCHAR szDeviceId[64]; //扩展字段,设备物理ID
} AuthLogRecord,*LPAuthLogRecord;
目前的系统在测试的过程中,记录了设备类型,设备的行为,以及发生该行为的时间.只有USB可移动存储设备获取到了szDeviceId,针对其他的设备类型,此字段无效.
2.5通用设备管控系统方案分析
1)管控彻底,基于WDM的设备过滤驱动程序实现外设的管控,为内核层监控,应用层很难绕过,其管控较为彻底;
2)用户无感知,整个监控过程是在内核中透明完成的,用户无感知;
3) 系统兼容性强,摒弃内核HOOK的办法,采用WDM下层过滤器的方式拦截设备操作,在X64平台不会蓝屏死机;
4)管控精细,不仅对硬件设备进行权限控制,同时也对硬件设备的使用行为进行审计,便于事后追溯;
5)策略控制灵活,及时生效.用户可以随意设置某类硬件外设的使用权限,生效时间零等待.
3.1测试环境
主机:Inter(R) Core(TM) i3-2330M,3GB内存
操作系统:Win7系统
测试U盘规格:Kingston(DTIG4) 8G
3.2功能测试
U盘接入行为审计日志显示见表1.
结果显示,在序列号为9BC41C00FFFF5E48U盘接入系统时,当存在USB存储设备的权限控制时,成功记录了存储设备的记录日志.
针对USB可移动存储设备,对其设置完全禁用策略后,鼠标、键盘不影响,对U盘而言,使用资源管理器打开设备,会出现“函数不正确”的提示,这是因为设备过滤驱动返回了无效设备的状态.
表1 U盘接入行为审计日志
针对串口的测试,在网上下载“武汉奋进串口通信助手”,在对其设置完全禁用策略后,在界面上点击打开“COM1”,会提示打开失败,这是因为设备过滤驱动返回了无效设备的状态.
在整个过程中,CPU占用率一直为0.
本文针对目前局域网内硬件外设管控系统不足,提出了基于设备过滤驱动的通用管控模型.本方案对未来将要产生的指纹设备等的监控也不需要大幅修改源代码,只需要在设备过滤驱动的代码中加入设备的类型即可,扩展性好.实验结果表明,该操作方便,稳定性高,适应从Win xp到Win10的各个版本,具有较高的可靠性及安全性.
[1] 胡宏银,姚峰,何成万.一种基于文件过滤驱动的Windows文件安全保护方案[J].计算机应用,2009,29(1):168-171.
[2] 郇义鹏,虞水俊.利用API拦截技术实现串口通信数据拦截 [J].计算机应用,2003,23(11):144-146.
[3] 张赟,蔡皖东,王玥.基于IRP拦截技术的USB设备监控系统[J].微电子学与计算机,2005,22(12):179-183.
[4] 杨思燕.USB可移动存储设备监控软件研究与实现[J].计算机技术与发展,2013,23(12):151-154.
[5] 岳亮.USB移动外设监控技术研究[D].成都:四川大学 2005.
[6] 谭文,杨潇,邵坚磊.寒江独钓-Windows内核安全编程[M].北京:电子工业出版社,2009:500-545.
[7] 张景龙,白青海,王爱松,等.基于Windows平台的数据安全的研究[J].内蒙古民族大学学报(自然科学版),2015,39(4):292-294,313.
[8] 王小玲,易发胜.一种利用源地址信息的DDOS防御系统的设计与实现[J].西南民族大学学报(自然科学版),2015,41(4):462-467.
[9] 王洪,顾本斗.USB设备驱动程序的开发[J].计算机工程与设计,2002,23(3):17-22.
[10] 张帆,史彩成,毛二可.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.
[11] 司刚,付少锋,周利华.WDM驱动程序中设备事件通知技术的研究[J].计算机技术与发展,2006,16(4):144-146.
[12] 熊聪聪,汪鹏.一种新型的USB存储设备访问控制[J].自动化仪表,2011,32(12):16-19.
[13] 微软.Windows 2000驱动程序开发大全第1卷[M].北京:机械工业出版社.
[14] ONEY W.Programming the Microsoft Windows Driver Model[M].2nd Edition Ebook.Washington:Microsoft Press,2003.
责任编辑:时凌
AUniversalPeripheralManagementSystemBasedonWindows
GAO Fagui
(School of Information and Engineering,Hubei University for Nationalities,Enshi 445000,China)
This paper presents a peripheral device control scheme based on Windows device filter driver.A general management system for Windows external devices is established,that is,there is no need to develop a new system for new devices.The peripheral devices mainly refer to such physical devices as USB removable storage device,serial port,parallel port,Bluetooth and infrared device.The system has the functions of controlling the usage right of the devices and auditing the device using behavior and forming the log to be stored locally.The method has the advantages of close connection with the operating system and convenient installation of the monitoring module and can complete management and control of the peripheral devices of the terminal without being realized by the user.
device filter driver;Windows driver model;I/O request packet;access control;operation auditing
2016-12-05.
湖北省自然科学基金项目(2009CDB069).
高发桂(1964-),女,硕士,副教授,主要从事计算机网格安全的研究.
1008-8423(2017)04-0429-05
10.13501/j.cnki.42-1569/n.2017.12.017
TP309.7
A