初探文件系统过滤驱动

合集下载

微文件系统过滤驱动开发指南

微文件系统过滤驱动开发指南

Windows文件系统过滤管理器之微过滤器驱动开发指南0.译者序对我来说,中文永远是最美,最简洁,最精确和最高雅的文字。

本文翻译仅仅用做交流学习。

我不打算保留任何版权或者承担任何责任。

不要引用到赢利出版物中给您带来版权官司。

本文的翻译者是楚狂人,如果有任何问题,你可以通过邮箱MFC_Tan_Wen@,或者是QQ16191935,或者是MSN walled_river@与我交流。

我翻译此文出于对文件系统技术的兴趣。

这就是新的文件系统过滤接口。

其实也不算什么新的东西,微软开发了另一个“旧模型的”过滤驱动,称之为过滤管理器(Filter Manager)。

从而提供了一系列新的接口来让你开发新的过滤器。

确实这套接口变简单清晰了。

你至少避免了包含无数个信息的IRP,避免了请求在各个部件中循环的发来发去,一个分发例程中处理无数中情况,一不小心系统崩溃。

我不知道花了多少时间才弄明白一个简单的缓冲读请求从用户到过滤到文件系统和缓冲管理器,虚拟内存管理器之间的关系!现在你也许不需要再管他们了,仅仅做好自己的过滤工作就可以。

这套接口强大吗?能实现你想要的功能吗?你很快就发现你没有研究过sfilter就看不懂Minifilter,或者是还得从sfilter开始做起更灵活一点。

微软就是这样,拿僵硬而且也不简单的东西来“简化”强大灵活但是设计上一团糟的东西,对于你来说是两者都必须学习,最后你的脑子被微软塞得满满的,不过没关系,我们已经习惯了.此文的原文是《Filter Driver Development Guide》,出自微软的网站。

我在以下这个地址下载得到此文: /download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/FilterDriverDe veloperGuide.doc我尽量在翻译中使文章保持原貌。

如果您认为此文无法理解,建议您首先阅读旧的文件过滤驱动的相关资料。

基于文件系统过滤驱动的文件加密系统设计

基于文件系统过滤驱动的文件加密系统设计

