《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于Windows微过滤驱动文件透明加解密研究
基于Windows微过滤驱动文件透明加解密研究
来源:微型机与应用2014年第4期
孙世杰, 曹 斌
(贵州大学 计算机科学与信息学院, 贵州 贵阳 550025)
摘要: 简单介绍了当前信息安全技术国内外研究的现状与趋势,分析了各种信息安全技术的优点和存在的不足。针对当前信息安全的严峻形势,提出了基于Windows文件系统微过滤驱动的文件透明加解密技术的解决方案。介绍了研究“基于Windows文件系统微过滤驱动的文件透明加/解密技术”过程中必须掌握的一些理论基础,包括Windows执行体组件、内核机制、驱动开发基础等基本理论知识。基于微过滤驱动模型,采用3DES加密算法,实现Windows内核层的文件加/解密处理。
Abstract:
Key words :

摘  要: 简单介绍了当前信息安全技术国内外研究的现状与趋势,分析了各种信息安全技术的优点和存在的不足。针对当前信息安全的严峻形势,提出了基于Windows文件系统微过滤驱动的文件透明加解密技术的解决方案。介绍了研究“基于Windows文件系统微过滤驱动的文件透明加/解密技术”过程中必须掌握的一些理论基础,包括Windows执行体组件、内核机制、驱动开发基础等基本理论知识。基于微过滤驱动模型,采用3DES加密算法,实现Windows内核层的文件加/解密处理。
关键词: 信息安全; 微过滤驱动; 加/解密; 3DES加密算法

1 网络信息安全的现状与研究趋势
    现今存在的一些信息安全保护方法有很多,如网络信息保险箱(瑞星网络保险箱、奇虎360网络保险箱等)、隐藏文件(隐身侠隐私隐藏文件夹加密软件)等对信息资源的保护方法。但这些方法都是基于Windows的应用层而开发的,不但需要用户对其基本操作和原理进行掌握,而且并不能安全可靠地保护被窃取走的资源。
    因此在驱动层对数据进行加/解密成为提高信息安全的一种重要手段,将数据以密文的形式存储在PC或者其他移动设备中,即使信息被非法窃取,盗窃者因没有密钥,最终得到的也只是无法辨认的乱码,从而真正达到了对信息资源进行保护的目的。
2 驱动层加密的优势
    驱动层透明加/解密技术是通过Windows提供的可安装文件系统IFS(Installable File System)开发接口写设计一个文件过滤驱动,通过此驱动实现透明加/解密功能。
    驱动层的透明加/解密技术由于与操作系统的文件系统结合紧密,加/解密效率更高,控制更加灵活,运行更加稳定。
    所谓透明,是因为对用户来说,是不可见的操作。当用户对指定的文件进行操作处理时,系统将按用户需要对未受保护的文件进行自动加密处理,对已受保护的文件进行自动解密处理。驱动层加/解密使得文件在硬盘上是以密文形式存在的,而在系统内存中是明文。但如果离开所设置好的系统环境,由于应用程序无法获得自动解密的驱动程序的服务而无法正常打开指定文件,从而起到保护文件内容的真正目的。
3 微过滤驱动
3.1 过滤驱动模型开发步骤

    微软提供的过滤驱动模型和现在的微过滤驱动模型开发过滤驱动都遵循以下几个基本步骤:
    (1)主要编写驱动程序中的派遣函数(dispatch functions),将驱动程序加载到目标设备对象上,拦截所能控制发往该对象的IRP。
    (2)创建发往管理目标设备对象的IRP。
    (3)建立完成派遣例程,从而被所加载的驱动程序来处理完成IRP时所调用。
    (4)在需要时将驱动程序从目标设备对象上卸载。
3.2 文件系统过滤驱动开发的推荐模型为mini-filter
    将基于过滤管理器模型开发称做微过滤驱动。
    每一个微过滤驱动必须有对应一个“层级”,用来决定微过滤驱动在加载时在I/O stack栈与其他微过滤驱动的相对位置的唯一标识,层级由微软分配指定和管理。
    所谓的“微过滤驱动”就是分层过滤驱动。
    分层驱动[1]是指多个驱动程序分别进行设备对象的创建,出现由高到低的设备对象栈,将功能复杂的驱动程序分解成多个功能简单且容易修改和维护的驱动程序。当IRP被传送到设备栈的顶部时,可以由顶层的设备对象直接处理IRP或传递至底层的设备对象进行处理。
    图1为分层驱动的基本模型。分层架构采用了化整为零的思想,既提高了驱动程序的稳定性,又能非常有效地避免驱动之间的冲突。同时还为开发人员在开发过程中发现问题提供了清晰的思路和方便的环境。

4 3DES加密算法
4.1 算法介绍

    3DES又称Triple DES[2],是DES加密算法的一种模式,使用3条56 bit的加密密钥对数据进行连续3次叠加加密。数据加密标准(DES)使用对称密钥加密法,使用56 bit加密密钥和密码块的方法,而在密码块的方法中,文本被分成64 bit大小的文本块然后再进行加密。比起原始的DES,3DES加密算法的安全强度更高。
 3DES加密算法是DES向AES加密算法进行过渡的一种加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES算法的一种进化。以DES算法为基本模型,以组合分组的方法设计出分组加密算法,其原理如下:
 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
    3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
    3DES解密过程为:P=Dk1(EK2(Dk3(C)))
