- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[windows文件过滤方案设计与实现原理
windows文件过滤方案设计与实现原理
Windows文件系统简介
Windows文件系统是Windows中非常复杂的一部分,微软设计了诸多机制来提高文件系统的效率,因此,文件过滤驱动是Windows驱动开发最复杂的部分,完全不同于普通的系统设备驱动开发,在设计文件过滤系统时将要面对非常复杂的问题。
首先,Windows有着复杂的内存映射机制。它将一个文件映射到某个内存空间,需要访问这个文件内容的基础只需要访问这个内存空间即可,然而进程对内存的访问无法被文件过滤驱动捕获。其次,当我们打开Explore浏览文件时,Explorer就已经将文件读到文件缓冲中了,office一类的应用程序通过内存映射的方式来打开word、excel等文件。
文件的内容是通过缺页中断来从硬盘复制到进程空间里的。这是,被内存映射的文件实际上成了一个分页交换文件。一旦进程访问到实际上不存在的内存页(还在硬盘式),就会有一个文件上的页面被交换到内存。在交换发生时,有一个有特殊标记(irp-Flags带有IRP_PAGING_IO、IRP_SYNCHRONOUS_PAGING_IO或IRP_NOCACHE)的IRP_MJ_READ请求发送到文件驱动,这种读/写请求被称为分页读/写请求。
所幸分页读写请求时文件过滤驱动可以捕获的。我们可以在捕获这个请求后,对于读/写的信息进行加解密操作。
Windows具有巧妙的文件缓冲机制,只要一个文件被以缓冲方式打开过,则其内容用的全部或者一部分就已经保持在内存里了。这个部分信息称为文件缓冲,文件缓冲这是全局的。一般的说,一个文件无论有多少个进程在访问,都只有一份文件缓冲。
图1 Windows文件读写请求
Sfilter文件过滤可以过滤到全部这4种IRP,但是无法过滤内存访问。但是一般的应用程序读/写文件,都有以上4种IRP存在[12]。
对于一个机密进程而言:以下是确信无疑的:
真实硬盘上的文件内容必须是密文。这是防止信息泄密的要求所致。
应用程序看到的文件内容必须是明文。如果不是明文,应用程序自然就无
法正常编辑文件,而对于一个普通进程而言:普通进程看到的文件内容必须是密文。
本作品采取文件缓冲为明文,这样只需处理分页读/写请求就可以了。而分页读/写请求是无论是否使用内存映射文件都存在的,这样就能合并处理两种情况(使用内存映射文件或是不使用)。
当有普通进程打开一个文件时,文件缓冲为密文,并且不允许机密进程打
开这个文件。
当有机密进程打开一个文件时,文件缓冲为明文,并且不允许普通进程打
开这个文件
二者切换时,中间清除文件缓冲。
其中清除文件缓冲的代码参考了Windows的FastFat代码。在FastFat中,如果文件被删除,就会用到清除缓冲的操作。
文件过滤驱动简介
文件系统过滤驱动属于基于系统内核加密模式的实现方式。过滤驱动工作在文件系统驱动层和应用层之间,截获传输的请求并进行相应的加解密处理[13]。文件系统过滤驱动作为一种内核态中间层驱动,只需对下层的文件系统驱动作相应的功能扩展,加密粒度灵活,可靠性强,效率高,易于扩充。
Windows内核操作系统的驱动模型采用分层结构,如图3.2所示:
图3.2 WDM设备对象和驱动程序的层次结构
图3.2中左边是一个设备对象栈,设备对象是操作系统为帮助软件管理硬件而创建的数据结构。每个硬件至少包含一个物理设备对象(PDO) 和功能设备对象(FDO),它们中间会存在一些过滤设备对象(FiDO)。驱动程序对象包含了一组处理I/O请求的例程。分层结构使I/O的请求过程更加清晰,影响到设备的每个操作使用I/O请求包(IRP,I/O Request Packag),每个I/O 请求均由I/O 管理器发出,并且依次从相应设备栈的顶端向下传递。每一层对应的驱动程序对象都可以调用相应的例程来处理IRP 包。
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,它负责为用户建立、存入、读出、修改、转储文件,控制文件的存取与撤销。文件系统响应I/O请求的控制流程如图3.3所示:
图3.3 文件系统控制流程图
上图中I/O请求由应用程序发出,经过 WIN32 子系统后送给I/O管理器,I/O管理器根据应用层的需要向文件系统发出I/O请求包,即IRP包。文件系统驱动程序对象收到IRP包后首先判断是否为 Fast I/O 请求,如果是,则交给 Fast Dispatch 例程处理,数据从缓存中得到并送给 I/O 管理器;如果不是,则由Dispatch 例程来处理IR P 包,数据会由磁盘驱动程序从磁盘分区中得到,然后也被送到I/O 管理器[14]。数据经过 WIN32 子系统的处理最终返回给应用程序。
上述是不存在过滤驱动的文件系统控制流程。如果存在过滤驱动
文档评论(0)