Windows文件系统过滤驱动开发教程(第二版)
文件系统过滤驱动

1 引言文件系统过滤概述文件安全性问题已成为当今信息科学领域最重要的课题之一。
目前,解决这个问题的主要技术手段有两种:一是利用应用层HOOK(钩子)技术,对Windows 提供的文件操作函数(API)及由文件操作所触发的Windows消息进行HOOK,经过适当的处理达到预期目的,缺点是效率低、稳定性和一致性差,不适合于大型系统的开发;另一种是开发文件过滤驱动程序,文件过滤驱动作为一种内核态中间层驱动,不需要改变下层驱动或用户程序而增加新的功能,具有效率高、可靠性强、可扩充等特点,成为现阶段信息安全技术研究的热点。
1.1 文件过滤驱动在信息安全领域的应用1 文件加/解密文件过滤驱动程序可以实现对指定文件、目录,甚至整个逻辑盘的加/解密功能。
当文件在写入磁盘的过程中,截获所有对该文件的IRP_MJ_WRITE,在其分发例程中对IRP携带的数据进行加密处理后写入磁盘;文件被从磁盘读取的过程中,截获所有对该文件的IRP_MJ_READ,在其分发例程中对IRP携带的数据进行解密处理后向上层返回。
加密后的文件在磁盘中以密文形式存储,保证了数据存储的安全性。
2 病毒防护应用程序在创建一个新文件或打开一个已存在文件时,文件系统过滤驱动程序截获IRP_MJ_create,判断被打开文件是否存在和病毒特征代码库相匹配的特征,若存在,说明文件感染了病毒,失败掉该IRP,拒绝打开;否则,使IRP继续向下传递,完成正常的打开操作。
3 进程控制为了防止恶意进程的破坏,有时需要规定只允许某些经过安全验证的特定进程对受保护的文件进行访问,其他不在规则范围内的进程不允许访问。
我们可以通过系统提供的PsGetCurrentProcessId、PsGetCurrentThreadId等API函数得到发起I/O请求的进程及线程的相关信息,如:获得发起进程名称,与安全访问规则(进程白名单)中的可信进程相比较,若该进程位于规则中,说明信任其行为是安全的,允许访问受保护文件;否则,拒绝访问。
Windows文件系统过滤驱动开发教程(第二版)

-1. 改版序
大约两年以前我在驱动开发网上发表了一组描述如何开发 Windows 文件系统过滤驱动的文章。非常庆幸这些文章能 给大家带来帮助。
原本的文章中我使用了自己编写的代码。我不打算在这里论述代码风格的优劣并发起一场辩论,无可怀疑的是,读者们 大多喜欢看到类似微软范例的代码。为此我把文章中的代码换成微软标准的文件过滤驱动范例 sfilter 的代码。赠于喜欢此 书的读者和驱动开发的后来者们。
windows文件系统过滤驱动开发教程第二版
Windows 文件系统过滤驱动开发教程 (第二版)
楚狂人-2007-上海 (MSN:walled_river@)
-1. 改版序 ...................................................................................................................................................................................... 2 0. 作者,楚狂人自述.................................................................................................................................................................... 2 1. 概述,钻研目的和准备............................................................................................................................................................ 2 2 . hello world,驱动对象与设备对象............................................................................................................................................ 4 3 .分发例程,fast io.......................................................................................................................................................................... 6 3.5 附:陆麟关于 fastio 的简述.................................................................................................................................................... 9 4.设备栈,过滤,文件系统的感知.................................................................................................................................................. 10 5.绑定 FS CDO,文件系统识别器,设备扩展 ........................................................................................................................... 13 6.IRP 的传递,File System Control Dispatch .......................................................................................................................... 16 7.准备绑定卷,IRP 完成函数,中断级 ....................................................................................................................................... 18 8.绑定卷的完成............................................................................................................................................................................ 21 9 读写操作的捕获与分析............................................................................................................................................................ 26 10.读请求的完成.......................................................................................................................................................................... 28 11.文件和目录的生成打开,关闭与删除 .................................................................................................................................. 31 12 自己发送 Irp 完成读请求 ..................................................................................................................................................... 33 13 如何实现路径过滤................................................................................................................................................................. 35 14 避免重入................................................................................................................................................................................. 39 15 结语与展望............................................................................................................................................................................. 42 15.5 附:微端口文件过滤驱动..................................................................................................................................................... 43
Sfilter分析笔记之绑定卷一