4.2 加密算法的发展趋势
4.2.1 对称加密算法

   对称加密算法[3]是应用较早的加密算法,技术成熟,在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成密文发送给收信方;收信方收到密文后,读取原文,通过加密时使用的密钥及同一加密算法的逆算法[3]对密文进行解密。美国国家标准局倡导的AES算法即将作为新标准取代DES。利用AES算法进行驱动层的文件透明加/解密也是接下来工作中要做的。
4.2.2 AES算法简介
    AES的基本要求是,采用对称分组密码体制,密钥长度最少支持128 bit、192 bit、256 bit,分组长度128 bit,算法易于各种软件和硬件的实现。
4.2.3 DES算法的趋势
    在应用发面,尽管DES算法在安全强度上并不高,但由于快速DES芯片的大量产生,使得DES仍能继续使用。为提高安全强度,本设计采用了独立密钥的3DES,但无论是DES还是3DES都要被AES算法取缔。
4.3 驱动层加解密
4.3.1 文件过滤驱动的基本流程

    文件过滤驱动[4]程序的开发基本流程是将编写好的派遣函数加载到文件系统控制设备上,使驱动程序发挥作用,如图2所示。

 

 

4.3.2 驱动对象与设备对象
    所谓的驱动对象[4]是一种数据结构,在驱动开发中名为DRIVER_OBJECT[5]。任何驱动程序都对应一个DRIVER_
OBJECT。驱动程序的入口函数为DriverEntry,因此,驱动程序的开始代码如下:
    NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING
    RegistryPath)
    {
    }
     这就是驱动程序的入口函数。DriverObject 就是所写的驱动对应的DRIVER_OBJECT, 是系统在加载驱动时所分配的。
     RegisteryPath[5]  是专用于记录驱动相关参数的注册表路径[5]。这两者都由系统分配并通过这两个参数传递的。
     DriverObject[5]重要之处在于它拥有一组函数指针,称为dispatch functions。
     开发驱动程序时,核心任务就是编写派遣函数。当系统用到此驱动,会向此驱动发送IRP(这是Windows所有驱动的共同工作方式)。其任务是在派遣函数中处理这些请求。可以拒绝某些IRP,可以使其成功返回,也可以修改这些IRP,甚至可以通过这些IRP自己发出新的IRP。
   设备对象[4]则是指DEVICE_OBJECT(以下简称为DO)。但是事实上任何IRP都是针对而DO而发出的,它们之间是一一对应的,由该驱动生的DO的IRP也应该由该驱动来处理。当一个应用程序对某文件进行操作的时候,Windows系统将这些IRP发送给文件系统驱动。
    文件系统过滤驱动可以通过其中的派遣函数对这些IRP进行拦截或释放,于是系统就有了捕捉和改变文件系统操作的能力。
5 驱动层的文件加密实例
5.1 开发软件及环境

    实现一个简单的分层驱动的文件加/解密功能,系统实现将在Windows 7系统(使用虚拟机)下进行,采用VS2008(编译器)、WDK(编译器)、WinDbg(调试工具)、fltMc(调试工具)等工具构成的平台,使用C语言进行代码编写。
5.2 开发实例图片
 用WDK软件将程序进行编译,得到.sys文件,通过fltMC和Windbg进行调试,将实例驱动加载并绑定到虚拟机上。加载成功后,在虚拟机上新建一个空的.txt文件,打开,输入随意字符,如图3所示。

    点击保存文件,此时系统用到本驱动,由设备对象发出IRP,进行加密变换。
    由于在代码中并没有加入解密算法,所以当再打开此文件时会看到如图4所示界面。

    如果在代码中正确的地方加入解密算法,在保存文件以后再打开文件,系统再次用到此驱动,由对象设备发出IRP,进行解密,打开文件后看到的依然是明文。
    文件在硬盘上是密文,在内存中是明文。所以当保存的文件被别人获取后,没有所加载的驱动,故无法获取信息的明文。而用户在使用过程中,并不会受到影响,也就是所谓的透明加解密。
    驱动与驱动之间的层级带来的冲突问题是目前驱动开发中遇到的最大的问题。
    例如,一个antivirus(杀毒)过滤驱动在栈中的位置应该高于一个“加密操作”的过滤驱动,因而它能在文件被加密之前探测病毒并消除文件中的病毒。这就使得有些所做的驱动无法正常发挥作用,所以今后工作中要尽力解决的是驱动之间的冲突问题。
参考文献
[1] 侯春明, 陈斌. 基于分层驱动的Windows内核rootkit关键技术[J]. 吉首大学学报(自然科学版), 2009,30(4):48-51.
[2] 郑卫国. 加密技术在数据安全中的应用[J]. 农业网络信息,2007(6):115-117.
[3] 廖凌云.基于包过滤的对称加密系统的研究与实现[D]. 上海:同济大学软件学院, 2009.
[4] 周斌.主机入侵保护系统的研究与实现[D]. 济南:山东大学,2008.
[5] 高静.智能卡在网络管理系统中的研究和应用[D].北京: 北京邮电大学,2009.

此内容为AET网站原创,未经授权禁止转载。