Windows文件系统过滤驱动开发教程(第二版)
- 格式:pdf
- 大小:529.95 KB
- 文档页数:70
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请求的进程及线程的相关信息,如:获得发起进程名称,与安全访问规则(进程白名单)中的可信进程相比较,若该进程位于规则中,说明信任其行为是安全的,允许访问受保护文件;否则,拒绝访问。
实现⼀个具有还原功能的磁盘卷过滤驱动磁盘过滤驱动的概念1.设备过滤和类过滤在之前的⽂章⾥,我们已经介绍过滤的概念,所谓过滤技术就是在本来已有的设备栈中加⼊⾃⼰的⼀个设备。
由于Windows向任何⼀个设备发送IRP请求都会⾸先发送给这个设备所在设备栈的最上层设备,然后再依次传递下去,这就使得加⼊的设备在⽬标设备之前获取Irp请求称为可能,这时候就可以加⼊⾃⼰的处理流程。
在这⾥把插⼊设备栈的⽤户设备叫做过滤设备,建⽴这个设备并使其具有特殊功能的驱动叫做过滤驱动。
在前⾯已经展⽰了如何去建⽴⼀个过滤设备并将其绑定在⼀个有名字的设备上,这叫做设备过滤,这是对某个特定设备加以过滤的⽅法。
但是在实际应⽤中,这种⽅法还存在⼀些问题,例如,Windows中有很多即插即⽤设备,如何在这些设备加⼊系统的时候就⾃动对他们进⾏绑定呢?实际上,在Windows的过滤驱动框架中,还有⼀种叫做类过滤驱动的驱动程序,能够在某⼀类特定的设备建⽴时有Pnp Manager调⽤指定的过滤驱动代码,并且允许⽤户对此时这⼀类设备进⾏绑定。
根据⽤户设备在整个设备栈中的位置可以分为上层过滤和下层过滤。
2.磁盘设备和磁盘卷设备过滤驱动在Windows的存储系统中,最底层的是磁盘,⽽在磁盘上⾯⼜有卷,卷虽然只是逻辑上的⼀个概念,但是Windows仍然为其建⽴了设备,所以在Windows的存储系统⾥有磁盘设备和磁盘卷设备两种类型的设备。
如果⼀个磁盘卷位于某个磁盘上,那么对于磁盘卷的访问最终也会体现在相应的磁盘上。
但是这并不意味着他们在⼀个设备栈上,irp不会原封不动从磁盘卷设备栈上⼀直传到磁盘设备栈上,更何况Windows中还存在着跨磁盘的卷,软RAID卷等不能对应到唯⼀磁盘上的卷。
从驱动的⾓度上来讲,这两种设备受到读/写请求都是针对与磁盘⼤⼩或者卷⼤⼩范围之内的请求,都是以扇区⼤⼩对齐,处理起来也没有什么太⼤的区别。
在此我们选⽤磁盘卷设备的上层类过滤驱动。
本帖子是《注册表实时监控拦截》的下篇,也是本系列的最后一篇。
主要讲述如何自己动手做一个在windows系统下的文件操作拦截的小驱动。
利用本驱动,可以实现对本机的所有文件操作请求进行实时监视、拦截,可以完全保护文件系统,在此基础上的进行深入开发后,可以做到文件加密、病毒防护等功能。
本帖子分三个部分:windows文件核心驱动结构简介、FileMon例程简介、开发注意要点。
一、windwos文件核心驱动结构简介在windows操作系统中(NT以上版本),规定了一套严格的文件操作请求处理流程,总体结构如下图:在图中上部分有一条虚线,这是“用户态”软件和“核心驱动”的分界线(用户态软件可以理解为普通的、可见的软件,如各类exe类型的软件)。
当用户态软件需要操作文件时,则发出文件操作请求,然后统一发送给系统的I/O管理器,I/O管理器把这个操作请求依次向下传递给“文件系统驱动”、“磁盘驱动”等,后者执行真正的文件操作。
上图是在本机上进行文件操作的流程,那么在访问网络上的文件,则处理流程如下:可以看到,在目标计算机(即文件所处的计算机)上,文件操作请求同样经过了“本地文件系统”和“磁盘驱动”,在这一点上,两者没有区别。
那么,如果我们要自己做一个文件的驱动,应该放在什么位置?下图给出了详细的“自定义驱动”的插入位置:图中以深色表示的部分,即留给用户可以插入“自定义驱动”的位置,可以看到,新插入的驱动和系统的驱动是“串接”在一起的。
所以,所有的文件操作均会通过“自定义驱动”(当然了,如果有人又开发了另外一个驱动,并插入到你所开发的驱动的下面,然后不通过正规的文件驱动而是直接发送消息到下层他的驱动,这样是拦截不到的)。
此时,你可以在你的驱动中很悠闲地处理这些请求,而且想啥时候丢弃、修改这些文件请求,那是全凭自己的心情了。
二、FileMon例程简介在了解了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 引言计算机和网络的普及使得计算机中文件的安全性成为关注的焦点和研究的热点。
微过滤器驱动开发指南0.译者序对我来说,中文永远是最美,最简洁,最精确和最高雅的文字。
本文翻译仅仅用做交流学习。
我不打算保留任何版权或者承担任何责任。
不要引用到赢利出版物中给您带来版权官司。
本文的翻译者是楚狂人,如果有任何问题,,或者是QQ16191935,或者是MSN 。
我翻译此文出于对文件系统技术的兴趣。
这就是新的文件系统过滤接口。
其实也不算什么新的东西,微软开发了另一个“旧模型的”过滤驱动,称之为过滤管理器<Filter Manager)。
从而提供了一系列新的接口来让你开发新的过滤器。
确实这套接口变简单清晰了。
你至少避免了包含无数个信息的IRP,避免了请求在各个部件中循环的发来发去,一个分发例程中处理无数中情况,一不小心系统崩溃。
我不知道花了多少时间才弄明白一个简单的缓冲读请求从用户到过滤到文件系统和缓冲管理器,虚拟内存管理器之间的关系!现在你也许不需要再管他们了,仅仅做好自己的过滤工作就可以。
这套接口强大吗?能实现你想要的功能吗?你很快就发现你没有研究过sfilter就看不懂Minifilter,或者是还得从sfilter开始做起更灵活一点。
微软就是这样,拿僵硬而且也不简单的东西来“简化”强大灵活但是设计上一团糟的东西,对于你来说是两者都必须学习,最后你的脑子被微软塞得满满的,不过没关系,我们已经习惯了.此文的原文是《Filter Driver Development Guide》,出自微软的网站。
我在以下这个地址下载得到此文:我尽量在翻译中使文章保持原貌。
如果您认为此文无法理解,建议您首先阅读旧的文件过滤驱动的相关资料。
我认为必须有文件系统和windows驱动的相关知识,才能阅读此文。
我未必总是使用规范的名词,但我总是使用最容易理解的名词。
一些常用的可能不翻译,比如IRP,MDL,有驱动开发经验的人应该可以理解。
另一些可能采用中文<英文)的方式。
一些解释如下:例程<Routine):我不懂得例程和函数有什么不同。
文件系统驱动文件系统驱动主要生成两类设备:文件系统控制设备,文件系统的卷设备文件系统控制设备:主要任务是修改整个驱动的内部配置文件系统的卷设备:一个卷对应一个逻辑盘发送给控制设备的请求(IRP),一般是文件系统控制IRP(主功能号为IRP_MJ_FILE_SYSTEM_CONTROL);发送给卷设备的IRP一般则是文件操作IRP。
过滤的目标最终是为了得到文件操作的IRP,但是控制设备的IRP,一般用来捕获卷设备的生成信息,所以我们要先绑定文件系统的控制设备,达到绑定文件系统的卷设备的目的~~(1)生成自己的一个控制设备,当然必须给控制设备指定名称(2)设置普通分发函数(3)设置快速IO分发函数(4)编写一个文件系统变动回调函数,在其中绑定刚激活的文件系统控制设备(动态绑定)(5)使用IoRegisterFsRegistrationChange调用注册这个回调函数文件系统控制设备的绑定过滤设备扩展typedef struct _SFILTER_DEVICE_EXTENSION {ULONG TypeFlag;//// 绑定的文件系统设备(真实设备)//PDEVICE_OBJECT AttachedToDeviceObject;//// 与文件系统设备相关的真实设备(磁盘),这个在绑定时使用////PDEVICE_OBJECT StorageStackDeviceObject;////// 如果绑定了一个卷,那么这是物理磁盘卷名;否则这是绑定的控制设备名////UNICODE_STRING DeviceName;//// 用来保存名字字符串的缓冲区//WCHAR DeviceNameBuffer[MAX_DEVNAME_LENGTH];//// The extension used by other user.//UCHAR UserExtension[1];} SFILTER_DEVICE_EXTENSION, *PSFILTER_DEVICE_EXTENSION;绑定文件系统控制设备SfAttachToFileSystemDevice文件系统控制设备已经被绑定,绑定的目的是为了获得发送给文件系统控制设备的文件系统控制请求。