PDEVICE_OBJECT // // FSCDO 过滤设备对象扩展 // PSFILTER_DEVICE_EXTENSION
storageStackDeviceObject;
devExt;
// // 我们创建的过滤设备对象,将要绑定到 FS 的卷设备对象上 // PDEVICE_OBJECT newDeviceObject; PSFILTER_DEVICE_EXTENSION newDevExt; NTSTATUS status;
存储卷(Storage Volumes):
存储卷是一个存储设备对象, 例如硬盘、 软盘和CD-ROM, 可以被格式化存储目录和文件 。 一个大的卷可以被分成多个或者一个逻辑卷,也叫做分区。每一个逻辑卷可以被格式化为 NTFS、FAT或者CDFS。 (这是基于文件系统的) 。
一个存储卷或者存储设备对象是一个设备对象,-physical device object(PDO)-代 表系统中的一个逻辑卷。
存储设备栈(Storage Device Stacks) 存储卷(Storage Volumes) 文件系统栈(File System Stacks)
存储设备栈(Storage Device Stacks): 大多数存储设备是 PnP 设备驱动程序,由 PnP 管理器加载和管理。 系统上的每一个物理或者逻辑设备作为 PnP 设备树(device tree)上的一个设备节点 (device node)。 重要的一点注意是:文件系统驱动和文件过滤驱动不是 PnP 设备驱动。因此,设备树 上 不包含这两个设备节点。 每个设备节点,例如磁盘设备。可能维护一个或者多个逻辑卷,这些卷通过存储设备栈 (Storage Device Stacks)来维护。 存储设备栈就像树一样,根被称为 FDO(功能设备对象) ,剩下的就是 PDO(物理设备对 象) ,代表每一个逻辑卷,也叫做存储卷。文件系统卷能被挂载到此上面。
实现一个具有还原功能的磁盘卷过滤驱动

实现⼀个具有还原功能的磁盘卷过滤驱动磁盘过滤驱动的概念1.设备过滤和类过滤在之前的⽂章⾥,我们已经介绍过滤的概念,所谓过滤技术就是在本来已有的设备栈中加⼊⾃⼰的⼀个设备。
由于Windows向任何⼀个设备发送IRP请求都会⾸先发送给这个设备所在设备栈的最上层设备,然后再依次传递下去,这就使得加⼊的设备在⽬标设备之前获取Irp请求称为可能,这时候就可以加⼊⾃⼰的处理流程。
在这⾥把插⼊设备栈的⽤户设备叫做过滤设备,建⽴这个设备并使其具有特殊功能的驱动叫做过滤驱动。
在前⾯已经展⽰了如何去建⽴⼀个过滤设备并将其绑定在⼀个有名字的设备上,这叫做设备过滤,这是对某个特定设备加以过滤的⽅法。
但是在实际应⽤中,这种⽅法还存在⼀些问题,例如,Windows中有很多即插即⽤设备,如何在这些设备加⼊系统的时候就⾃动对他们进⾏绑定呢?实际上,在Windows的过滤驱动框架中,还有⼀种叫做类过滤驱动的驱动程序,能够在某⼀类特定的设备建⽴时有Pnp Manager调⽤指定的过滤驱动代码,并且允许⽤户对此时这⼀类设备进⾏绑定。
根据⽤户设备在整个设备栈中的位置可以分为上层过滤和下层过滤。
2.磁盘设备和磁盘卷设备过滤驱动在Windows的存储系统中,最底层的是磁盘,⽽在磁盘上⾯⼜有卷,卷虽然只是逻辑上的⼀个概念,但是Windows仍然为其建⽴了设备,所以在Windows的存储系统⾥有磁盘设备和磁盘卷设备两种类型的设备。
如果⼀个磁盘卷位于某个磁盘上,那么对于磁盘卷的访问最终也会体现在相应的磁盘上。
但是这并不意味着他们在⼀个设备栈上,irp不会原封不动从磁盘卷设备栈上⼀直传到磁盘设备栈上,更何况Windows中还存在着跨磁盘的卷,软RAID卷等不能对应到唯⼀磁盘上的卷。
从驱动的⾓度上来讲,这两种设备受到读/写请求都是针对与磁盘⼤⼩或者卷⼤⼩范围之内的请求,都是以扇区⼤⼩对齐,处理起来也没有什么太⼤的区别。
在此我们选⽤磁盘卷设备的上层类过滤驱动。
Windows 文件过滤驱动经验总结