26卷 第4期2009年4月微电子学与计算机M ICROEL ECTRON ICS &COMPU TERVol.26 No.4April 2009收稿日期:2008-05-05基于文件系统过滤驱动的文件加密系统设计刘 伟,胡 平(南京工业大学信息科学与工程学院,江苏南京210009)摘 要:描述了文件系统驱动与文件系统过滤驱动的关系,通过对文件系统响应用户模式应用程序操作请求原理的分析,得出文件系统过滤驱动入口函数的编写方式,以及关键分发例程的实现方法,并给出了用户模式应用程序与内核模式文件系统过滤驱动程序进行通信的方式.关键词:信息安全;文件监控;文件系统过滤驱动;文件加密中图分类号:TP316.86 文献标识码:A 文章编号:1000-7180(2009)04-0114-04File E ncryption System Design B ased on File System Filter DriverL IU Wei ,HU Ping(College of Information Science and Engineering ,Nanjing University of Technology ,Nanjing 210009,China )Abstract :The relation between file system driver and file system filter driver is described firstly.On the analysis of the procedure that the file system responds to the applications ’requests ,the way how to program the file system filter driver ’s main function is put forward ,in addition ,the methods to programming several important dispatch functions are brought forward.Furthermore ,the means how the applications in user mode communicates with file system filter driver in kernel mode is described in detail.K ey w ords :information security ;file monitor ;file system filter drive ;file encryption1 引言Windows 系列操作系统正在为越来越多的人的青睐.随之,操作系统的安全性也逐渐得到重视.文件加密系统是实现对关键文档资料,例如,一些涉及企业机密的word 文件、CAD 文件等资料,进行监控和透明加密/解密操作.主要实现思路是:利用文件系统过滤驱动程序监控对这些关键文件进行的操作;在向磁盘写入这些关键文件时,自动进行加密;在打开这些文件时,即从磁盘读出文件时,自动进行解密,加密/解密操作对用户是透明的[122].2 现有文件加密方法比较当前的数据加密方式主要有在以下几种:(1)硬件层加密方式:CPU 不参与数据加密/解密过程,只须把加密数据发送给硬件加密/解密引擎,即可完成加密/解密过程.它具有加密速度快,难于破解等优点,同时也具有成本高,不易于进行交互设置等缺点.加密卡即属于硬件层的加密方法.(2)调用驱动层:属于软件加密方式.加密/解密处理过程位于操作系统系统内核,得到系统内核保护,也可进行文件透明加/解密.但其也有加密效率不如硬件方式高,开发难度较大等缺点,Windows 2000/xp/2003中的EFS (加密文件系统)就是利用这种数据加密方式[3].(3)系统调用层:SL IC 是一种使用插入技术提供文件系统功能扩展的系统,其基础是用户空间和内核空间的通信,它只能处理通过这个通道的操作,并且它只能拦截全部操作,而不仅仅是需要的那部分操作.(4)用户层加密方式:该方式易于实现,但由于它是用户空间的程序,各种用户进程和内核进程都可以访问它的中间处理数据;因此,它很容易被其它进程拦截.故其安全得不到操作系统内核的保护.基于文件系统过滤驱动的文件加密方式是在操作系统内核中,位于文件系统驱动程序之上的数据加密技术,通过开发文件系统过滤驱动实现对文件系统功能的扩展,属于操作系统内核程序,与文件系统紧密结合,具有EFS 的所有优点,而且也有相当的灵活性;同时,开发难度较大[425].3 文件系统驱动与文件系统过滤驱动文件系统驱动是存储管理子系统的一个组件,为用户提供多种手段,将信息存储到永久介质,比如磁盘、磁带,或从永久介质获取信息.图1显示了文件系统驱动与用户应用程序之间的服务关系:图1 文件系统对应用程度请求的响应在应用程序发出对磁盘的操作请求后,首先到达I/O 子系统管理器.因为在进行读写磁盘数据的时候,缓存管理器(Cache Manager )会保存最近的磁盘存取记录,所以在接收到读写磁盘操作请求时,I/O 子系统管理器会先检查所访问的数据是否保存在缓存中,若缓存中有要访问的数据,I/O 子系统管理器会构造Fast I/O 请求包,从缓存中直接存取数据;如果所需数据不在缓存中,I/O 子系统管理器会构造相应的IRP ,然后发往文件系统驱动,同时缓存管理器会保存相应的记录.文件系统过滤驱动是一种内核模式驱动,仅能绑定到目标文件系统驱动的上层.文件系统过滤驱动程序有两组接口处理I/O 子系统管理器发送来的应用程序操作请求:一组是普通的处理IRP 的分发函数;另一组是Fast Io 回调函数;编写这两组函数也是文件系统过滤驱动的主要任务之一.4 文件保护系统软件总体设计文件加密系统主要有两部分组成:用户模式应用程序(控制部分)和文件系统过滤驱动程序.4.1 用户模式应用程序实现与用户之间的交互,将用户进行的设置信息通过用户模式应用程序与内核模式程序的通信的方式传递给文件系统过滤驱动程序,并向用户显示文件系统过滤驱动程序传给用户模式应用程序的信息[6].4.2 文件系统过滤驱动程序接收用户模式应用程序传来的设置信息,并按照这些信息对文件系统过滤驱动进行设置;对应用程序发往文件系统的操作请求进行监控;在应用程序对磁盘上的文件进行读操作时,进行相应的处理和解密操作;在进行写操作时,进行加密操作.如图2所示.图2 加密文件系统具体的操作是:在IRP MJ DEV ICE CON 2TROL 请求或fast IoDispatch ->Fast IoDevice 2Control 的响应函数中接收用户程序的控制信息;在IRP MJ WRITE 分发函数中,对要保护的文件加密;在IRP MJ READ 分发函数中,对经过加密的文件进行解密[7].5 指定IRP 分发函数及Fast Io 回调函数入口指针 Driver Entry ()函数是驱动程序的入口函数,主要任务就是指定处理IRP 分发函数入口指针和Fast Io 回调函数指针.可以采用以下形式定义:For (i =0;i <=IRP MJ MAXIMUM FUNCTION ;i ++)DriverObject ->MajorFunction[i ]=FilterPassThrough ;DriverObject ->MajorFunction [IRP MJREAD ]=FilterReadDispatch ;DriverObject ->MajorFunction [IRP MJWRITE ]=FilterWriteDispatch.由于FilterPassThrough ()分发例程处理的是文件系统过滤驱动不要求处理的IRP ,所以这个分发例程的作用是将IRP 请求直接发往下层驱动,不做任何处理,可以调用IoCallDriver ()函数发送IRP.对于Fast Io 回调函数,可以指定Fast Io 回调函511 第4期刘伟,等:基于文件系统过滤驱动的文件加密系统设计数入口指针:RtlZeroMemory(fast IoDispatch,sizeof(FAST IO DIS2 PA TCH));fast IoDispatch->SizeOf Fast IoDispatch=sizeof(FAST IO DISPA TCH);fast IoDispatch->Fast IoRead=FilterFast IoRead;……DriverObject->Fast IoDispatch=fast IoDispatch.6 编写相应的入口函数6.1 IRP MJ DEV ICE CON TROL请求的响应函数接收用户模式应用程序传送的控制请求;根据应用程序传递来的控制请求中的I/O控制码进行相应的设置或调整.也可选择fast Io操作请求fas2 t IoDispatch->Fast IoDeviceControl的回调函数. 6.2 IRP MJ WRITE分发函数实现功能:首先获取文件路径,利用后缀名判断是否是要加密的文件;若不是要加密的文件,直接向下层驱动传递该IRP请求;否则,将数据加密后写入磁盘存储设备,保证磁盘上存储的要加密的文件存放的是加密之后的数据.在IRP MJ WRITE分发函数中获取文件路径的方法是:irpSp=Io G etCurrent IrpStackLocation(Irp);//初始化ObjectAttributes结构体,InitializeObjectAttributes(&ObjectAttributes,irpSp-> FileObject->FileName,OBJ KERN EL HANDL E,NULL,NULL);//获得文件对象的句柄ZwOpenFile(&FileHandle,FIL E READ A T2 TRIBU TES,&ObjectAttributes,&IoStatusBlock,FIL E SHARE READ|FIL E SHARE WRITE,FIL E NON DIRECTOR Y FIL E);//获得文件对象的文件路径名ZwQueryInformationFile(FileHandle,&IoStatusBlock,th2 isFileName,sizeof(FileNameInformation),FileNameInfor2 mation).以上程序段获取型如“\dir1\dir2\…\file2 name”文件路径,如果要获得全部路径名,可以通过向下层驱动发送相应的IRP请求获得.从文件路径名中取出文件后缀名,并与要加密文件后缀名进行比较.若不是要求加密的关键文件,直接向下层驱动传递该IRP请求;否则,在该请求的分发函数中对写入的文件数据加密.Irp->MdlAddress域指向一个存储器描述符表(MDL)的数据结构,如果驱动程序使用direct I/O方式,MdlAddress会描述一个包含数据的缓冲区;否则,MdlAddress为NULL,驱动程序使用的是buffer I/O,Irp->AssociatedIrp. SystemBuffer中存放写入的文件数据.加密过程是:(1)如果Irp->MdlAddress不为NULL(即驱动程序使用direct I/O方式),调用Mm G et Sys2 temAddressForMdlSafe()函数得到用户缓冲区的系统映射地址,通过这个地址可以访问写入数据;否则,驱动程序使用的是buffer I/O,Irp->Associate2 dIrp.SystemBuffer中存放写入数据,使用Irp-> AssociatedIrp.SystemBuffer作为参数分配一个MDL,用该MDL作为参数调用MmProbeAndLock2 Pages(),探查MDL描述的Irp->AssociatedIrp. SystemBuffer缓冲区,使其常驻内存并锁定它.(2)用选定的加密算法对写入数据进行加密.(3)完成了对该IRP的所有处理之后,调用函数IoCompleteRequest()将该IRP返回给I/O了系统管理器.6.3 IRP MJ READ分发函数实现功能:首先获取文件路径名,判断是否是加密文件;如果是加密文件,则进行解密;否则,向下层驱动传递该IRP请求.关于文件路径名的获取与上述方法相同,之后也对文件后缀名进行判断.若不是加密文件,则直接向下层驱动传递该IRP请求;否则,对加密过的文件数据进行解密.存放要进行解密的文件数据的结构,根据驱动程序采用的是direct I/O或buffer I/O 而不同,方式与上述一致;但与上述方法不同的是,解密过程是在IRP MJ READ的完成例程中进行的,可以利用IoSetCompletionRoutine()函数设置IRP请求的完成例程,在完成例程函数中进行解密操作.7 文件系统过滤驱动与用户模式应用程序的通信7.1 用户模式应用程序向内核模式文件系统过滤驱动程序传递信息用户模式应用程序通过CreateFile()函数获取设备驱动程序的句柄后,使用DeviceIoControl()函数来实现与设备驱动程序之间的通信,将用户的设置信息传递给文件系统过滤驱动程序.但是文件系统过滤驱动拦截了所有的I/O请求.所以,文件系统过滤驱动必须区分哪些I/O请求需要文件系统过滤驱动处理.解决方法是在Driver Entry()中用IoCreateDevice()创建一个命名控制设备对象,并在该设备扩展DeviceExtension中定义设备类型.例611微电子学与计算机2009年如://在Driver Entry()函数中ntStatus=IoCreateDevice(DriverObject,sizeof(DEV ICE EXTENSION),&deviceName,FIL E DEV ICE FIL TER, 0,TRU E,&guiDevice);//修改控制设备对象设备扩展的类型((PDEV ICE EXTENSION)guiDevice->DeviceExten2 sion)->Type=GU IIN TERFACE.在拦截IRP请求后,通过检查设备类型,判断是否是GU IIN TERFACE,即可知该IRP是系统发送的还是用户模式应用程序发送的(即可知该请求是否是发给文件系统过滤驱动的).然后定义I/O 控制码、网络文件系统控制码、文件系统控制码等,可以设置以下I/O控制码:IOCTL FIL TER STARTFIL TER//开启文件系统过滤驱动程序IOCTL FIL TER HOO K DRIV ES//进行绑定卷设备操作IOCTL FIL TER STOPFIL TER//停止文件系统过滤驱动程序IOCTL FIL TER V ERSION//获得文件系统过滤驱动版本号DeviceIoControl()函数通过这些与文件系统过滤驱动控制设备对象名相关联的I/O控制码,向文件系统过滤驱动程序传递和接收数据的;文件系统过滤驱动则是通过IRP MJ DEV ICE CON2 TROL分发处理函数或fast IoDispatch->Fast IoDe2 viceControl回调函数接收DeviceIoControl()函数发送的信息.7.2 文件系统驱动程序向用户模式应用程序发送消息首先,用户模式应用程序创建一个事件,然后将该事件句柄传给文件系统驱动程序,之后创建一个辅助线程.文件系统驱动程序收到该事件的句柄后,将其转换成能够使用的事件指针,并存储起来以便后续使用.在文件系统驱动程序向应用程序传递信息时,就将此事件设置为有信号状态,然后应用程序的辅助线程立即知道这个消息并进行相应的处理. 8 结束语文中介绍了文件系统过滤驱动的工作原理,详细论述了文件系统过滤驱动的设计过程,特别是对几个关键操作请求处理的方法,以及文件系统过滤驱动与用户模式应用程序之间的通信方法;在文件系统过滤驱动设计完成之后,实现对系统发出的关于关键文档资料的操作请求进行控制.虽然文件系统过滤驱动开发涉及很多内容,而且各个版本的Windows操作系统会调用不同的低层函数,这给开发带来了许多不便,但是,使用文件系统过滤驱动开发出来的安全软件有很强的安全性,广泛应用于防病毒引擎、文件系统的透明加/解密功能、文件访问控制以及某些数据备份等数据安全领域.参考文献:[1]Nagar R.Windows N T file system internals[M].NewY ork:O.Reilly&Associates,1998.[2]Oney Walter.Programming the microsoft windows drivermodel[M].Redmond,Wash:Microsoft Press,1999. [3]武安河.Windows2000/XP WDM设备驱动程序开发[M].北京:电子工业出版社,2005.[4]S olomon D A,Mark E.Russinovich.Windows2000技术内幕[M].北京:北京大学出版社,2001.[5]Baker A,Lozano J.Windows2000设备驱动程序设计指南[M].北京:机械工业出版社,2001.[6]张之勇,郑方伟,佘 ,等.Windows N T文件系统实时监控的实现[J].计算机应用,2007,27(5):273-274. [7]李民,方勇.基于文件系统过滤驱动的文件加/解密技术研究与实现[J].四川:四川大学,2006.作者简介:刘 伟 男,(1983-),硕士研究生.研究方向为计算机网络安全.胡 平 男,(1941-),副教授,硕士生导师.研究方向为计算机控制、智能自动化、计算机网络安全.(上接第113页)[3]陈原.测量数据处理过程中干扰数据的提出与取代[J].计量与测试技术,2005,32(10):16-17.[4]林洪桦.剔除异常数据的稳健性处理方法[J].中国计量学院学报,2004,15(1):20-24.[5]谭义红,林亚平,董婷,等.传感器网络中异常数据实时检测算法[J].系统仿真学报,2007,19(18):4335-4338.作者简介:曹菊英 女,(1975-),硕士,讲师.研究方向为信息安全与计算机网络技术等.赵跃龙 男,(1958-),博士,教授,博士生导师.研究方向为计算机信息存储系统等.711 第4期刘伟,等:基于文件系统过滤驱动的文件加密系统设计。

