文件过滤驱动-FSFilter
- 格式:ppt
- 大小:4.82 MB
- 文档页数:32
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 NT执行体的一部分运行。
文件系统过滤驱动可以过滤一个或多个文件系统或文件系统卷的I/O操作。
按不同的种类划分,文件系统过滤驱动可以分成日志记录、系统监测、数据修改或事件预防几类。
通常,以文件系统过滤驱动为核心的应用程序有防毒软件、加密程序、分级存储管理系统等。
二、文件系统过滤驱动并不是设备驱动设备驱动是用来控制特定硬件I/O设备的软件组件。
例如:DVD存储设备驱动是一个DVD驱动。
相反,文件系统过滤驱动与一个或多个文件系统协同工作来处理文件I/O操作。
这些操作包括:创建、打开、关闭、枚举文件和目录;获取和设置文件、目录、卷的相关信息;向文件中读取或写入数据。
另外,文件系统过滤驱动必须支持文件系统特定的功能,例如缓存、锁定、稀疏文件、磁盘配额、压缩、安全、可恢复性、还原点和卷装载等。
下面两部分详细的阐述了文件系统过滤驱动和设备驱动之间的相似点与不同点。
1、文件系统过滤驱动同设备驱动的相似点:下列部分描述了Windows操作系统中文件系统过滤驱动和设备驱动之间的相似点:(1)、类似的结构类似于设备驱动,文件系统过滤驱动有着属于自己的DriverEntry、Dispatch和I/O组件例程。
文件系统过滤驱动同设备驱动一样调用许多相同的系统核心例程,它们都会过滤发送给它们所关联的设备的I/O请求。
(2)、类似的功能:文件系统过滤驱动和设备驱动都是I/O子系统的组成部分,因此它们都接收和作用于I/O请求包(IRP)。
类似于设备驱动,文件系统过滤驱动同样可以创建它们自己的IRP并将该IRP发送到低层驱动。
这两种驱动均可以通过注册回调函数来接收多种系统事件的通知。
(3)、其它类似点:同设备驱动类似,文件系统过滤驱动可以接收传入的I/O控制码(IOCTLs)。
filealterationobserver filefilter -回复什么是文件更改观察器(File Alteration Observer)?如何使用文件过滤器(File Filter)来优化文件更改观察器的功能?文件更改观察器(File Alteration Observer)是一种软件工具,它可以监视特定目录或文件,检测并记录文件的更改、添加或删除操作。
这个工具在许多情况下都非常有用,比如监控配置文件的更改、检查文件完整性、比对文件版本等。
文件过滤器(File Filter)可以进一步优化文件更改观察器的功能,通过设置特定的过滤规则,只关注特定类型或特定名称的文件更改。
接下来,我们将一步一步回答有关文件更改观察器和文件过滤器的问题。
第一步:了解文件更改观察器(File Alteration Observer)文件更改观察器是一个监控工具,它可以实时监视特定目录或文件的更改情况。
当文件发生更改、添加或删除时,观察器会记录这些变化并生成相应的报告。
这个工具可以帮助我们了解文件的变更历史,追踪问题的源头,或者确保文件的完整性和安全性。
第二步:掌握文件过滤器(File Filter)文件过滤器是用于优化文件更改观察器功能的工具。
通过设置文件过滤器,我们可以筛选出我们关心的文件,并忽略其他不重要的文件更改。
过滤器可以根据文件的类型、名称、大小或修改日期等属性来进行设置。
第三步:使用文件过滤器来优化文件更改观察器的功能以下是一些使用文件过滤器优化文件更改观察器功能的方法:1. 根据文件类型进行过滤:通过设置文件过滤器,只关注特定类型的文件更改。
比如,如果我们只关心文本文件的更改,我们可以设置过滤器只监视.txt或.doc文件。
2. 根据文件名称进行过滤:设置文件过滤器,只监视特定名称的文件更改。
这在处理特定配置文件的更改时特别有用。
比如,我们可以设置过滤器只监视名为"config.properties"的文件。
Windows文件系统的过滤器驱动程序设计过滤器驱动程序是Windows操作系统中的一种特殊类型的驱动程序,用于实现文件系统层面的数据过滤和处理。
它可以截取文件系统操作,对文件或目录的访问进行拦截和修改,以实现特定的功能或策略。
1. 过滤器驱动程序的种类:Windows操作系统支持多种类型的过滤器驱动程序,包括文件系统过滤器驱动程序、网络过滤器驱动程序和通用过滤器驱动程序等。
其中,文件系统过滤器驱动程序是最常见的类型,用于截获和处理文件系统操作。
2.过滤器驱动程序的工作原理:过滤器驱动程序通过在文件系统的驱动栈中插入自身的过滤器层,来截获文件系统的操作。
当应用程序对文件或目录进行操作时,过滤器驱动程序可以截获这些操作并进行相关处理,比如拒绝访问、修改文件内容等。
3. 过滤器驱动程序的开发工具:Windows提供了一些开发工具和框架,可以帮助开发者设计和实现过滤器驱动程序。
比如,Windows Driver Kit (WDK)中包含了一些示例代码和文档,可以帮助开发者快速入门;而Windows Filter Manager (FltMgr)提供了一个高级的API接口,用于编写和管理过滤器驱动程序。
4.过滤器驱动程序的功能:过滤器驱动程序通常用于实现一些文件系统相关的功能或策略,比如文件加密、访问控制、实时监控等。
开发者可以根据需求设计和实现不同的功能模块,并在过滤器驱动程序中进行集成和管理。
5.过滤器驱动程序的资源管理:过滤器驱动程序在运行过程中需要占用一定的系统资源,包括内存、CPU等。
开发者需要合理地管理这些资源,避免造成系统性能下降或不稳定。
总之,Windows文件系统的过滤器驱动程序设计是一个相对复杂的任务,需要开发者对Windows操作系统的内部机制有一定的了解和掌握。
通过合理的设计和实现,可以实现各种不同的功能和策略,提升系统的安全性和稳定性。
文件过滤驱动学习笔记1文件系统过滤驱动,是在驱动级别上实现的,对文件系统的一举一动进行检测的一种技术。
这里仅指windows操作系统。
过滤包括文件打开、读写、重命名、删除,目录的操作等。
文件过滤非常有用,大多数实时监控的杀毒软件都会利用到这个技术。
从今天开始,分享在学习过程中的一些心得。
Wdk提供了一个sfile例子,供我们参考。
微软的习惯很好,在抛出一个新的东西之后,它的文档肯定有一个同步的跟进。
并且文档做得非常好,msdn,各种help。
比起google的android,微软的脚步走得更加坚实。
言归正传。
源文件在我电脑的路径是C:\WinDDK\6001.18002\src\filesys\filter\sfilter。
这个目录下有乱七八糟8个文件,而真正的代码只有sfilter.c一个。
让我们开始揭开它神秘的面纱吧。
看代码一般从入口开始看起。
DriverEntry。
sfilter的DriverEntry 做了三件事。
1填充MajorFunction,2填充fastIoDispatch,3注册文件系统变化回调。
1.填充MajorFunction这个不多说了,上层应用程序调用驱动时,就是利用这些接口。
比如CreateFile时候,会调用IRP_MJ_CREATE。
我们要进行过滤,就需要在这些例程中做事情。
2.填充fastIoDispatch这个我至今没看懂啥意思。
不过看雪上的高人都说,这个东西没必要管它,最多只是速度上的损失。
3.注册系统变化回调status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );SfFsNotification这个函数是绑定设备控制对象的关键所在。
其重要性就在于,它能探测动态加载的卷设备,包括u盘等。
这里着重说说这个东西。
我们知道,驱动中实现过滤的一般方法就是绑定。
绑定一个我们自己的设备对象到设备栈顶,所有的IRP信息到来后首先到达我们的设备对象,从而可以优先获取系统信息。
文件系统Minifilter驱动声明:本系列文章源于WDK,所有权利归原作者所有,翻译的目的只为交流和学习。
除了商用你可以随意地使用这篇译文。
但请不要删除声明。
——by jununfly说明:所有preoperation及postoperation均简写为pre-oper和post-oper所有文件系统过滤驱动均简写为FSFD(文件系统过滤驱动)所有基于IRP的I/O即IRP-based I/O均简写为IRP-I/O版本:20090220Filter管理器和Minifilter驱动架构Filter 管理器是一个内核模式驱动,它遵照legacy文件系统filter模型并具有FSFD必需的功能。
利用这些功能,第三方开发者可以写 minifilter驱动,这样的驱动比legacy(陈旧的) FSFD更易于开发,因此缩短了开发过程同时制造出更高质量、更灵活的驱动。
本章包括:一、Filter管理器概念Filter管理器随Windows一起被安装,但它只在minifilter驱动被加载时才起作用。
Filter管理器被绑定到目标卷的文件系统栈上。
当Minifilter驱动要执行过滤I/O操作时,必须先向filter 管理器注册来间接绑定到文件系统栈上。
Legacy 过滤驱动在文件系统I/O栈中的位置,相对于其他过滤驱动来说是在系统启动时由它的加载顺序组决定的。
例如,一个antivirus过滤驱动在栈中的位置应该高于一个“复制操作”的过滤驱动,因而它能在文件被复制到远程服务器之前探测病毒并消除文件中的病毒。
因此,FSFilter Anti- Virus加载顺序组中的过滤驱动的加载要先于FSFilter Replication组中的过滤驱动。
每一个加载顺序组都有一个相应的系统定义的类和INF文件中要使用的类GUID。
像legacy过滤驱动一样,minifilter驱动的绑定也按照一定的顺序。
不过,绑定顺序是由altitude这个唯一标识符决定。
为了让这个驱动被系统加载,必须创建一个 inf 文件。
由于是使用现成的例子,因此这一步也可以省下来。
直接右键点击例子中的 inf 文件,在弹出的菜单中选择 “安装 ”即可。
这里要注意的是, inf 中的 StartType 参数,它可以控制驱动被加载 的方式:因为是测试,我使用 SERVICE_DEMAND_START ,即由手动加载 驱动。
例子是 miniFilter 驱动,因此可以在命令提示行中用 “fltmcload 驱动名称 ”来加载,相应的卸载是 “fltmc unload ”。
如果是其它驱动,则 用"net start 驱动名称"来加载,相应的卸载是"net stop 驱动名称”。
注 意驱动名称不是文件名, 而是inf 中[Settings ]的ServiceName 值。
驱动 要发布时,也可以通过 CreateService & StartService API 来动态安 Inf 文件的写法,可以参考例子,或者拿现成的改一改。
下面的是摘 自驱动开发网的XiangXiangRen 整理的 Inf 文件, 改起来比较方便, 谢谢 XiangXiangR en 。
文件过滤驱动安装 inf 文件简易获得法不少同仁获得 inf 文件都是直接修改 sfilter.inf, 这个修改很需要耐性, 不小心 敲错 又不能编译调试,改错难度不小。
有些同仁不加修改,结果 sfilter 满天飞:)。
我修改了一下 sfilter 的安装文件,这样你只要修改最后的字符 串列表,就可以 轻松得到自己的安装文件了。
可以用于任何打算静态加载的文件过滤驱动, 内容 如下:SERVICE_AUTO_START (2)SERVICE_BOOT_START (0) 会自动加载SERVICE_DEMAND_START(3) 安全模式下不会自动加载 在系统安全模式下启动时 驱动也则驱动不会自动加载[Version]signature = "$Windows NT$"Class = "ActivityMonitor" ;This is determined by the work this filter driver doesClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;This value is determined by the ClassProvider = %MyName%DriverVer = 08/28/2005,1.0.0.1CatalogFile = Mycat.cat ; A CatalogFile entry is required for a WHQL sign ature.; The actual catalog file will be provided by WHQL. The; catalog file for this sample is not provided for use. [DestinationDirs]DefaultDestDir My.DriverFiles = 12= 12 ;%windir%\system32\drivers[SourceDisksNames]1 = %MyDisk%[SourceDisksFiles]%MySysFileName% = 1[DefaultInstall]OptionDesc = %MyServiceDesc%CopyFiles = My.DriverFiles[DefaultInstall.Services]AddService = %MyServiceName%,,My.Service AddReg = My.AddRegistry[DefaultUninstall]DelFiles = My.DriverFilesDelReg = My.DelRegistry[DefaultUninstall.Services]DelService = %MyServiceName%,0x200 [My.Service]DisplayName Description ServiceBinary= %MyServiceName%= %MyServiceDesc%= %12%\%MySysFileName%;%windir%\system32\drivers\JwFvfs.sysServiceType = 2 ;SERVICE_FILE_SYSTEM_DRIVERStartType = 0 ;SERVICE_BOOT_STARTErrorControl = 1 ;SERVICE_ERROR_NORMALLoadOrderGroup = "FSFilter Activity Monitor" ;"filter" if install to 2k.AddReg = My.AddRegistry[My.AddRegistry][My.DelRegistry][My.DriverFiles]%MySysFileName%[Strings]MyName = "Tan Wen"MyServiceDesc = "Tan Wen's File System Filter."MyServiceName = "TanWenFsF"MyRegistry = "system\currentcontrolset\services\TanWenFsF"MyDisk = "Tan Wen Source Media"MySysFileName = "TanWen.sys"修改的时候只要修改最后的字符串列表,依次是开发者名,服务描述,服务名,注册表位置,磁盘标签,驱动文件名。
微过滤器驱动开发指南0.译者序对我来说,中文永远是最美,最简洁,最精确和最高雅的文字。
本文翻译仅仅用做交流学习。
我不打算保留任何版权或者承担任何责任。
不要引用到赢利出版物中给您带来版权官司。
本文的翻译者是楚狂人,如果有任何问题,,或者是QQ16191935,或者是MSN 。
我翻译此文出于对文件系统技术的兴趣。
这就是新的文件系统过滤接口。
其实也不算什么新的东西,微软开发了另一个“旧模型的”过滤驱动,称之为过滤管理器<Filter Manager)。
从而提供了一系列新的接口来让你开发新的过滤器。
确实这套接口变简单清晰了。
你至少避免了包含无数个信息的IRP,避免了请求在各个部件中循环的发来发去,一个分发例程中处理无数中情况,一不小心系统崩溃。
我不知道花了多少时间才弄明白一个简单的缓冲读请求从用户到过滤到文件系统和缓冲管理器,虚拟内存管理器之间的关系!现在你也许不需要再管他们了,仅仅做好自己的过滤工作就可以。
这套接口强大吗?能实现你想要的功能吗?你很快就发现你没有研究过sfilter就看不懂Minifilter,或者是还得从sfilter开始做起更灵活一点。
微软就是这样,拿僵硬而且也不简单的东西来“简化”强大灵活但是设计上一团糟的东西,对于你来说是两者都必须学习,最后你的脑子被微软塞得满满的,不过没关系,我们已经习惯了.此文的原文是《Filter Driver Development Guide》,出自微软的网站。
我在以下这个地址下载得到此文:我尽量在翻译中使文章保持原貌。
如果您认为此文无法理解,建议您首先阅读旧的文件过滤驱动的相关资料。
我认为必须有文件系统和windows驱动的相关知识,才能阅读此文。
我未必总是使用规范的名词,但我总是使用最容易理解的名词。
一些常用的可能不翻译,比如IRP,MDL,有驱动开发经验的人应该可以理解。
另一些可能采用中文<英文)的方式。
一些解释如下:例程<Routine):我不懂得例程和函数有什么不同。