浅谈文件系统过滤驱动
笫7章过滤驱动

笫7章:过滤驱动概述这章主要讲述文件过滤驱动和网络过滤驱动。
过滤驱动主要用于在上层的软件和下层的硬件之间进行分层通信。
通过栈、分层和过滤可以把硬件和软件通过任意数量的层连接起来,这种分层方法使得我们可以在一个现有的栈中插入自己的过滤器。
在一个栈中插入我们自己的层是非常难被检测到的,但是却能对所有通过栈的通信进行完全的控制。
当这个栈是控制着一张网卡或者一个磁盘的时候这就变得非常有用了。
本章包括下面的内容。
过滤驱动的插入。
文件系统过滤驱动。
网络过滤驱动。
过滤技术的一个综合实例过滤驱动的插入在一个驱动栈中插入一个驱动能够让我们的rootkit对操作系统进行一些特殊的控制,这种技术被广泛地应用于杀毒软件、加密软件、和压缩软件中。
事实上,它还有很多用途,驱动加载器为了能以正确地顺序加载所有有滤过驱动必须去组织好它们。
注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 这个项指明了要加载的服务和驱动。
如果你在注册表中查看这个项你会发现里面有好几百个服务和驱动条目,当使用本书提供的SCMLoader来加载一个驱动时也会在这里生成一个以MyDeviceDriver开头的项。
到目前为止,SCMLoader 要加载一个on-demand (SERVICE_DEMAND_START) 类型的设备驱动需要执行"net start MyDeviceDriver" 命令才能成功加载。
为了进行文件系统过滤,rootkit必须作为一个automatic (SERVICE_AUTO_START) 类型的设备驱动被加载在"Filter" 组里。
因为on-demand loading比Autoloading 更具有指导意义,所以在讲解时继续使用SERVICE_ DEMAND_START 和“net start mydevicedriver”,但我们在本章的文件目录下提供了另一个新的SCMLoader(Wrox/Wiley )供大家下载,这个升级版的loader允许rootkit在启动的时候自动加载,应该用于最终发行版rootkkit 的插入。
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文件系统的过滤器驱动程序设计

Windows文件系统的过滤器驱动程序设计西安电子科技大学李新摘要:某些应用程序对文件系统的性能有较高要求。
例如媒体播放器需要满足最小数据传输率才能保证视觉上的流畅。
由于Windows文件系统本身没有提供这样的保证,需要编写过滤器驱动程序添加这项功能。
本文首先介绍系统驱动体系和文件系统工作机制,然后分析文件系统过滤器驱动程序的功能特点,最后介绍一种满足此类应用程序传输带宽的总体解决方案(来源于文献1)。
关键词:文件系统过滤器驱动程序设备对象堆栈一.基础知识1.系统组件Windows NT操作系统含有许多功能相互独立的内核模式组件。
如内核I/O管理器、硬件抽象层、存储管理器、配置管理器、对象管理器、运行支持和过程结构等组件。
Windows 2000在此基础上增加了即插即用管理器和电源管理器。
两种系统分别采用不同的驱动模型。
本文整体上以Windows 2000的文档为主。
不过文件系统具有特殊性(非WDM),在两个系统中的运行机制基本相似。
在这些内核组件中,I/O管理器最为关键,它由文件系统、中间层驱动程序和最低层设备驱动程序三部分组成,对所有的核心态驱动程序提供统一的通信接口IRP(I/O请求包方式)。
应用程序的I/O操作都是通过这种方式调用I/O管理器的服务完成的。
主要服务有:配置管理、内存管理、对象管理、安全监视等等。
2.驱动程序驱动程序实质是能被操作系统加载调用,为系统设备实现相应功能的内核模式的动态链接库。
形式上可以看作是一个包含许多例程的容器。
当第一次安装时,由I/O管理器调用驱动程序入口函数DriverEntry,驱动程序在此进行自身初始化,设置其它例程的进入点,使操作系统接下来可以调用这些服务例程。
驱动程序加载时机与它的启动类型和启动组设置有关。
启动类型有五种,通常文件系统及其过滤器驱动程序属于SERVICE_BOOT_START或SERVICE_DEMAND_START。
驱动体系是分层的。
Windows文件系统的过滤器驱动程序设计