P 后什么都不做,直接调用 IoCompleteRequest() 来返回。 (2) 拿到这个 IRP 后什么都不做,直接传递到底层设备,
使用IoSkipCurrentIrpStackLocation() 后调用 IoCallDriver() 传递。 (3) 使用 IoBui
ldSynchronousFsdRequest() 或 IoBuildDeviceIoControlRequest()来建立 IRP 的。
Windows 文件过滤驱动经验总结 1、获得文件全路径以及判断时机 除在所有 IRP_MJ_XXX 之前自己从头创建 IRP
发送到下层设备查询全路径外,不要尝试在 IRP_MJ_CREATE 以外的地方获得全路径,因为只有在 IRP_MJ_CREATE 中才会使
用 ObCreateObject() 来建立一个有效的 FILE_OBJECT。而 在 IRP_READ IRP_WRITE 中它们是直接操作
TION 等 IRP 不要去管它,因为它只是一个过程。最终读 写还是如上所介绍。至于以上这些 IRP 哪个是由 CC MGR 发送的,哪些是由
I/O MGR 发送和在什么时候发送的,这个已经有很多讨论了,相 信可以找到。
7、举例说明关于 IRP 传递与完成注意事项 只
看 Walter Oney 的那本 《Programming the Microsoft Windows driver model》里介绍的
其是你要达到一些特殊目的,这时候更需要注意,如 IRP_MN_QUERY_DIRECTORY,不同的标志结果有很大的不同。 3、从
头建立 IRP 获取全路径注意点 自己从头建立一个 IRP_MJ_QUERY_INFORMATION 的 IRP 获取全路径时需要注意,不
windows文件核心驱动结构简介、FileMon例程简介、开发注意要点

本帖子是《注册表实时监控拦截》的下篇,也是本系列的最后一篇。
主要讲述如何自己动手做一个在windows系统下的文件操作拦截的小驱动。
利用本驱动,可以实现对本机的所有文件操作请求进行实时监视、拦截,可以完全保护文件系统,在此基础上的进行深入开发后,可以做到文件加密、病毒防护等功能。
本帖子分三个部分:windows文件核心驱动结构简介、FileMon例程简介、开发注意要点。
一、windwos文件核心驱动结构简介在windows操作系统中(NT以上版本),规定了一套严格的文件操作请求处理流程,总体结构如下图:在图中上部分有一条虚线,这是“用户态”软件和“核心驱动”的分界线(用户态软件可以理解为普通的、可见的软件,如各类exe类型的软件)。
当用户态软件需要操作文件时,则发出文件操作请求,然后统一发送给系统的I/O管理器,I/O管理器把这个操作请求依次向下传递给“文件系统驱动”、“磁盘驱动”等,后者执行真正的文件操作。
上图是在本机上进行文件操作的流程,那么在访问网络上的文件,则处理流程如下:可以看到,在目标计算机(即文件所处的计算机)上,文件操作请求同样经过了“本地文件系统”和“磁盘驱动”,在这一点上,两者没有区别。
那么,如果我们要自己做一个文件的驱动,应该放在什么位置?下图给出了详细的“自定义驱动”的插入位置:图中以深色表示的部分,即留给用户可以插入“自定义驱动”的位置,可以看到,新插入的驱动和系统的驱动是“串接”在一起的。
所以,所有的文件操作均会通过“自定义驱动”(当然了,如果有人又开发了另外一个驱动,并插入到你所开发的驱动的下面,然后不通过正规的文件驱动而是直接发送消息到下层他的驱动,这样是拦截不到的)。
此时,你可以在你的驱动中很悠闲地处理这些请求,而且想啥时候丢弃、修改这些文件请求,那是全凭自己的心情了。
二、FileMon例程简介在了解了windows文件核心驱动的大致结构后,我们可以动手来试试了。
一种基于文件过滤驱动的Windows文件安全保护方案

