使用透明加密技术实现对磁盘文件的保护
使用透明加密技术实现对磁盘文件的保护
骆春山
北京邮电大学信息学院,北京(100876)
E-mail:hill9932@vip.sina
摘要:本文采用不同于传统的文件加密方法,而是基于Windows文件系统过滤驱动技术,实现了对用户数据的加密存储。使用该加密技术不改变用户原先对文件数据的操作流程,完全透明、高效地实现了对数据的加密和解密。
关键词:透明加密、过滤驱动
1. 引言
随着家用电脑与网络的普及,人们越来越多地使用磁盘作为数据的存储媒介,同时也日益频繁地使用移动存储媒介来交换和传递数据。因此,如何保证数据在存储及传递过程中的安全,如何使用户既安全又
如何给文件加密方便地对数据进行保护,也逐渐引起人们的重视。传统的数据保护方法,大多在应用层实现对数据的加密,通常采用的形式和技术有:
z提供UI操作接口(如右键菜单),供用户选择需要保护的文件,应用程序根据用户选择的文件路径对文件进行加密。
z利用Windows API函数,应用程序实现对某一目录的监控,一旦该目录下有文件变化,应用程序将获取文件路径,并对文件进行加密。
虽然以上方法可以实现对文件的保护,但是每次的操作都必须由用户主动地去操作,不仅工作流程麻烦,而且容易被用户疏忽,从而造成信息的泄露。本文提出的方法从操作系统底层出发,完全由系统实现对文件的保护,从而克服了传统加密方法的局限性。
2. 实现方法
2.1  Windows文件系统工作原理
文件系统[2](以下简称为FSD)的主要作用就是组织和管理存储在媒介上的二进制数据,使之易于操作和管理。Windows操作系统下常用的文件系统格式包括:FAT12、
FAT16、FAT32和NTFS,虽然它们在很多方面存在差异(如支持的最大空间、安全性等),但是所有这些文件系统都是在Windows分层的驱动模型下,并且都是基于IRP包的形式进行工作的。IRP[4]包是一种数据结构,它包含描述一个I/O请求的完整信息。IRP包可以从一个I/O系统组件转移到另一个组件。I/O管理器创建代表I/O操作的IRP,将该IRP指针传递给正确的驱动程序,并在I/O操作完成后释放该包。相反,FSD接受IRP,执行IRP
指定的操作,并在操作完成后将IRP传回给I/O管理器,或者是将其传递给另一个驱动程序进一步处理。
FSD的执行文件包括:Ntfs.sys、Fastfat.sys、Udfs.sys、Cdfs.sys和RAW FSD。当系统启动时, FSD向I/O管理器注册,一旦注册成功后,当应用程序或系统开始访问卷时,I/O 管理器就可以调用FSD执行卷(简单卷如C:\,用来管理系统上的分区)的识别。卷识别涉及一个卷引导扇区的检测和文件系统元数据(存储在卷上支持文件系统格式管理的数据)的一致性检测,通常每个支持Windows文件系统格式的第一个扇区被保留作为卷的引导扇区。引导扇区包含足够的信息,使本机FSD既可以识别卷上FSD管理的格式,又可以确定其他
对于用来识别卷上元数据的位置来说必要的元数据。下图显示了本机FSD如何同I/O管理器和存储设备
驱动程序进行交互作用。
图1. 文件系统工作框图
2.2 文件系统过滤驱动设计
应用程序和系统通常以两种方式访问文件:一种是直接通过文件I/O功能实现,而另一种方式是间接地通过读、写映射文件区域的地址空间实现。
以下以打开文件为例,介绍文件系统过滤驱动的工作流程(其它读、写操作类拟):a)应用程序调用API函数CreateFile打开文件,CreateFile调用Ntdll.dll中的内核函数NtCreateFile对应用程序传送的路径形成一个相对根目录的完整路径名(在路径前加上“\??”,如\??\C:\)。
b)NtCreateFile系统服务用ObOpenByName打开文件,文件从对象管理器根目录和路径名的第一部分(“??”)开始解析文件名,并定位至卷设备对象。
c)I/O管理器建立一个IRP_MJ_CREATE类型的IRP包,另外还建立一个文件对象,用于存储已打开文件的名字。然后利用VPB查卷的装配文件系统设备对象,并利用IoCallDriver将IRP传递给文件系统驱动程序。
d)当FSD接收到IRP_MJ_CREATE的IRP时,它查询指定的文件,执行安全确认,如果文件存在并且允许用户以它请求的方式访问文件,FSD就会返回成功的代码。对象管理器在进程的句柄表中为文件对象建立一个句柄,并作为结果返回给CreateFile。如果对象管理器不能创建文件句柄,那么I/O管理器就删除已经建立的文件对象。
下图显示了文件系统操作的组件[1]以及与这些组件相互作用的方式:
图2. 文件系统的交互组件
由上图可知,操作系统对存储数据的访问涉及多个组件的交互,其中关系错综复杂,但是经过仔细分析就会发现:无论有多少系统组件参与到数据的处理过程中来,数据的最终来源都是从物理磁盘中获取,而且数据的最终归宿也是保存在物理磁盘中;另外,由上图可知,真正与物理磁盘交互工作的系统组件就是文件系统驱动,并且其中只有两种类型的IRP包的功能是与物理磁盘读取数据,这两种类型IRP包就是非缓存请求IRP和页面请求IRP。因此我们的过滤驱动只要拦截这两种类型IRP包的工作流程,就可以实现对磁盘数据的安全访问。基本的设计思路就是当遇到以上两种类型的IRP时,在文件系统读取文件数据之后,将数据解密,然后传送给应用程序;并在应用程序保存数据至文件时,将数据加密然后传送给文件系统。
2.3 实现对文件名的加密
利用过滤驱动技术不仅可以快速高效地实现对文件数据的加密存储,而且可以方便地实现对文件名的加密,其实现效果是:当驱动程序加载成功后,用户新建的任何文件,其文件名都将被加密,而一旦用户将驱动程序卸载后,用户看到的文件名都将成为乱码,只有重新加载驱动后,才能显示正确的文件名。
对文件名加密的具体实现过程如下:
1.当用户新建或复制一个新文件的时候,驱动程序将接收一个类型为IRP_CREATE的IRP请求包。在该请求包中,将存放文件名的缓存进行加密。需要注意的是:由于对文件名加密后,文件名中可能存在一些非法字符,如?、*等等,因此必须对加密后的文件名进行DBASE64编码,才能在操作系统下正常使用加密后的文件。
2.当系统需要显示用户目录的时候(包括从命令行方式),驱动程序将接收一个类型为IRP_MJ_DIRECTORY_CONTROL的IRP请求包,在该请求包中,将存放文件名的缓存进行解密。
2.4 实现加密文件与普通文件的区分
如果驱动不对文件的性质(文件是否被加密)进行判断,那么它的默认动作是:从磁盘读取数据时,对所有数据进行解密,然后返回给应用程序;向磁盘保存数据时,对所有数据进行加密,然后传递给磁盘驱动。因此,如果同一目录下既存在加密文件,又存在普通文件时,那么驱动将无法正常工作。解决的办法是,在驱动对数据进行加解密之前,先判断文件性质,如果是普通文件,那么驱动就什么都不做,如果是加密文件,就执行正常的数据加解密操作。
任何程序在使用磁盘文件时,都必须先执行打开操作。因此,我们可以在打开文件时,首先判断文件
的性质,并将结果存储在代表文件对象FILE_OBJECT结构的FsContext 字段中。下图显示了两个文件对象FILE_OBJECT[4]指向同一个磁盘文件的结构。
图3. 文件对象结构图
因为FsContext[1]结构类似于LINUX系统下的inode结构,对于相同的文件,内存中只保存唯一的一份。因此,驱动程序在读、写数据时,首先判断FsContext结构中的标志,然后决定是否需要将文件数据进行加、解密。
3. 结论
通过文件系统的过滤驱动可以安全、简捷地实现对用户文件的透明保护。另外,利用Windows系统驱动的分层结构,我们可以很容易地改变、增加原有系统的功能,因此无论在Windows系统的安全检测[3](如病毒扫描),还是制作第三方的一些虚拟设备,过滤驱动技术得到广泛地使用。
参考文献
[1]. Rajeev Nagar, 《Windows NT File System Internals》, O’REILLY Press
[2]. David Solomon And Mark Russinovich,《Microsoft Windows Internals, Fourth Edition》, Microsoft Press,2000
[3]. SVEN B. SCHREIBER, 《Undocumented Windows 2000 Secrets》,    Addison-Wesley Press, 2001
[4]. Walter Oney, 《Programming Microsoft Windows Driver Model》,
Microsoft Press,1999
Technology of Data Encrypted Based On Windows File
System Filter Driver
Luo Chunshan
Information School Beijing University Of Posts and Telecommunications, Beijing (100876)
Abstract
The traditional method of data encrypt is completed in the user mode of operation, this article will introduce a new method about encrypting user’s file data. This new technology is based on the filter driver of Windows’ file system, which can be transparent and convenient to the users when the in processing of data encrypting.
Keywords: transparent encrypt, file system filter driver
作者简介:骆春山,男,1981年生,浙江省杭州市人,硕士,主要研究方向为网络安全、主机安全。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。