一种基于文件过滤驱动和TrueCrypt的文件系统保护方案

一种基于文件过滤驱动和TrueCrypt的文件系统保护方案

一种基于文件过滤驱动和TrueCrypt的文件系统保护方案孙小雨;杨涛;胡晓勤【期刊名称】《现代计算机(专业版)》【年(卷),期】2016(000)003【摘要】In recent years, with the rapid development of computer network, the importance to computer information security is becoming more and more increasingly being emphasized. Especially the government and enterprise internal information is particularly important. But the tra-ditional antivirus software and Trojan Avira software effect is not good, to Trojan and virus behavior analysis and the characteristic database often because innovation virus exists, because without the latest feature library and behavior cause effect is not good. So we use a new virtual disk file system filter driver of file redirection and TrueCrypt protected mode on the user's confidential documents based on protection.%近几年,随着计算机网络的高速发展,对于计算机信息安全的重要性越来越被强调,尤其是政府和企业的内部资料显得尤为重要。

Windows文件系统过滤驱动在防病毒方面的应用

Windows文件系统过滤驱动在防病毒方面的应用

Windows文件系统过滤驱动在防病毒方面的应用发表时间:2009-10-1 刘伟胡平来源:万方数据关键字:文件系统过滤驱动防病毒病毒特征码信息安全信息化应用调查我要找茬在线投稿加入收藏发表评论好文推荐打印文本在操作系统内核层,对用户模式应用程序请求读写的磁盘数据进行病毒扫描。