Windows文件系统的过滤器驱动程序设计过滤器驱动程序是Windows操作系统中的一种特殊类型的驱动程序,用于实现文件系统层面的数据过滤和处理。
它可以截取文件系统操作,对文件或目录的访问进行拦截和修改,以实现特定的功能或策略。
1. 过滤器驱动程序的种类:Windows操作系统支持多种类型的过滤器驱动程序,包括文件系统过滤器驱动程序、网络过滤器驱动程序和通用过滤器驱动程序等。
其中,文件系统过滤器驱动程序是最常见的类型,用于截获和处理文件系统操作。
2.过滤器驱动程序的工作原理:过滤器驱动程序通过在文件系统的驱动栈中插入自身的过滤器层,来截获文件系统的操作。
当应用程序对文件或目录进行操作时,过滤器驱动程序可以截获这些操作并进行相关处理,比如拒绝访问、修改文件内容等。
3. 过滤器驱动程序的开发工具:Windows提供了一些开发工具和框架,可以帮助开发者设计和实现过滤器驱动程序。
比如,Windows Driver Kit (WDK)中包含了一些示例代码和文档,可以帮助开发者快速入门;而Windows Filter Manager (FltMgr)提供了一个高级的API接口,用于编写和管理过滤器驱动程序。
4.过滤器驱动程序的功能:过滤器驱动程序通常用于实现一些文件系统相关的功能或策略,比如文件加密、访问控制、实时监控等。
开发者可以根据需求设计和实现不同的功能模块,并在过滤器驱动程序中进行集成和管理。
5.过滤器驱动程序的资源管理:过滤器驱动程序在运行过程中需要占用一定的系统资源,包括内存、CPU等。
开发者需要合理地管理这些资源,避免造成系统性能下降或不稳定。
总之,Windows文件系统的过滤器驱动程序设计是一个相对复杂的任务,需要开发者对Windows操作系统的内部机制有一定的了解和掌握。
通过合理的设计和实现,可以实现各种不同的功能和策略,提升系统的安全性和稳定性。
文件过滤驱动学习笔记1

文件过滤驱动学习笔记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信息到来后首先到达我们的设备对象,从而可以优先获取系统信息。
过滤驱动来实现文件访问控制

过 滤驱 动 原 理 , 提 出 了利 用 系 统 过 滤 的 方 式 实现 文件 系统 安 全 的 方 案 。 并
【 键词】 过滤驱动 , 关 : 文件 系统 , 问 控 制 访
1 引 言 、
备 栈 中 。 备 栈 是 一 组 设 备 对 象 。 些 设 备 是 相互 关 联 的 。 设 这 任何
_ 制 .这 种 非 常 可 靠 .不 过 要 求 程 序 员 必 须 对 Wid 、 的 系 统 机 23缓 存 管 理 器 n oV S 缓 存管 理器 是一 组 内 核模 式 的 函 数 和 系 统 线 程 .他 们 与 内 制 . 行 流 程 . 个 子 系 统 , 块 等 有 比较 深 的 了解 运 各 模 存 管 理 器 协 同工 作 . 所 有 的 Wid W 文 件 系统 驱 动程 序 ( 地 为 noS 本 2 文 件 系统 驱 动 程 序 结 构 S S 提 文 件 系 统 驱 动 程 序 ( S ) 理 文 件 系 统 格 式 虽 然 F D 运 F D 和 网络 F D) 供 了 数 据 缓 存 的 能 力 FD管 S
随 着 计 算 机 的 大 规模 使 用 及互 联 网 的 日益 普 及 .计 算 机 系 来 自应 用 的 请 求 ,最 终 被 Widw O管 理 器 翻 译 成 i n o sI / r p的 , 总 统 的 安全 问题 越 来 越 受 到 关 注 。 文 件 作 为 计 算 机 数 据 的 载 体 . 是 发送 给 设 备栈 的顶 端 那 个 设 备 。 而
一
r 从 设 备 栈 的 顶 端 开 始 的 . 步 向 下 发 送 。D v o ne p是 逐 eV l l u 为 了 提 高 文件 系统 的安 全 性 . 目前 研 究 比 较 多 的 是 实 现 文 可 见 i 件 访 问控 制 。要 完 全 实 现 对 文 件 访 问 的控 制 , 有 两 种方 法 。 只 第 表 示 我 们 实 际 要 过 滤 的 Vo me设 备 . e T D表 示 这 个 设 备 栈 l u D vo 那 种 是通 过 Wid W 提供 的 A I 数 来 实 现 .这 种 方 法 比较 容 的顶 端 我 们 只 要 在 这 个 设 备 栈 的 顶 端 再 绑 定 一 个 设 备 . 发 送 nO S P 函 o n u e的 请 求 . 自然会 先 发 给我 们 的 设 备 来 处 理 。 易 . 是 存 在 着致 命 的缺 陷 。 二 种 方 法 则 是 利 用 系统 驱 动 的 机 给 V li 但 第
WindowsNT内核下文件系统过滤驱动程序开发

