已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件钩子在硬盘加密技术中的应用研究 作 者 :杜孙正 何斌斌 李志垣 何文钺指 导 教 师:刘才兴 肖德琴摘 要:传统的硬盘软加密法一般建立限制用户使用权限或加密单个文件上,本文介绍的是一种基于文件系统的硬盘加密法,它采用了Vxd和文件钩子(FileHook)技术,更具有安全、高效、方便等特点。同时,它可以在多用户共用硬盘阵列时,透明地实现文件安全保密。关键词:硬盘加密;文件系统;Vxd技术;FileHook 引言为了防止用户重要数据、信息被盗,加密硬盘是一种有效的方法。目前,硬盘加密主要分成硬加密和软加密两种。相信硬加密的硬盘保护卡的昂贵的价格无论对个人,还是对企业来说,都难以承受的。软加密法主要有三种类型,一种是对硬盘启动做出限制,包括对硬盘启动设置口令、修改系统引导区和FAT分区表信息等。另一种是在windows下对目录进行认证,从而限制用户对特定目录的文件操作。还有一种是现在流行的对单个文件的加密,即对每个文件读写都要通过验证才能实现。 但这三种方法存在一定缺陷,第一种加密方法是在计算机启动过程中(尚未进入系统)进行,并没对数据本身进行加密,缺乏较高的安全性。第二种加密方法虽然比较方便,但是它只是一个依赖于操作系统的权限审查机制,并没有对数据区进行加密,窃密者完全可以通过其它途径访问到数据区的数据。第三种加密方法的加密对象只是针对某个文件或文件夹,每次对文件操作都需要用户手工进行加解密,操作上和管理上不方便。并且当文件被解密后,会把明文数据写回硬盘,从而带来安全隐患。如何实现加密的全封闭性和透明性,并且让多用户共用一个硬盘阵列时,安全、方便地实现个人大量文件的加密保护,是一个很有价值的科研课题。 针对以上问题,本文提出了一种利用可安装文件系统钩挂程序实现的硬盘加密方案。它通过对文件数据区的加密,并且利用了VxD和文件钩子技术,能很好的解决传统硬盘加密法的缺陷。从而可实现加密的全封闭性和透明性,让多用户安全、方便地共用一个硬盘阵列。1、技术背景 本加密方案利用了VxD技术所提供的服务,这些服务运行在系统的0层。我们写一个Installable File System Hook(IFSH,可安装文件系统挂钩程序)加载在系统中来实现我们的加密方案。下面对这两个重要概念分别作个介绍。11 VxD技术简介VxD,意即虚拟设备驱动程序(Virtual Something Driver),这里的x就是指Something。比如说键盘驱动程序VKD、鼠标驱动程序VMD等。VxD是管理例如硬件设备或者已安装软件等系统资源的32位可执行程序,使得几个应用程序可以同时使用这些资源。Windows通过使用VxD允许基于Windows的应用程序实现多任务。VxD在与Windows的连接工作中处理中断,并在不影响其它应用程序的执行的情况下为特定的应用程序执行I/O操作。虽说Vxd是“虚拟设备驱动程序”的缩写形式,但是Vxd的功能远不止“虚拟”某个硬件设备,某些Vxd确实是做虚拟设备之用,而有些Vxd虽说是充当驱动程序,却并不虚拟任何设备,还有些Vxd并不和硬件设备大交道,它们只是给别的Vxd或应用程序提供服务,也就是说VxD可以包含必须在相应设备上执行的设备相关代码,也可以依靠其它软件去执行这些对设备的操作。现在我们要探讨的FSD(File Systems Driver)是一个虚拟设备驱动程序,它为于驱动体系的最顶层,提供文件访问的服务,同时它有要得到底层的Disk Driver的服务支持【1】。在Windows 9X中,随着线程与局部化概念的引入,想控制系统的全部资源变得愈来愈困难。举个简单的例子,由于32位的Windows应用程序拥有独立的加密的全封闭性定义为在加密系统中,加密的存储区域在任何时候都是密文,但合法用户又可正常、方便地使用。加密的透明性定义为合法用户登陆加密系统后,就可以像访问其它非加密文件一样方便地访问此用户的加密文件,对此用户的加密文件的访问在操作上跟没加密是一样的。4GB线性地址空间,在Windows 3.1下常用的Windows应用程序之间通信及共享变量的方法不再完全适用了,想做些“出格”的事,比如说截获别的应用程序的消息,变得愈发困难了。这时若采用VxD技术或许会令我们“豁然开朗”既然操作系统能控制全部资源,那么与操作系统享有同样最高权限的VxD(或者干脆说作为操作系统一部分的VxD)也一定能够帮助您完成“出格行为”。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)可安装文件系统钩挂程序简称文件钩子,是一个运行在系统特权级的一个文件服务程序,可以用它来实现一些文件访问的特别需要。当有文件服务请求时,它可以赶在系统操作进行实际操作前取得访问控制权,从而可以对文件的访问请求进行一些特别的操作。CIH是我们熟悉的一个文件型病毒,它利用了VxD技术,通过Windows 9x系统的“漏洞”,使用INT 3中断门直接从应用级(RING3)跳转到核心级(RING0),从而可以完全控制系统。在核心级,CIH使用了系统VxD提供的系统服务函数分配内存,钩挂文件钩子等。每当系统进行文件操作时,可以先于系统对文件的操作获得控制权,对可执行文件进行感染。现在大多数的病毒都是采用了文件钩子技术,而现在大部分的杀毒软件号称的虚拟机技术就是基于IFS(可安装文件系统)的文件系统操作技术。不同的是它们是在文件操作之前检查一下特征码,看有没有感染病毒,而我们所要作的是监控文件的访问操作和加解密。2、设计原理本加密方案是通过在Windows标准文件服务程序上加载一个可安装文件系统钩挂程序来实现的。在这里,我们先介绍Windows 文件驱动模式。21 Windows文件驱动模式Windows采用一个分层驱动模式来处理I/O请求。这一模式主要通过I/O管理器来实现,它由设备、中间层和文件系统驱动组成。I/O管理器提供一个给用户在保护模式下实现I/O操作(以应用程序为代表)的系统服务。这些系统服务包括:信息配置管理、内存管理和对象管理。中间层为设定所要处理设备的特征,它依赖于可以访问物理设备的驱动系统。文件系统驱动提供给用户存储信息和从磁盘中搜索信息。应用程序发送给文件驱动程序的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管理器把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请求包的参数,对属于登陆用户的加密区域的IRP请求包中数据缓冲区的指针指向的内存区进行加解密操作,对不属于登陆用户的加密区域的IRP请求包进行拦截,对非加密区域的IRP请求包则不做任何处理,这样对合法的登陆用户来说,他所面对的信息都是明文,而实际上在硬盘上存放的数据却是密文。这样就实现硬盘加密的全封闭性和透明性。下面是合法用户登陆后访问属于他的加密文件的示意图: 用户 文件访问请求 (明文)文件钩子服务(密、明文转换) (密文) 硬盘 22引入钩子基于Windows这样的文件处理机制,我们考虑利用文件钩子技术来实现硬盘加密。我们通过编写一个Installable File System Hook(IFSH,可安装文件系统挂钩程序)加载在系统中,即在文件服务驱动器(File System Driver)上添加文件钩子服务(FileHook Service),然后在其中监控系统的文件操作。当文件钩子服务监控到系统正在请求你所要监控的I/O操作时,把它拦截下来,对数据缓冲区中的内容进行相应的加解密处理。如图:1-2图1-2添加文件钩子3、加密系统设计31 概要设计在我们的加密方案中,采用局部加密,利用文件钩子对数据区进行处理,把密钥存放在密钥盘中,密钥盘可以是软盘或优盘等,本文以软盘为例。31. 1 加密对象的设计我们对数据区(某个逻辑盘的)进行加密。安装了本加密系统后,要加密的数据始终以密文(Encrypt)的形式存放在硬盘的加密区域中,只有用相应的密钥盘(Key Disk)和密码登陆后,才让文件钩子的解密模块钩挂属于登陆用户的加密区域的文件,从而让登陆用户可以正常地访问自己的加密文件。登陆用户在访问属于他的加密区域的加密文件时,并不把解密后的明文写到硬盘上,而是先读出一块密文数据到缓冲区后,再直接对数据缓冲区进行解密,最后把缓冲区返回给应用程序,从而登陆用户使用的是明文(但实际上硬盘上存放的是密文);在写文件时,先把数据缓冲区的数据加密后在写到硬盘上,再把数据缓冲区恢复成明文。并且用户在不属于他的加密区域不能解密、改写、删除、重命名文件和建新文件。就算用户硬盘丢失、被盗,装在其他计算机中,理论上不能访问到被加密了信息(只可以通过破解加密算法,但现在我们侧重的是加密方案的设计,加密算法的问题另行讨论)。从而,使该加密方案具有很高的安全性。另外,本方案对用户来说,并没有加密整个硬盘(至少系统盘不加密),而是某些逻辑盘(即局部性加密)。这是因为出于效率和资源方面考虑,我们对这两种方法比较如图:局部硬盘加密全硬盘加密对机器性能的影响因为是有选择的加/解密,因此对机器的整体性能影响不大对整个硬盘输入/输出的数据都要进行相应的加/解密操作,因此对机器的整体性能影响非常大扩 展以后甚至可以加上指纹锁、IC卡、开机U盘等工具辅助综合评价综合对机器性能的影响等方面来看,是比较合适的因为对整个硬盘加密,其中有很多无用的数据,比如操作系统的系统文件等等,因此这种方法不太可取31. 2 密钥存放方式的设计考虑到密钥存放在硬盘中并不安全,窃密者就会把破解的焦点放在破解密钥信息上,密钥受到攻击可能性很大。因此我们把用户口令作为第一个密钥,把经过处理的用户口令产生一些信息流存放在密钥盘(如软盘)中,作为第二个密钥。只有两个密钥同时使用,才能对已加密的逻辑盘解密,窃密者只有在得到密码和密钥盘的情况下才能窃取加密逻辑盘的秘密。因此,硬盘保密的安全强度得到了保证。同时,采用密钥盘存放密钥有另外一很大优点:可以让多个用户在共用一个大硬盘阵列时实现个人数据保密。在某些场合下,往往会多用户共享一个硬盘阵列。这样,本硬盘加密方案在个人资料的保密上发挥了比较大的优势。我们可以给不同用户分配不同的加密区域和相应的密钥,让各个用户用自己的密钥访问自己的加密区域,而不能访问其他用户的加密区域。这就相当于不同用户用自己的钥匙去开自己的保险箱,却不能开别人的保险箱,从而实现个人资料的保护。31. 3 文件钩子的功能设计文件钩子是本加密方案的核心部分,它能接收用户的登陆信息,然后根据登陆信息对特定的文件请求进行相应的操作。下面是文件钩子程序的主要功能:1. 获取登陆信息当用户登陆时,就接收本加密系统的应用程序传近来的登陆信息。2. 拦截非法的文件操作 当在文件系统服务之上架子了我们的可安装文件系统钩挂程序之后,系统便可以根据登陆用户对文件的操作进行监控。如果用户非法进入不属于他的保护区域(此时用户是进行非法的文件访问),就拦截改写、删除、重命名和新建文件的操作(无必要拦截读操作,因为数据是密文)。 3. 加、解密数据缓冲区文件钩子根据用户的登陆状态,完成分析IRP请求包的参数,对符合条件的IRP请求包中数据缓冲区的指针指向的内存区进行加解密操作的任务。 3、2 详细设计本系统按功能来划分为两个相对独立模块:应用程序模块和VxD模块。模块通信经过接口来完成,模块间调用如图:应用程序模块 用户 输入密码 用 户 界 面 用户登陆验证处理密钥盘信息读取密钥盘信息 消息通讯VXD模块获取登陆信息VXD调度加/解密数据缓冲区拦截非法的文件操作32. 1 应用程序模块应用程序模块主要完成接收用户信息(加密的逻辑盘列表、用户口令)和传递给VxD模块对逻辑盘上文件操作的命令。应用程序分为两个模块:验证模块和通信模块。验证模块完成读取密钥盘信息并验证用户的登陆的任务;通信模块完成和VxD模块通信的任务。验证模块的流程图为:读取密钥盘信息 处理密钥盘信息 用户登陆验证 通信模块把登陆用户的验证信息传到VxD。先调用CreateFile获得设备句柄,获得设备句柄后,再调用DeviceIoControl把验证的结果和信息传到VxD。传信息的主要代码为:if(!DeviceIoControl(hDevice, GetKeyDiskMsg, (void *)&keydiskMsg, sizeof(KeyDiskMsg), NULL, NULL, &w, NULL)MessageBox(发送GetKeyDiskMsg消息失败!, 消息发送失败, MB_OK | MB_ICONWARNING);CLoginDlg:OnOK();return;GetKeyDiskMsg为命令代码,keydiskMsg为验证模块处理后的验证信息包,hDevice为虚拟设备句柄。32. 2 VxD模块Windows 9x支持两种静态和动态加载VxD方法。静态加载的VxD在Windows初始化的时候加载的,一直到Windows结束运行才被卸载。动态加载的VxD不是在Windows初始化的时候自动加载,而是由某个应用程序或别的VxD来进行加载的。本加密方案采用静态加载Myfhook.vxd。它是整个系统的核心,它将处理应用程序模块传递过来的信息,从而作出相应的服务。在VxD里,有一个专门和应用程序通信的模块,完成处理验证信息的任务。其核心代码为:DWORD MyfhookDevice:OnW32DeviceIoControl(PIOCTLPARAMS p) switch (p-dioc_IOCtlCode) case DIOC_OPEN:;break;/创建设备句柄 case DIOC_CLOSEHANDLE: ;break;/关闭设备句柄 case GetKeyDiskMsg: memcpy(&keydiskMsg,p-dioc_InBuf,sizeof(KeyDiskMsg); if(FALSE=Myencrypt.GetCode(keydiskMsg.Code_Buf,keydiskMsg.Code_Length) /如果获取密码失败,就通知应用程序进行出错处理。(应用程 /序传进来的密码长度不能为0!*p-dioc_bytesret=CodeLengErr;KeyDiskExist = FALSE; /文件钩子处于验证错误状态。return 0;Mydealprctmsg.GetMsg(keydiskMsg.DiskprctMsg);Mydealprctmsg.AddDevice();return 0; case: return 0; 文件钩子完成根据验证信息来处理文件服务请求的任务。其伪代码如下:操作系统启动则静态加载VxD; /在文件服务上钩挂文件钩子若要访问的盘不在全局保护列表则调用并返回标准文件服务;若合法用户登录并访问自己的保密区域 /用钥匙开自己的保险箱 则调用加、解密服务使得对文件操作正常; /对文件解密读、加密写、删除等/操作否则 /非法用户登录或登陆用户访问不属于他的保密区域调用保护服务; /防写、删除、重命名和新建文件等操作下面是VxD中的文件钩子的主要代码:int _cdecl MyIfsHook(pIFSFunc pfn, int fn, int Drive, int ResType,int CodePage, pioreq pir)/自定义钩子函数if(Mydealprctmsg.IsPrctDrive(Drive)=FALSE)/不是加密盘就调用标准的文件服务return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);origir = (pioreq) &origifsr; memcpy( &origifsr, pir, sizeof( ifsreq );if(KeyDiskExist=TRUE&Mydealprctmsg.IsUserDrive(Drive)=TRUE) /插入了密钥盘,是合法用户,并且是此用户拥有的保护盘,就调用加解密服务switch(fn)case IFSFN_READ: /解密数据缓冲区的数据case IFSFN_WRITE: /先加密数据缓冲区的数据,然后调用文件服务进行写, /最后恢复缓冲区的数据(也就是解密)。default:/ifelse /验证不通过,或不是自己的保护盘,调用保护服务switch(fn)case IFSFN_WRITE:case IFSFN_RENAME:case IFSFN_DELETE:return 0; /拦截写、重命名和删除操作case IFSFN_FILEATTRIB: if(origir-ir_flags=GET_ATTRIBUTES) /非法用户想建新文件return 0; /拦截建新文件的操作else return (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);default:/elsereturn (*PrevHook)(pfn, fn, Drive, ResType, CodePage, pir);4、应用分析41 应用价值利用可安装文件系统钩挂程序设计的加密系统有如下三大优点:加密的全封闭性和加密的透明性,以及多用户共用一个硬盘阵列时安全、方便的加密保护。因为文件钩子技术的引入,让加密操作嵌入操作系统的内部,整个加解密的操作都是由底层的文件钩子完成,用户登陆后就无须再为加解密的操作而操心,从而实现了加密的透明性;利用文件钩子对内存缓冲区的数据进行加解密,无须把明文数据写进硬盘,加密区域存放的数据任何时候都是密文,从而实现了加密的封闭性。这样,就大大增强了加密系统的安全性和易用性。登陆后,合法用户就可以像访问非加密文件一样方便的访问自己的加密文件,这给了用户带来很大的方便。该方案还有一个很大的优点就是可以实现多用户共用一个硬盘阵列时的加密保护。在某些情况下,会出现多个用户共用一个硬盘阵列的情况,那就需要对个人的重要资料进行保密。目前操作系统在这方面只提供了在文件中设置访问权限,在用户提出访问请求时调用安全监视服务判断该用户保护子系统是否有访问此文件的权限,如果有访问权限就继续处理此访问请求,如果没有访问权就停止处理此请求。但是这只是一个依赖于操作系统的权限审查机制,并没有对数据区进行加密,窃密者完全可以通过其它途径访问到数据区的数据。也就是说,操作系统本身提供的多用户环境下的保密方案只适宜用在保密要求比较底的场合。要实现高强度的保密,就要对数据去进行加密。本加密就是对数据区进行加密。在多用户共用一个硬盘阵列时,可以让各个用户选定自己的加密区域,设置好不同的密钥,制做好对应的密钥盘,就可以实现个人资料在多用户状态下的加密保护。它的加密强度取决于加密算法。各用户只能用自己的密钥去打开自己的加密区域,而不能打开其它用户的加密区域。42 局限性采用本加密系统的思想设计出的加密软件在安装和修改密码的时候要进行数据转换,把数据转换成要用相应的密钥才能解密密文数据。如果你的加密区域的数据量比较大(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中地理八年级下册《第一节 东南亚》《第二节 中东》《第三节 欧洲西部》等(同步训练)
- 产后抑郁的艺术治疗实践案例
- 冬季防冻保温方案(26篇)
- 交叉设计在生物等效性试验的效应量评估
- 交互式模拟在医疗差错风险预警中的应用实践
- 专科生毕业设计论文模板
- 初一新生家长会发言稿(9篇)
- 初中学生综合素质评价方案
- 初二浮力练习题及答案
- 安徽传统民歌在高校视唱练耳教学中的应用与传承
- 酒店财务部月工作总结
- 安装水表施工方案
- 汽车销售员客户跟进技巧培训材料
- 太阳能光伏安装规定
- 2025年互联网数据服务行业研究报告及未来行业发展趋势预测
- 2025年百保盾保安证考试试题及答案
- 2025年四川省拟任县处级领导干部任职资格试题及参考答案
- 车间计件工资管理办法
- 2025年采购专员考试试题及答案
- 国防军犬教学课件
- 问题解决策略:逐步确定 课件 北师大版数学八年级上册
评论
0/150
提交评论