收稿日期:2008-07-10;修回日期:2008-09-16。
基金项目:国家自然科学基金资助项目(60873024);湖北省教育厅重点研究项目(D2*******)。
作者简介:胡宏银(1972-),男,湖北大悟人,讲师,硕士,主要研究方向:软件工程、信息安全; 姚峰(1976-),男,山西大同人,讲师,硕士,主要研究方向:软件工程; 何成万(1967-),男,湖北荆门人,副教授,博士,主要研究方向:软件工程。
文章编号:1001-9081(2009)01-0168-04一种基于文件过滤驱动的W indo ws 文件安全保护方案胡宏银,姚 峰,何成万(武汉工程大学计算机科学与工程学院,武汉430073)(huhongyin@hot m ail .com )摘 要:针对提高文件安全级别需要较高安全成本问题,提出了一种低成本高安全的W indows 文件保护方法。
该方法采用W indows NT 驱动框架,基于文件系统过滤驱动技术实现对文件进行透明加解密。
文件内容用快速的对称算法加密,并且一文件一密钥。
文件密钥用安全性更高的非对称算法加密,加密密钥保存于专用密钥文件中,用户私钥存放在密钥U 盘里。
在此基础上,提出了一种文件安全共享的方法。
分析和应用表明,该方案在增加较少硬件成本基础上,可有效保护存储设备遗失或被盗、管理员密码被破解、文件共享时的文件安全。
关键词:文件系统过滤驱动;对称加密算法;非对称加密算法;密钥文件;加密文件共享中图分类号:TP309 文献标志码:ASoluti on of W i n dows f iles secur ity protecti on ba sed on f ile system f ilter dr i verHU Hong 2yin,Y AO Feng,HE Cheng 2wan(School of Co m puter Science and Engineering,W uhan Institute of Technology,W uhan Hubei 430073,China )Abstract:I n order t o s olve the p r oble m that enhancing files security needs high cost,a s oluti on t o W indows files security p r otecti on with l ow cost was p r oposed .It was based on W indows NT driver and file system filter driver t o encryp t and decryp t the files .File content was encryp ted with fast sy mmetrical encryp ti on algorith m,and every file had one encryp ti on key .File encryp ti on key was encryp ted with safer asy mmetrical encryp ti on algorith m,and encryp ted encryp ti on key was saved in the encryp ti on key file .Thr ough st oring the p rivate key in the U disk,the syste m security was enhanced .Additi onally,a method of encryp ted file share was intr oduced int o this paper .Analysis and app licati on results show that when the me mory is l ost,ad m inistrat or pass word is cracked and files are shared,and the s oluti on can enhance file security with l ow cost .Key words:file syste m filter driver;sy mmetrical encryp ti on algorith m;asy mmetrical encryp ti on algorith m;encryp ti on key file;encryp ted file share0 引言计算机和网络的普及使得计算机中文件的安全性成为关注的焦点和研究的热点。
#Windows文件系统过滤器之微过滤器驱动开发指南