介绍文件系统过滤驱动的工作原理,利用文件系统过滤驱动,捕获用户应用程序发往目标文件系统驱动的磁盘操作请求,进而获得这些操作请求的处理权,论述防病毒的工作原理,利用文件扫描程序扫描文件系统过滤驱动程序截获的文件数据,并与特征码库中的病毒特征码进行匹配。

若匹配成功,则通知用户模式应用程序进行处理;否则,不做处理,防止从磁盘读取病毒文件或将病毒文件写入磁盘。

0 引言近几年计算机病毒也正以惊人地速度蔓延,对计算机及其网络系统的安全构成严重威胁。

本文提出利用文件系统过滤驱动,捕获用户应用程序向磁盘写入或读出的文件数据,对其进行扫描,并与病毒特征码库中的病毒特征码匹配,以判断是否是病毒文件或染毒文件:根据扫描结果确定是否为病毒文件或染毒文件,以及是否与用户模式应用程序进行通信。

文件系统过滤驱动运行于操作系统内核,其安全性得到操作系统的保证,安全性较高。

1 文件系统过滤驱动原理文件系统过滤驱动是针对文件系统而言的,属于内核模式程序,运行于操作系统的内核模式,仅能附着到目标文件系统驱动的上层。

文件系统驱动是存储管理子系统的一个组件,为用户提供多种手段,将信息存储到永久介质(如磁盘、磁带等),或从永久介质获取信息。