收稿日期:2002209203.作者简介:李 凡(19432),男,教授;武汉,华中科技大学计算机科学与技术学院(430074).基金项目:国家高性能计算基金资助项目(00303).WindowsN T 内核下文件系统过滤驱动程序开发李 凡 刘学照 卢 安华中科技大学计算机科学与技术学院谢四江北京电子科技学院科研中心摘要:分析了基于N T 内核的WindowsN T/2000/XP 操作系统下文件系统过滤驱动程序的开发原理、步骤和应用,以实现动态的病毒扫描、透明的文件加密解密、文件保护和系统恢复等功能,保障了文件系统的信息安全.给出了一个实现透明的文件加解密的过滤驱动程序实例.关 键 词:WindowsN T 内核;过滤驱动;文件系统;IRP中图分类号:TP311.5 文献标识码:A 文章编号:167124512(2003)0120019203 在WindowsN T 和基于N T 内核的Windows 2000/XP 操作系统中,通常需要通过开发文件系统过滤驱动程序来保证文件系统的信息安全运行,主要包括动态病毒扫描、透明文件加密解密、文件保护和系统恢复等功能.文件系统驱动程序(File System Driver ,简称FSD )管理文件系统格式.WindowsN T 的文件系统驱动程序是I/O 子系统的一个组件,为用户提供在磁盘或者磁带等非易失性存储介质上存取数据服务.WindowsN T 的文件系统驱动程序和其他的设备驱动程序的一个主要的区别就在于文件系统驱动程序和内存管理器、高速缓存管理器有机的结合在一起,有着密不可分的关系.为了提高系统性能,FSD 通常使用高速缓存(Cache )管理器以高速缓存文件数据.FSD 还和内存管理器结合起来,以使内存映射文件能被正确实现[1].本文首先探讨文件系统过滤驱动程序开发的原理和步骤,然后给出一个实现文件透明加密解密的实例.由于WindowsN T/2000/XP 操作系统的文件系统过滤驱动程序开发有着很类似的方面,下文中如果没有特别说明,则是针对以N T 内核为基础的WindowsN T/2000/XP 操作系统而言的.1 文件系统过滤驱动程序开发 WindowsN T 的I/O 管理器是一个可扩展的结构,通过开发过滤驱动程序可以扩展I/O 子系统的功能.I/O 管理器支持分层驱动程序模型,每个I/O 请求包(IRP )的处理分别经过各层驱动程序,直到某层驱动程序完成这个请求.这样第三方开发的驱动程序就有机会插入到这个层次结构中并获得截获及处理来自上层的操作请求的机会,把这种驱动程序称为过滤驱动程序[2].文件系统过滤驱动程序是针对文件系统而言的.WindowsN T 的I/O 管理器根据用户的文件操作请求构造IRP 发到文件系统驱动程序,文件系统驱动程序把相应于文件系统的操作转换为相应于存储设备驱动程序的操作并通过I/O 管理器来调用存储设备驱动程序[3].I/O 管理器在发送操作请求到目标设备之前会检查是否有其他的设备附着于目标设备对象之上.通过构造附加的设备对象附着在文件系统或者存储设备对象之上,并为该设备对象指定专门的驱动程序,I/O 管理器就会把要发送到目标设备的请求先发到附加的过滤设备,在该设备对应的过滤驱动程序中对原始请求加入附加的处理来实现对文件系统操作的截取、监控甚至替换.文件系统过滤驱动程序可以附着在文件系统驱动程序之上,也可以加入到文件系统驱动程序和存储设备驱动程序之间,如图1所示.具体实现一个过滤驱动程序的基本步骤包括:构造一个设备对象(过滤设备)附着在目标设备上;在这个过滤设备对应的驱动程序(过滤驱动程序)中截取发送到目标设备的操作;在过滤操作中可能需要构造新的IRP 来驱动下层驱动程序,也可能需要为某个IRP 指定对应的完成例程以第31卷第1期 华 中 科 技 大 学 学 报(自然科学版) Vol.31 No.12003年 1月 J.Huazhong Univ.of Sci.&Tech.(Nature Science Edition ) Jan. 2003图1 文件系统过滤驱动程序在系统中的位置便这个IRP被下层驱动程序完成返回后调用;在合适的时候可以断开过滤程序[3].2 文件透明加密解密的过滤器实例 下面给出一个在WindowsN T下进行文件加密解密的过滤器具体实现过程.用户的数据在存储到磁盘上设定的安全区域(例如安全文件夹)之前经过了加密处理,读取时经过解密返回给用户,这个过程对用户来说是透明的.对这个安全区域访问时先要通过认证处理,这样就保证了安全区域里的数据安全.对于现有的Windows N T/ 2000/XP系列操作系统的文件系统本身来说,只是对Windows2000/XP支持的5.0版本以上的N TFS文件系统本身实现了加密文件系统(EFS).对所有文件系统分区的文件实现透明的加密解密并采用特殊的加密算法,就需要通过文件系统过滤驱动程序来实现.在文件系统驱动程序和硬盘驱动程序之间加入过滤驱动程序.当文件系统驱动程序写硬盘的时候,过滤驱动程序首先对数据进行加密然后再调用硬盘驱动程序.当文件系统驱动程序读硬盘的时候,过滤驱动程序先调用硬盘驱动程序读取数据并对从硬盘返回的已加密数据进行解密,然后再返回给文件系统驱动程序.过滤器在系统中位于文件系统驱动程序和磁盘驱动程序之间.要实现这个过滤器,首先需要把过滤器挂接在某个硬盘分区之上,可以在过滤驱动程序的Driver Entry例程或者应用程序中调用DeviceIo2 Control发送一个IOCTL请求驱动程序来挂接到硬盘上.该过程的函数调用过程为:由ZwCreate2 File得到硬盘分区的设备句柄,再用ObRefer2 enceObjectByHandle得到对应的FIL E-OBJ ECT 指针(WindowsN T把每个设备当作一个文件来看待,并有一个对应的FIL E-OBJ ECT结构描述其属性),调用Io G et RelatedDeviceObject得到硬盘分区设备对象指针.然后调用IoCreateDevice来构造代表过滤器的一个设备并为它指定驱动程序也就是过滤驱动程序.最后调用IoAttachDe2 viceByPointer把该设备挂接在硬盘分区设备上.这样文件系统驱动程序发送到这个硬盘分区设备的所有请求都会先经过过滤器.硬盘驱动程序由Driver Entry提供一系列的IRP处理函数供高层驱动程序调用.在过滤驱动程序中实现加密解密是通过截取IRP-MJ-READ和IRP-MJ-WRITE来实现的.在过滤驱动程序的Driver Entry例程中指定处理函数: DriverObject→MajorFunction[IRP-MJ-WRITE]=MyFilterWrite;DriverObject→MajorFunction[IRP-MJ-READ]=MyFilterRead.在IRP-MJ-WRITE的处理函数中如果需要加密处理就在非分页内存中分配一段与待写数据空间大小相同的内存,并把待写数据拷贝到这段内存中,对这段内存数据调用加密处理,建立这段内存的内存描述符MDL,更新IRP结构中的Irp→MdlAddress指向这个新建立的MDL,并记住原先的值.为这个IPR指定一个完成例程,接着调用下层的硬盘驱动程序写入已加密数据.硬盘驱动程序完成这个写操作并返回后,系统会调用指定的这个完成例程.在完成例程中恢复Irp→MdlAddress为原来的值并且释放原先分配的那段内存.在IRP-MJ-READ的处理函数中解密是一个近似相反的过程.先直接调用硬盘驱动程序取得数据,然后在它的完成例程中对读取的数据进行解密返回上层驱动程序.3 主要应用和展望基于文件系统过滤驱动程序可以实现动态的病毒扫描.文件系统针对病毒的安全措施有两种:一种是以杀为主的静态反病毒措施,另一种是以防为主的动态反病毒措施.动态的反病毒措施也就是对病毒实时监控,这个可以通过文件系统过滤驱动程序来实现.基本方法是在文件系统驱动程序上面加入一个过滤驱动程序来过滤被病毒感染的文件.这个过滤驱动程序先于文件系统看到I/O操作请求,在截取到上层传下来的写操作请求时如果侦测到病毒特征就拒绝这个请求,保证02 华 中 科 技 大 学 学 报(自然科学版) 第31卷硬盘数据的安全.另外,利用文件系统过滤驱动程序可以实现分级的存储管理.举例来说,一个系统中有两个存储设备,一个存取速度很快价格很昂贵;另一个存取速度较慢但是价格便宜.可以作一个过滤驱动程序附着在文件系统驱动程序之上来优化系统性能.把不常用的数据放在慢速设备上,当截取到对这些数据的操作请求时先把这些数据转移到快速设备然后再向下传递原来的操作请求到文件系统驱动程序,这样就可以在现有设备不变的情况下获得更好的系统性能.开发文件系统过滤驱动程序的用途在于它可以扩展、修改、甚至替代现有文件系统的操作而不用重新开发新的文件系统驱动程序.随着信息技术的发展和WindowsN T 应用的普及,文件系统过滤驱动程序的开发会有着更广泛的应用.参考文献[1]S olomon D A ,Russinovich M E.Inside microsoft win 2dows 2000,third edition.New Y ork :Microsoft Press ,2001.[2]Chris Cant.Windows WDM 设备驱动程序开发指南.孙 义,马莉波等译.北京:机械工业出版社,2000.[3]Nagar R.Windows N T file system internals.NewY ork :O.Reilly &Associates ,1998.Development of f ilter driver of f ile systeminside Windows NT kernelL i f an L i u X uez hao L u A n Xie S ijiangAbstract :The analysis of the principle ,process and application of the development of File System Filter Driver (FSFD )inside WindowsN T \2000\XP operating system based on WindowsN T kernel were made to achieve dynamic virus scan ,transparent file encryption/decryption ,file protection ,system recovery and ensure the information security of file system.An instance of realizing transparent encryption/decryption of disk file was given.K ey w ords :WindowsN T kernel ;filter diver ;file system ;IRPLi fan Prof.;College of Computer Sci.&Tech.,Huazhong Univ.of Sci.&Tech.,Wuhan 430074,China.韩国材料科学代表团来我校访问2002年12月5日,以中韩联委会委员、浦项科技大学Lee Sung Hak 教授为团长,韩国科学与工程基金会R &D 项目主任Sung Nak Won 教授、釜山国立大学Park Ik Min 教授、浦项科技大学K im Nack Joon 教授和汉阳大学Shin Dong Huuk 教授组成的韩国材料科学代表团一行5人访问我校.王乘副校长会见了来访客人.在化学系、材料学院共同组织的研讨会上,Sung Nak Won 教授介绍了韩国科学与工程基金会的情况,中韩两国的教授们还就新材料、新技术方面的研究进行了热烈交流和讨论.会后,代表团参观了化学系实验室、模具技术国家重点实验室和快速制造中心.12第1期 李 凡等:WindowsN T 内核下文件系统过滤驱动程序开发 。
文件系统过滤驱动

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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈文件系统过滤驱动讲稿
大家好:
今天我们一起来认识一下文件系统过滤驱动(File System Filter Driver),当今信息化建设日益推进,电子化办公日趋流行,文件的安全性已成为信息安全领域的重要课题之一。
目前解决这个问题的主要技术手段有两种:
一是利用应用层HOOK(钩子)技术。
主要是对windows提供的文件操作函数(API)及由文件操作所触发的windows消息进行HOOK,经过适当的处理达到预期目的。
二是开发文件系统过滤驱动程序。
在内核中间层过滤I/O管理派发的I/O请求包IRP(I/O Request Package)。
做简单介绍后,我就从文件系统过滤驱动的定义、原理、应用和前景四个方面开始今天的主题。
谈到文件系统过滤驱动,不得不谈谈文件系统驱动。
文件系统驱动是存储管理子系统的一个重要组成部分,它向用户提供在磁盘或光盘等非易失性媒介上信息的存储、转发,同时和存储管理器、高速缓冲管理器紧密结合,不但保证了应用程序可以准确地提取数据文件的内容,而且提高了访问效率。
直观点:由截图可知,我们平时用的SD卡、U盘等是FAT、FAT32格式,它们所对应的文件系统驱动则是fastfat.sys、exfat.sys等,硬盘则是NTFS格式,所对应的文件系统驱动是ntfs.sys
它们到底怎么工作的呢?用户进程对磁盘上文件的创建、打开、读、写等操作由WIN 32子系统调用相应的服务来代表该进程发出请求操作。
I/O管理器接收到上层传来的I/O请求,应用程序对磁盘发出的操作请求,首先到达 I/O子系统管理器。
在进行读写磁盘数据的时候,缓存管理器会保存最近的磁盘存取记录,所以在接收到应用程序读写磁盘的操作请求后,I/O子系统管理器会先检查所访问的数据是否保存在缓存中,若缓存中有要访问的数据,I/O子系统管理器会构造Fast I/O请求包,从缓存中直接存取数据;如果所需数据不在缓存中,I/O子系统管理器会构造相应的IRP(I/O Request Package),然后发往文件系统驱动,同时缓存管理器会保存相应的记录。
因此,文件系统过滤驱动程序有两组接口处理由I /O子系统管理器发送来的用户模式应用程序操作请求:一组是普通的处理IRP的分发函数;另一组是FastIo调函数;通过构造输入输出请求包IRP来描述这个请求,然后向下传递给文件系统驱动、存储设备驱动做后续处理,低层驱动处理完毕后把结果依次向上返回,最后经过I/O管理器,由WIN 32子系统把结果返回给发出请求的应用进程,整个对文件的操作请求执行完毕。
Windows NT 的I/O 管理器是可扩展结构,支持分层驱动模型,这样按照我们的需求开发具有某种功
能的驱动程序插入到这个层次结构当中,截获所需处理的IRP进行处理,然后再继续向下传递或直接向上返回结果。
所以我们可以在I/O管理器与缓存管理器之间,或着文件系统之上,或着文件系统驱动与存储设备驱动之间插入我们的文件系统过滤驱动。
I/O管理器在发送文件操作请求到目标设备对象之前,会检查是否有附加的设备对象挂载在目标设备之上,若有,则把该IRP先发送给附加设备,经附加设备所属驱动程序的处理后,再发送给目标设备完成操作请求。
这样通过文件系统过滤驱动程序构造附加设备对象挂载在文件系统的存储设备之上,在过滤驱动程序中对发送到目标设备的操作请求进行预期处理,达到控制文件访问、保护文件安全性等目的。
所以文件系统过滤驱动可以定义为:是一种可选的,为文件系统提供具有附加值功能的驱动程序。
文件系统过滤驱动是一种核心模式组件,它作为Windows NT执行体的一部分运行。
从应用上:文件系统过滤驱动可以过滤一个或多个文件系统或文件系统卷的I/O操作(以FILEMON为例)。
按不同的种类划分,文件系统过滤驱动可以分为日志记录、系统监测、数据修改或事件预防几类。
通常,以文件系统过滤驱动为核心的应用程序有文件加解密、病毒防护、进程控制、文件访问事后审计信息安全方面的应用。
从本地计算机完全可以得知文件系统过滤驱动的应用领域。
(实例演示系统注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList)
“FSFilter Activity Monitor”活动监控
“FSFilter Anti-Virus”杀毒
“FSFilter Bottom”
“FSFilter Cluster File System”集群文件系统
“FSFilter Compression”压缩
“FSFilter Content Screener”内容过滤
“FSFilter Continuous Backup”内容备份
“FSFilter Copy Protection”拷贝保护
“FSFilter Encryption”加密
“FSFilter HSM”高速存储
“FSFilter Imaging”
“FSFilter Infrastructure”
“FSFilter Open File”
“FSFilter Physical Quota Management” 物理配额管理
“FSFilter Quota Management”配额管理
“FSFilter Replication”复制
“FSFilter Security Enhancer”安全
“FSFilter System Recovery”系统恢复
“FSFilter System”
“FSFilter Top”
“FSFilter Und elete”删除恢复
“FSFilter Virtualization”虚拟化
从实例讲:
一、文件系统过滤驱动在防毒方面的应用
Microsoft Security Essentials 360sd
应用程序在创建一个新文件或打开一个已存在文件时,文件系统过滤驱动程序截获IRP_MJ_CREATE,判断被打开文件是否存在和病毒特征代码库相匹配的特征,若存在,说明文件感染了病毒,失败掉该IRP,拒绝打开;否则,使IRP继续向下传递,完成正常的打开操作。
二、文件系统过滤驱动在加解密方面的应用(结合刚开始的两个图)
透明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。
所谓透明,是指对使用者来说是未知的。
当使用者在打开或编辑指定文件时,系统将自动对未加密的文件进行加密,对已加密的文件自动解密。
文件在硬盘上是密文,在内存中是明文。
一旦离开使用环境,由于应用程序无法得到自动解密的服务而无法打开,从而起到保护文件内容的效果。
钩子透明加密技术就是将上述两种技术组合而成的。
通过windows的钩子技术,监控应用程序对文件的打开和保存,当打开文件时,先将密文转换后再让程序读入内存,保证程序读到的是明文,而在保存时,又将内存中的明文加密后再写入到磁盘中。
钩子透明加密技术与应用程序密切相关,它是通过监控应用程序的启动而启动的。
一旦应用程序名更改,则无法挂钩。
同时,由于不同应用程序在读写文件时所用的方式方法不尽相同,同一个软件不同的版本在处理数据时也有变化,钩子透明加密必须针对每种应用程
序、甚至每个版本进行开发。
目前不少应用程序为了限止黑客入侵设置了反钩子技术,这类程序在启动时,一旦发现有钩子入侵,将会自动停止运行。
驱动加密技术与应用程序无关,它工作于windows API函数的下层。
当API函数对指定类型文件进行读操作时,系统自动将文件解密;当进入写操作时,自动将明文进行加密。
由于工作在受windows保护的内核层,运行速度更快,加解密操作更稳定。
文件系统过滤驱动的开发比较困难,但是,使用文件系统过滤驱动开发出来的安全软件能得到操作系统的保护,具有很强的安全性、较高的效率。
随着信息安全被人们日益重视,文件保护是最重要的目的。
伴随着技术的发展,人们逐渐将着眼点放在了内核层,无疑文件系统过滤驱动将发挥它巨大的优势,目前微软又极立推宠它的新一代过滤器模型----Minifilter,相信文件系统过滤技术在信息安全领域一定会大有发展。