《课题研究-文件钩子在硬盘加密技术中的应用研究》由会员分享,可在线阅读,更多相关《课题研究-文件钩子在硬盘加密技术中的应用研究(11页珍藏版)》请在金锄头文库上搜索。
1、文件钩子在硬盘加密技术中的应用研究 173摘 要:传统的硬盘软加密法一般建立限制用户使用权限或加密单个文件上,本文介绍的是一种基于文件系统的硬盘加密法,它采用了Vxd和文件钩子(FileHook)技术,更具有安全、高效、方便等特点。同时,它可以在多用户共用硬盘阵列时,透明地实现文件安全保密。关键词:硬盘加密;文件系统;Vxd技术;FileHook 引言为了防止用户重要数据、信息被盗,加密硬盘是一种有效的方法。目前,硬盘加密主要分成硬加密和软加密两种。相信硬加密的硬盘保护卡的昂贵的价格无论对个人,还是对企业来说,都难以承受的。软加密法主要有三种类型,一种是对硬盘启动做出限制,包括对硬盘启动设置口
2、令、修改系统引导区和FAT分区表信息等。另一种是在windows下对目录进行认证,从而限制用户对特定目录的文件操作。还有一种是现在流行的对单个文件的加密,即对每个文件读写都要通过验证才能实现。 但这三种方法存在一定缺陷,第一种加密方法是在计算机启动过程中(尚未进入系统)进行,并没对数据本身进行加密,缺乏较高的安全性。第二种加密方法虽然比较方便,但是它只是一个依赖于操作系统的权限审查机制,并没有对数据区进行加密,窃密者完全可以通过其它途径访问到数据区的数据。第三种加密方法的加密对象只是针对某个文件或文件夹,每次对文件操作都需要用户手工进行加解密,操作上和管理上不方便。并且当文件被解密后,会把明文
3、数据写回硬盘,从而带来安全隐患。如何实现加密的全封闭性和透明性,并且让多用户共用一个硬盘阵列时,安全、方便地实现个人大量文件的加密保护,是一个很有价值的科研课题。 针对以上问题,本文提出了一种利用可安装文件系统钩挂程序实现的硬盘加密方案。它通过对文件数据区的加密,并且利用了VxD和文件钩子技术,能很好的解决传统硬盘加密法的缺陷。从而可实现加密的全封闭性和透明性,让多用户安全、方便地共用一个硬盘阵列。1、技术背景 本加密方案利用了VxD技术所提供的服务,这些服务运行在系统的0层。我们写一个Installable File System Hook(IFSH,可安装文件系统挂钩程序)加载在系统中来实
4、现我们的加密方案。下面对这两个重要概念分别作个介绍。11 VxD技术简介VxD,意即虚拟设备驱动程序(Virtual Something Driver),这里的x就是指Something。比如说键盘驱动程序VKD、鼠标驱动程序VMD等。VxD是管理例如硬件设备或者已安装软件等系统资源的32位可执行程序,使得几个应用程序可以同时使用这些资源。Windows通过使用VxD允许基于Windows的应用程序实现多任务。VxD在与Windows的连接工作中处理中断,并在不影响其它应用程序的执行的情况下为特定的应用程序执行I/O操作。虽说Vxd是“虚拟设备驱动程序”的缩写形式,但是Vxd的功能远不止“虚拟
5、”某个硬件设备,某些Vxd确实是做虚拟设备之用,而有些Vxd虽说是充当驱动程序,却并不虚拟任何设备,还有些Vxd并不和硬件设备大交道,它们只是给别的Vxd或应用程序提供服务,也就是说VxD可以包含必须在相应设备上执行的设备相关代码,也可以依靠其它软件去执行这些对设备的操作。现在我们要探讨的FSD(File Systems Driver)是一个虚拟设备驱动程序,它为于驱动体系的最顶层,提供文件访问的服务,同时它有要得到底层的Disk Driver的服务支持【1】。在Windows 9X中,随着线程与局部化概念的引入,想控制系统的全部资源变得愈来愈困难。举个简单的例子,由于32位的Windows应
6、用程序拥有独立的加密的全封闭性定义为在加密系统中,加密的存储区域在任何时候都是密文,但合法用户又可正常、方便地使用。加密的透明性定义为合法用户登陆加密系统后,就可以像访问其它非加密文件一样方便地访问此用户的加密文件,对此用户的加密文件的访问在操作上跟没加密是一样的。4GB线性地址空间,在Windows 3.1下常用的Windows应用程序之间通信及共享变量的方法不再完全适用了,想做些“出格”的事,比如说截获别的应用程序的消息,变得愈发困难了。这时若采用VxD技术或许会令我们“豁然开朗”既然操作系统能控制全部资源,那么与操作系统享有同样最高权限的VxD(或者干脆说作为操作系统一部分的VxD)也一
7、定能够帮助您完成“出格行为”。VxD之所以有如此强大的功能最根本的原因,是由于VxD运行在系统的Ring 0级,而用SDK(或现在大家熟知的VC、BC、Borl and C Builder、VB、Delphi)开发出的应用程序运行在Ring 3级。在80x86保护模式下,运行在Ring 0级的VxD拥有系统最高权限(操作系统也运行在Ring 0级)。2 可安装文件系统钩挂程序(Installable File System Hook)可安装文件系统钩挂程序简称文件钩子,是一个运行在系统特权级的一个文件服务程序,可以用它来实现一些文件访问的特别需要。当有文件服务请求时,它可以赶在系统操作进行实际
8、操作前取得访问控制权,从而可以对文件的访问请求进行一些特别的操作。CIH是我们熟悉的一个文件型病毒,它利用了VxD技术,通过Windows 9x系统的“漏洞”,使用INT 3中断门直接从应用级(RING3)跳转到核心级(RING0),从而可以完全控制系统。在核心级,CIH使用了系统VxD提供的系统服务函数分配内存,钩挂文件钩子等。每当系统进行文件操作时,可以先于系统对文件的操作获得控制权,对可执行文件进行感染。现在大多数的病毒都是采用了文件钩子技术,而现在大部分的杀毒软件号称的虚拟机技术就是基于IFS(可安装文件系统)的文件系统操作技术。不同的是它们是在文件操作之前检查一下特征码,看有没有感染
9、病毒,而我们所要作的是监控文件的访问操作和加解密。2、设计原理本加密方案是通过在Windows标准文件服务程序上加载一个可安装文件系统钩挂程序来实现的。在这里,我们先介绍Windows 文件驱动模式。21 Windows文件驱动模式Windows采用一个分层驱动模式来处理I/O请求。这一模式主要通过I/O管理器来实现,它由设备、中间层和文件系统驱动组成。I/O管理器提供一个给用户在保护模式下实现I/O操作(以应用程序为代表)的系统服务。这些系统服务包括:信息配置管理、内存管理和对象管理。中间层为设定所要处理设备的特征,它依赖于可以访问物理设备的驱动系统。文件系统驱动提供给用户存储信息和从磁盘中
10、搜索信息。应用程序发送给文件驱动程序的I/O请求都以I/O请求包(IRPS)的形式发送的,文件系统通过接收请求完成打开、建立、读、写和关闭文件的操作。其工作原理如图1-1:图1-1Windows文件驱动模式【2】举个例子说明一下IRP的派发过程及内核I/O管理器的功能:当应用程序请求打开某个文件,会有以下过程:【3】1 保护子系统调用I/O管理器提供的服务来打开一个命名文件;2 I/O管理器调用对象管理服务查出所要操作的文件的符号连接名(SymbolicLink);3 I/O管理器对文件进行定位。如果成功,继续处理这个请求;4 I/O管理器为这个打开请求创建I/O请求包(IRP);5 I/O管
11、理器把IRP传递给文件系统驱动程序。文件系统驱动程序通过收到的IRP中任务信息,确定应完成什么操作。首先调用FAST I/O例程确定数据是否已被缓存。如果没有为下一层的驱动程序设置IRP信息(对于每层驱动程序,IRP中都有一个数据域相对应I/O stack location,用来保存相关的任务参数);6 驱动程序根据IRP执行I/O操作,将执行结果填入IRP;7 驱动程序将IRP返回给I/O管理器;I/O管理器从IRP得知I/O状态,然后通过保护子系统返回状态信息给原始调用者。8 I/O管理器释放完成的IRP。 从上述文件访问的步骤可以看出:如果在第5步的操作中引入文件钩子,分析IRP请求包的
12、参数,对属于登陆用户的加密区域的IRP请求包中数据缓冲区的指针指向的内存区进行加解密操作,对不属于登陆用户的加密区域的IRP请求包进行拦截,对非加密区域的IRP请求包则不做任何处理,这样对合法的登陆用户来说,他所面对的信息都是明文,而实际上在硬盘上存放的数据却是密文。这样就实现硬盘加密的全封闭性和透明性。下面是合法用户登陆后访问属于他的加密文件的示意图: 用户 文件访问请求 (明文)文件钩子服务(密、明文转换) (密文) 硬盘 22引入钩子基于Windows这样的文件处理机制,我们考虑利用文件钩子技术来实现硬盘加密。我们通过编写一个Installable File System Hook(IF
13、SH,可安装文件系统挂钩程序)加载在系统中,即在文件服务驱动器(File System Driver)上添加文件钩子服务(FileHook Service),然后在其中监控系统的文件操作。当文件钩子服务监控到系统正在请求你所要监控的I/O操作时,把它拦截下来,对数据缓冲区中的内容进行相应的加解密处理。如图:1-2图1-2添加文件钩子3、加密系统设计31 概要设计在我们的加密方案中,采用局部加密,利用文件钩子对数据区进行处理,把密钥存放在密钥盘中,密钥盘可以是软盘或优盘等,本文以软盘为例。31. 1 加密对象的设计我们对数据区(某个逻辑盘的)进行加密。安装了本加密系统后,要加密的数据始终以密文(
14、Encrypt)的形式存放在硬盘的加密区域中,只有用相应的密钥盘(Key Disk)和密码登陆后,才让文件钩子的解密模块钩挂属于登陆用户的加密区域的文件,从而让登陆用户可以正常地访问自己的加密文件。登陆用户在访问属于他的加密区域的加密文件时,并不把解密后的明文写到硬盘上,而是先读出一块密文数据到缓冲区后,再直接对数据缓冲区进行解密,最后把缓冲区返回给应用程序,从而登陆用户使用的是明文(但实际上硬盘上存放的是密文);在写文件时,先把数据缓冲区的数据加密后在写到硬盘上,再把数据缓冲区恢复成明文。并且用户在不属于他的加密区域不能解密、改写、删除、重命名文件和建新文件。就算用户硬盘丢失、被盗,装在其他
15、计算机中,理论上不能访问到被加密了信息(只可以通过破解加密算法,但现在我们侧重的是加密方案的设计,加密算法的问题另行讨论)。从而,使该加密方案具有很高的安全性。另外,本方案对用户来说,并没有加密整个硬盘(至少系统盘不加密),而是某些逻辑盘(即局部性加密)。这是因为出于效率和资源方面考虑,我们对这两种方法比较如图:局部硬盘加密全硬盘加密对机器性能的影响因为是有选择的加/解密,因此对机器的整体性能影响不大对整个硬盘输入/输出的数据都要进行相应的加/解密操作,因此对机器的整体性能影响非常大扩 展以后甚至可以加上指纹锁、IC卡、开机U盘等工具辅助综合评价综合对机器性能的影响等方面来看,是比较合适的因为对整个硬盘加密,其中有很多无用的数据,比如操作系统的系统文件等等,因此这种方法不太可取31. 2 密钥存放方式的设计考虑到密钥存放在硬盘中并不安全,窃密者就会把破解的焦点放在破解密钥信息上,密钥受到攻击可能性很大。因此我们把用户口令作为第一个密钥,把经过处理的用户口令产生一些信息流存放在密钥盘(如软