图1显示了文件系统过滤驱动和文件系统驱动与用户应用程序之间的服务关系,应用程序对磁盘发出的操作请求,首先到达 I/O子系统管理器。

在进行读写磁盘数据的时候,缓存管理器会保存最近的磁盘存取记录,所以在接收到应用程序读写磁盘的操作请求后,I/O子系统管理器会先检查所访问的数据是否保存在缓存中,若缓存中有要访问的数据,I/O子系统管理器会构造Fast I/O请求包,从缓存中直接存取数据;如果所需数据不在缓存中,I/O子系统管理器会构造相应的IRP,然后发往文件系统驱动,同时缓存管理器会保存相应的记录。

文件系统Minifilter驱动

文件系统Minifilter驱动

文件系统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这个唯一标识符决定。

WindowsNT内核下文件系统过滤驱动程序开发

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 内核下文件系统过滤驱动程序开发 。

重定向在文件系统过滤驱动中的实现及其应用

重定向在文件系统过滤驱动中的实现及其应用
系统 的 隔 离 ,保 障 了操 作 系统 的 安全 , 同 时使系统的备份 、迁移和升级更加 简单 灵 活 ,保 障 了操 作 系统 的安 全 。 具 体 实 现 方 案是 在 一 个 文 件 系统 过 滤 驱 动程 序 中 ,重定 向特 定 的 文件 操 作 。 任应 用程 序部 署安装 过程 中 ,把对 系统 分 区 改 写的 文 件 操 作 重 定 向到 指 定 的 应 用 程序专 用存 储 区域 。在应 用程序 运行过 程 中 ,若 有 对 系 统 分 区 文 件 的 读 写操 作 ,首 先 判 断 该文 件 是 否 存 在 于 此 应 程 序存 储 区域 ,存在 则将文 件操 作重定 向 到 这 个 存 储 域 的 相 应 文 件 , 否 圳 冉 判 断 是 读 还 是 写操 作 来决 定 是 否 重 定 向 。 在文件 系统过滤驱动程序的驱动 人 F完成 I 对 卷 的 绑 定 并 设 置 各 分 发 例 程 , 住
机 械 工 业 出版社 ,2 0 0 0.
[]NgrR iosN i S s m 2 aa 、Wn w T Fe yt d l e Ie a[] e o :0  ̄U n r l 、Nw Yr 、Pi tns M k e y&
Aso it s 1 8. s ca e . 99
I P MJ R
— —
C E E 分发 例 程 中完 成 主要 R AT 的 功 能 ,工作流 程如 图 3所示 。
英特尔硬件辅 助虚拟化 ( T) 术的 V 技 现 和运 用 , 使 同 ・ 物 理 台 同时 运 行 个 多 个 操 作 系统 、每 个 操 作 系统 运 行 一 个 应用程序变为 叮能 ,避免了同 个系统运 行多个应用的瓦相影响。这就需 要应用程 序 与操 作 系统 数 据 的 分 离存 储 ,来 保 证 用程 序 与 操 作 系统 的 动 态组 合 。 町以预 见 ,

