微过滤驱动在终端文档安全保护中的应用
2011-09-07黎计仲黄万民袁肃蓉
黎计仲, 凌 捷, 黄万民, 袁肃蓉, 刘 新
(1.广东工业大学计算机学院,广东广州510006;2.广州钧衡软件测评技术有限公司,广东广州510663)
0 引 言
为了解决终端重要信息的安全问题,一种有效的方法就是直接对信息的载体和源头—终端的文档进行访问控制和加密。但当前很多加密系统都是应用层加密系统,没有与操作系统的文件系统集成在一起,在实际应用中都要求用户在访问文件前要进行手动的加解密处理,使用起来很不方便。随着文件系统过滤驱动技术的成熟,使用文件系统过滤驱动技术对重要文件进行透明加密已成为解决文件安全保护的重要技术手段,但是使用文件系统过滤驱动实现对文档动态透明加解密时,首先要解决动态透明加解密中区分加密文件与非加密文件的问题。方法一是将特定类型的文件放在一个固定的目录下或者将文件的全路径存放在另外一个文件里。这些做法的缺点是文件的移动、打包压缩或者通过网络发送就变得极其麻烦,文件标识很容易丢失,不利于实际应用。方法二是采用文档标识技术[1],把文档标识嵌入文档本身,文档与标识保存在一起,避免由于文件的移动而造成标识丢失的可能性,实现了在细粒度级别上对文件进行透明标识。
但原有的文档标识技术只有识别文档的功能,本文先对原有的文档标识技术进行改进,把对文档的加密密钥和文档的策略控制信息保存在文档标识中,使文档标识不仅有识别文档的功能,而且具有密钥管理以及策略管理功能,然后基于新型文件系统过滤驱动Minifilter过滤驱动以及改进的文档标识技术,设计并实现了一个终端文档安全保护系统,实现对文档的透明加密和透明标识以及严格的访问控制,使文档在终端如常使用,通过移动存储设备拷贝出去或者通过网络发送出去,在外不可用,可以有效地保护终端重要信息的安全。
1 Minifilter过滤驱动技术和文档标识技术的改进
1.1 Minifilter过滤驱动技术
Windows 2K/XP/2003等基于NT内核的Windows操作系统的驱动程序是采用分层的结构模型,文件系统驱动程序只是I/O子系统的一个组件。在这种分层的结构下,I/O管理器所发出的每个IRP(I/O请求包)的处理分别经过各层驱动程序,直到某层驱动程序完成这个请求[2]。因此,可以在I/O管理器与文件系统驱动之间插入过滤驱动,截获和处理来自上层的IRP以及下层返回上层的IRP,从而实现对文档的透明加解密。过滤驱动的工作原理如图1所示。
图1 过滤驱动的工作原理
1.2 改进的文档标识技术
文档标识技术把文档标识嵌入文档本身是为了解决以前把识别文档需要动态加解密的标识放在文档本身之外,使文件标识很容易丢失,不利于实际应用的问题。文档标识技术把文档标识与文档保存在一起,避免由于文件的移动而造成文件标识丢失的可能性,实现在细粒度级别上对文件进行透明标识,但它只有识别文档的功能。
本文对原有的文档标识的构成进行扩展,把文档的加密密钥,文档的策略控制信息也保存在文档标识中,使文档标识不仅有识别文档的功能,而且有密钥管理的功能。对密钥的管理,方法一是所有文档使用相同的密钥[1-3],不用对密钥进行管理,但该方法存在破解一个文档就破解所有文档的风险。方法二把密钥集中存在密钥服务器[4],一文档一密钥,安全性高。但该方法每次访问文档都要通过内核向应用层询问密钥,透明加密时延大,一旦密钥服务器遭破坏,所有文档都失效。本文综合前两种方法的优点,先是文档密钥随机产生,不同文档不同密钥,密钥存放在对文档标识中,利用文档标识管理密钥,然后使用统一的密钥对文档标识加密,最后把加密后的文档标识嵌入文档头部,内核访问文档时直接从解密后的文档标识中得到密钥,减少时延,提高效率。文档标识结构如图2所示。
图2 文档标识结构
2 终端文档安全保护系统的模块设计
本系统旨在对终端的文件进行安全保护,采用Minifilter过滤驱动透明加密技术,使终端上的文档始终以密文的形式存放在磁盘上,从源头上解决终端文档的安全问题。文件的加密密钥随机产生,并且加密的密钥嵌入文件的内部,系统用户也不知道文件的密钥,这样更能防止合法人员有意无意的操作而造成的信息泄漏问题,同时对文件进行分级保护,用户也分等级,不同等级的用户对不同等级的文件的操作权限也各不相同,系统的总体模块设计如图3所示。
图3 系统总体模块
2.1 应用层界面模块
提供用户的操作界面,负责用户信息管理,日志管理等功能。日志用于记录什么用户什么时候进行什么操作,这有利于对安全事故进行追踪,界面模块还负责用户与内核进行信息交换。
2.2 规则策略模块
由于文档分等级,用户也分等级,不同的用户对不同的文档的权限不同,这样就要进行权限访问控制,禁止越权读,写,修改文档等操作。
2.3 内核透明加密模块
这个模块只要采用Minifilter过滤驱动技术实现对文档的透明加密。在I/O管理器和文件系统驱动之间插入Minifilter过滤驱动程序拦截上层发来的I/O请求包,并对该IRP进行处理后再继续向下传递或直接向上返回结果通常被送到设备堆栈的最上层驱动程序,实现实时加密写入文件系统的文件,实时解密从文件系统读出的文件,读多少解密多少,写多少加密多少[5],保证受保护的文档始终是以密文的状态存放在磁盘上。
2.4 密钥发配模块及文档标识
本系统为了文档安全保护性能而设计了密钥发配模块,该模块为每个新建的文档发配一个不重复的密钥,使每个文档的加密密钥各不相同,密钥随机产生,密钥和相应的控制策略信息以文档标识的方式嵌入文件的本身,有利于对密钥进行管理以及在细粒度级别上对文档进行安全保护。不同的文档不同的密钥,这样就使密钥与文档是一对一的关系,有效地防止破解一个文档就可以破解所有文档的风险。
2.5 辅助功能模块
辅助功能模块提供一个简单的类似漏洞扫描功能的模块,负责检测终端是否装杀毒软件、防火墙等辅助性软件,以及提示重要系统补丁的缺漏,提高终端整体的安全性能。
3 关键技术与主要功能模块的实现
3.1 文档打开预处理的实现
文档打开预处理是指当进行文档透明加密的过滤驱动检测到机密进程试图打开一个文档 (新建的文档或者已存在的文档)时所需要进行的处理,在这个过程中涉及到文档信息的提取,密钥的发配,文档标识的相关操作以及决定该文档打开之后是否要加入文档加密表中。
无论用户请求打开新建的文档或者已存在的文档,I/O管理器首先向文件系统驱动发出的都是 IRP_MJ_CREATE IRP请求包,因此可以利用Minifilter过滤驱动技术在内核中截获IRP_MJ_CREATE操作,判断当前打开的是否是新建的文档,是就申请一个新的密钥,把密钥和文件的等级信息,权限信息等写入新的文档标识中,并把文档标识加入加密表中,然后对文档标识加密,最后把加密的文档标识写入新的文档中,如果不是新建的文档,就提取文档的文档标识,提取成功,就把文档标识加入加密表,提取失败就放过这个请求,流程如图4所示。
图4 文档打开预处理过程
3.2 透明加密与访问策略控制的实现
任何加密方法都可以抽象成钩子技术,即在数据从用户态请求到磁盘存储这条通路的某个地方,安装自己的处理过程,当写请求到来时进行数据加密,当读请求到来时进行数据解密[6]。因此可在I/O管理器和文件系统驱动之间插入Minifilter过滤驱动程序,截获I/0管理器发往文件系统驱动的读写IRP,获得当前的文件对TargetFileObject,根据文件对象从加密表中取得相应的文件信息以及对应的控制策略信息,还有文档密钥等,然后把控制策略信息送到规则策略模块,判断当前用户对当前文档是否够权限进行相应的请求操作,如果允许进行操作,对传输的数据进行相应的动态加解密处理:数据读请求时对读入的数据进行解密;数据写请求时对写出的数据进行加密[3],否则就禁止用户的操作。
实现的流程图如图5所示。
动态写加密实现的关键代码如下:
图5 透明加密的实现流程
3.3 驱动程序与应用程序通信的实现
在内核层与用户层的通信,传统的做法是使用用户态的API函数DeviceIoControl结合内核模块中的处理控制请求来实现双方通信的,而采用Minifilter过滤驱动技术则不同,Minifilter有内建的API提供给开发者使用,引入了新的对象微过滤器通信端口[7],通过FilterConnectionPort这个回调函数注册一个通信端口,利用FilterSendMessage以及FilterGetMessage实现两层的通信,为了实现他们之间的实时通信,本系统先在用户模式应用程序创建一个事件,并将该事件旬柄传给文件系统驱动程序,然后创建一个辅助线程。文件系统驱动程序收到该事件的句柄后,将其转换成能够使用的事件指针,并存储起来以便使用。在文件系统驱动程序向应用程序传递信息时,就将此事件设置为有信号状态,然后应用程序的辅助线程便会知道这个消息并进行相应的处理。
4 系统运行结果及性能分析
图6 没有文件标识的文件
图7 有文件标识的文件
对两个相同大小的有文件标识和没有文件标识的文件,有文件标识的文件在开启终端文档安全保护系统情况下进行读写操作与没有文件标识的文件在没有开启终端文档安全保护系统情况下进行读写操作。读写速度几乎一样,时延非常小如图8所示,并且系统具有以下性能:
图8 文件读写时间测试
(1)可操作性:本文的终端文档安全保护系统是基于Minifilter过滤驱动开发的,它与Windows文件系统高度集成在一起,对文档的加/解密过程是在内核中自动完成的,对应用层来说完全是透明的,因此不会对应用程序访问方式和用户操作习惯产生任何影响。文件内容加解密采用流加密算法,效率可以接受。同时系统不仅支持NTFS格式文件系统,也支持FAT格式文件系统,具有很强的实用性。
(2)安全性:被保护的重要文件以密文的形式存储在磁盘上,入侵者不能得到被保护的重要文件的明文。由于每个文件的密钥是随机产生并且都各不相同,即使攻破一个文件,其他文件仍是安全的。
(3)共享性:由于对文件的所有访问控制策略以及加密的密钥都以文件标识的方式嵌入文件的头部,所以文件在系统下自由移动,并不对文件的共享性产生任何影响,只要访问者具有相应的权限,对文件的操作无需作任何改变。
5 结束语
本文先对原有的文档标识技术进行改进,使文档标识不仅有识别文档的功能,而且具有密钥管理以及策略管理功能,然后结合Minifilter过滤驱动设计并实现了一个终端文档安全保护系统。实现对终端重要文档的透明加密以及透明标识,在细粒度级别上对受保护文档进行标识,使受保护文档始终是以密文的状态存放在终端上,且加密时不同的文档采用不同的密钥,实验结果证明系统能有效地保护终端重要信息的安全,达到设计的预期效果。改进的文档标识技术不仅应用在文件透明加密系统中,还可应用在目录安全控制系统或者其他文件安全防护系统中,具有良好的应用前景。
[1]龙飞宇,刘嘉勇.基于文件系统过滤驱动的文件标识研究[J].通信技术,2008,41(10):76-79.
[2]胡宏银,姚峰,何成万.一种基于文件过滤驱动的Windows文件安全保护方案[J].计算机应用,2009,29(1):168-171.
[3]李民,方勇,刘林超,等.文件过滤驱动及应用[J].信息与电子工程,2005,3(4):290-292.
[4]于飞,胡平.基于文件过滤驱动的局域网安全系统设计[J].计算机工程与设计,2008,29(20):5174-5176.
[5]沈玮,王雷,陈佳捷.基于文件系统过滤驱动的加密系统设计与实现[J].计算机工程,2009,35(20):157-159.
[6]顾正义,黄皓.新加密文件系统的研究与实现[J].计算机工程与设计,2009,30(14):3272-3277.
[7]谭文,杨潇,钊坚磊,等.Windows内核安全编程[M].北京:电子工业出版社,2009.