微过滤器驱动开发指南0.译者序对我来说,中文永远是最美,最简洁,最精确和最高雅的文字。
本文翻译仅仅用做交流学习。
我不打算保留任何版权或者承担任何责任。
不要引用到赢利出版物中给您带来版权官司。
本文的翻译者是楚狂人,如果有任何问题,,或者是QQ16191935,或者是MSN 。
我翻译此文出于对文件系统技术的兴趣。
这就是新的文件系统过滤接口。
其实也不算什么新的东西,微软开发了另一个“旧模型的”过滤驱动,称之为过滤管理器<Filter Manager)。
从而提供了一系列新的接口来让你开发新的过滤器。
确实这套接口变简单清晰了。
你至少避免了包含无数个信息的IRP,避免了请求在各个部件中循环的发来发去,一个分发例程中处理无数中情况,一不小心系统崩溃。
我不知道花了多少时间才弄明白一个简单的缓冲读请求从用户到过滤到文件系统和缓冲管理器,虚拟内存管理器之间的关系!现在你也许不需要再管他们了,仅仅做好自己的过滤工作就可以。
这套接口强大吗?能实现你想要的功能吗?你很快就发现你没有研究过sfilter就看不懂Minifilter,或者是还得从sfilter开始做起更灵活一点。
微软就是这样,拿僵硬而且也不简单的东西来“简化”强大灵活但是设计上一团糟的东西,对于你来说是两者都必须学习,最后你的脑子被微软塞得满满的,不过没关系,我们已经习惯了.此文的原文是《Filter Driver Development Guide》,出自微软的网站。
我在以下这个地址下载得到此文:我尽量在翻译中使文章保持原貌。
如果您认为此文无法理解,建议您首先阅读旧的文件过滤驱动的相关资料。
我认为必须有文件系统和windows驱动的相关知识,才能阅读此文。
我未必总是使用规范的名词,但我总是使用最容易理解的名词。
一些常用的可能不翻译,比如IRP,MDL,有驱动开发经验的人应该可以理解。
另一些可能采用中文<英文)的方式。
一些解释如下:例程<Routine):我不懂得例程和函数有什么不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 概述,钻研目的和准备
我经常在碰到同行需要开发文件系统驱动。windows 的 pc 机上以过滤驱动居多。其目的不外乎有以下几种: 一是用于防病毒引擎。希望在系统读写文件的时候,捕获读写的数据内容,然后检测其中是否含有病毒代码。 二是用于文件系统的透明附加功能。比如希望在文件写过程中对数据进行加密,数据个性化等等过程,针对特殊的过程 进行特殊处理,增加文件系统效率等。 三一些安全软件使用文件过滤进行数据读写的控制,作为防信息泄漏软件的基础。 四也有一些数据安全厂家用来进行数据备份与灾难恢复。 如果你刚好有以上此类的要求,你可以阅读本教程。 文件系统驱动是 windows 系统中最复杂的驱动种类之一。不能对 ifsddk 中的帮助抱太多希望,以我的学习经验看 来,文件系统相关的 ddk 帮助极其简略,很多重要的部分仅仅轻描淡写的带过。如果安装了 ifsddk,应该阅读 src\filesys\OSR_docs 下的文档。而不仅仅是 ddk 帮助。 文件系统驱动开发方面的书籍很少。中文资料我仅仅见过侯捷翻译过的一本驱动开发的书上有两三章涉及,也仅仅是只 能用于 9x 的 vxd 驱动。但我们付出巨大努力所理解的 vxd 架构如今已经彻底作古。NT 文件系统我见过一本英文书。我
网友们帮我整理的原版已经非常流行。为了区别起见,称为第二版。
0. 作者,楚狂人自述
我感觉 Windows 文件系统驱动的开发能找到的资料比较少。为了让技术经验不至于遗忘和引起大家交流的兴趣我以 我的工作经验撰写本教程。
我的理解未必正确,有错误的地方望多多指教。我在一家软件公司从事安全软件相关的开发工作。我非常庆幸和许多优 秀的同事一起工作,特别要提到 wowocock,陆麟,jiurl 和曾经的同事 Cardmagic.非常乐意与您交流。有问题欢迎与我 联系。邮箱为 MFC_Tan_Wen@。
Windows 文件系统过滤驱动开发教程 (第二版)
楚狂人-2007-上海 (MSN:walled_river@hotmail.coቤተ መጻሕፍቲ ባይዱ)
-1. 改版序 ...................................................................................................................................................................................... 2 0. 作者,楚狂人自述.................................................................................................................................................................... 2 1. 概述,钻研目的和准备............................................................................................................................................................ 2 2 . hello world,驱动对象与设备对象............................................................................................................................................ 4 3 .分发例程,fast io.......................................................................................................................................................................... 6 3.5 附:陆麟关于 fastio 的简述.................................................................................................................................................... 9 4.设备栈,过滤,文件系统的感知.................................................................................................................................................. 10 5.绑定 FS CDO,文件系统识别器,设备扩展 ........................................................................................................................... 13 6.IRP 的传递,File System Control Dispatch .......................................................................................................................... 16 7.准备绑定卷,IRP 完成函数,中断级 ....................................................................................................................................... 18 8.绑定卷的完成............................................................................................................................................................................ 21 9 读写操作的捕获与分析............................................................................................................................................................ 26 10.读请求的完成.......................................................................................................................................................................... 28 11.文件和目录的生成打开,关闭与删除 .................................................................................................................................. 31 12 自己发送 Irp 完成读请求 ..................................................................................................................................................... 33 13 如何实现路径过滤................................................................................................................................................................. 35 14 避免重入................................................................................................................................................................................. 39 15 结语与展望............................................................................................................................................................................. 42 15.5 附:微端口文件过滤驱动..................................................................................................................................................... 43
学习文件系统驱动开发之前,应该在机器上安装 ifsddk。ddk 版本越高级,其中头文件中提供的系统调用也越多。一 般的说用高版本的 ifsddk 都可以编译在低版本操作系统上运行的驱动(使用对应的编译环境即可)。ifsddk 可以在某些 ftp 上免费下载。请不要发邮件向我索取。