文件过滤驱动在网络安全终端中的应用

文件过滤驱动在网络安全终端中的应用

App ia i n o l y t m le ie n n t r e u e tr i l lc to ff e s se f t r ቤተ መጻሕፍቲ ባይዱrv r i e wo k s c r e m na i i
Q i L igb o B I a , I n U J , I n —a, A n WE n Q Y Mi
维普资讯
第2 7卷 第 3期
20 0 7年 3月
文章编号 :0 1 9 8 (0 7 o 0 2 O 10 — 0 1 2 o )3— 64一 3
计 算机应 用
Co u e mp trApp ia in lc t s o
Vo . 7 No 3 12 .
日渐突出。 目 前存在专 门针对 网络系统信息 进行 的窃取 、 篡 改等破坏行 为 , 对网络用 户的信息安 全构成 了巨大威胁 。尤 其 是人们在 网络终端计算机 中存储的数据文件信息成 了黑客
们 觊觎 的对象 。 本文介绍 了一个基 于 Widw T内核 下文件 系统过 滤 no sN 驱动 的 网络 终 端 设 备 信 息 防 泄 漏 系 统 ( e ok T r ia N t r em n w l D v eI o ao ni aaeSs m, T IL ) e c r tnA tL k g yt N D A S 的设计和 实 i nm i f - e e 现过程 。该系统对网络终端 的机密文 件信息进 行实时监 控 、 加密存储和传输保护 , 有效地 防止 了机密信息的泄漏 , 网络 为 终端 的信息筑起 了一道安全屏障。
件 系统过滤驱动的运用 , 实现了对网络终端机 密文件的实时监控和动态加解密, 既具有文件加 密的安 全性 , 又具有访问控制的方便性 , 有效地 防止了网络终端机 密信息的泄漏。 关键 词 : 文件 系统过 滤驱动 ; 态加 解 密 ; 问控 制 动 访
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013年第10期 初探文件系统微过滤驱动 文/图 李旭昇 文件系统微过滤驱动(File System Mini-Filter,简称MiniFilter)是微软为了简化文件过滤驱动开发过程而设计的新一代文件过滤框架。MiniFilter通过向过滤管理器(Filter Manager,简称FltMgr)注册想要过滤的I/O操作来间接地附加到文件系统设备栈上。FltMgr是一个传统的文件过滤驱动,运行在内核模式,向第三方MiniFilter提供文件过滤驱动的常用功能。如图1所示是一个简化的I/O设备栈,其中有一个FltMgr和三个MiniFilter。

图1 简化的I/O设备栈 针对每一种I/O操作,MiniFilter只需注册预处理回调(pre-operation callback)和后处理回调(post-operation callback)即可。FltMgr会恰当的处理IRP并在I/O操作的前、后调用上述两个回调。 与传统过滤驱动相比,MiniFilter优势明显。首先,MiniFilter代码十分简洁,开发迅速。除去一些必要的注册工作,我们只需提供两个回调就可以完成对一种I/O操作的过滤(甚至可以只提供一个,将另一个设为NULL)。对于我们不感兴趣的I/O操作,FltMgr将完成基本的处理并继续传递。其次,MiniFilter是微软文档化的方法,具有良好的稳定性与跨平台性,一份代码不需修改便可以在不同系统上工作。另外,FltMgr还提供了许多通用的函数,帮助我们获得文件名等有用的信息。 下面我们动手编写一个MiniFilter。DriverEntry中通过FltRegisterFilter注册MiniFilter,再通过FltStartFiltering开始过滤。

extern "C" NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath ) { DriverObject->DriverUnload=Unload;

黑客防线 www.hacker

.

com.cn

转载请注明出处2013年第10期 DbgPrint("Load!\n"); NTSTATUS status; //注册MiniFilter status=FltRegisterFilter(DriverObject,&FilterRegistration,&FilterHandle); if(!NT_SUCCESS(status)) { DbgPrint("Fail to Register.\n"); DbgPrint("%d\n",status==STATUS_OBJECT_NAME_NOT_FOUND); return STATUS_SUCCESS; } //开始过滤 status=FltStartFiltering(FilterHandle); if(!NT_SUCCESS(status)) { //启动失败,取消注册,返回 FltUnregisterFilter(FilterHandle); DbgPrint("Fail to Start.\n"); return STATUS_SUCCESS; }

DbgPrint("MiniFilter Started!!!\n"); return STATUS_SUCCESS; }

FltRegisterFilter的原型为: NTSTATUS FltRegisterFilter( _In_ PDRIVER_OBJECT Driver, _In_ const FLT_REGISTRATION *Registration, _Out_ PFLT_FILTER *RetFilter ); 第一个参数为驱动对象,即DriverEntry中传入的参数;第二个参数指向FLT_REGISTRATION结构,我们稍后详细介绍;第三个参数是返回的MiniFilter句柄,需要保存在全局变量中,因为函数FltStartFiltering和FltUnregisterFilter都要用到它。注册成功后,调用FltStartFiltering开始过滤,如果启动失败,就调用FltUnregisterFilter取消注册。 FLT_REGISTRATION结构定义如下:

typedef struct _FLT_REGISTRATION { USHORT Size; USHORT Version; FLT_REGISTRATION_FLAGS Flags; const FLT_CONTEXT_REGISTRATION *ContextRegistration; const FLT_OPERATION_REGISTRATION *OperationRegistration;

黑客防线 www.hacker

.

com.cn

转载请注明出处2013年第10期 PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback; PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback; PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback; PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback; PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback; PFLT_GENERATE_FILE_NAME GenerateFileNameCallback; PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback; PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback; } FLT_REGISTRATION, *PFLT_REGISTRATION;

Size为结构的大小,按部就班的设为sizeof(FLT_REGISTRATION)即可;Version为版本,必须设为FLT_REGISTRATION_VERSION;FilterUnloadCallback在MiniFilter卸载时被调用,不提供该函数将导致MiniFilter不能卸载,会带来许多不便。我们将其设为FileFilterUnload,代码很简单,只需用FltUnregisterFilter取消MiniFilter的注册即可。这里需要注意,在DriverUnload例程中,我们不能再次调用FltUnregisterFilter,这是因为FltMgr已经调用过FilterUnloadCallback,MiniFilter已经被取消注册,再次取消注册将导致蓝屏。 OperationRegistration为一组FLT_OPERATION_REGISTRATION结构,其结束标志为IRP_MJ_OPERATION_END。FLT_OPERATION_REGISTRATION结构的定义如下:

typedef struct _FLT_OPERATION_REGISTRATION { UCHAR MajorFunction; FLT_OPERATION_REGISTRATION_FLAGS Flags; PFLT_PRE_OPERATION_CALLBACK PreOperation; PFLT_POST_OPERATION_CALLBACK PostOperation; PVOID Reserved1; } FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;

其中MajorFunction指定了我们感兴趣的I/O操作,PreOperation和PostOperation为相应的预处理回调和后处理回调。Flags设为0即可。我们只对IRP_MJ_CREATE感兴趣,并预处理回调FileFilterPreCreate和后处理回调FileFilterPostCreate。 const FLT_OPERATION_REGISTRATION Callbacks[] = { {IRP_MJ_CREATE, 0, (PFLT_PRE_OPERATION_CALLBACK)FileFilterPreCreate, (PFLT_POST_OPERATION_CALLBACK)FileFilterPostCreate}, {IRP_MJ_OPERATION_END} }; 读者可以自行修改Callbacks来添加对其他I/O操作的过滤。我们的后处理回调FileFilterPostCreate只是返回了FLT_POSTOP_FINISHED_PROCESSING,没有额外的操作。预处理回调FileFilterPreCreate的逻辑也不复杂,首先判断当前操作的文件的后缀名是否为virus,

黑客防线 www.hacker

.

com.cn

转载请注明出处

相关文档
最新文档