毕业论文正文第1页共37页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请求的进程及线程的相关信息,如:获得发起进程名称,与安全访问规则(进程白名单)中的可信进程相比较,若该进程位于规则中,说明信任其行为是安全的,允许访问受保护文件;否则,拒绝访问。4访问审计对受保护的文件或是对系统安全有影响的系统配置文件、注册表文件以及一些容易受病毒感染的dll和exe文件进行访问操作的事后收集工作。文件系统过滤驱动程序针对所关心的文件及访问操作,在相应的IRP分发例程中收集访问信息,以日志的格式呈现给用户。有了足够多的访问记录,管理员或审计员就可以采取各种分析方法,如病毒特征关键字匹配、访问行为统计等来识别出可疑的行为动作,从而采取适当的措施来确保以后访问的安全性。1.2何谓文件系统过滤驱动以及与设备驱动的异同1文件系统过滤驱动的定义文件系统过滤驱动是一种可选的,为文件系统提供具有附加值功能的驱动程序。文件系统过滤驱动是一种核心模式组件,它作为WindowsNT执行体的一部分运行。毕业论文正文第2页共37页文件系统过滤驱动可以过滤一个或多个文件系统或文件系统卷的I/O操作。按不同的种类划分,文件系统过滤驱动可以分成日志记录、系统监测、数据修改或事件预防几类。通常,以文件系统过滤驱动为核心的应用程序有防毒软件、加密程序、分级存储管理系统等。2文件过滤驱动与设备驱动的比较设备驱动是用来控制特定硬件I/O设备的软件组件。例如:DVD存储设备驱动是一个DVD驱动。相反,文件系统过滤驱动与一个或多个文件系统协同工作来处理文件I/O操作。这些操作包括:创建、打开、关闭、枚举文件和目录;获取和设置文件、目录、卷的相关信息;向文件中读取或写入数据。另外,文件系统过滤驱动必须支持文件系统特定的功能,例如缓存、锁定、稀疏文件、磁盘配额、压缩、安全、可恢复性、还原点和卷装载等。下面详细的阐述文件系统过滤驱动和设备驱动之间的相似点与不同点。1、文件系统过滤驱动同设备驱动的相似点:(1)、类似的结构类似于设备驱动,文件系统过滤驱动有着属于自己的DriverEntry、Dispatch和I/O组件例程。文件系统过滤驱动同设备驱动一样调用许多相同的系统核心例程,它们都会过滤发送给它们所关联的设备的I/O请求。(2)、类似的功能:文件系统过滤驱动和设备驱动都是I/O子系统的组成部分,因此它们都接收和作用于I/O请求包(IRP)。类似于设备驱动,文件系统过滤驱动同样可以创建它们自己的IRP并将该IRP发送到低层驱动。这两种驱动均可以通过注册回调函数来接收多种系统事件的通知。(3)、其它类似点:同设备驱动类似,文件系统过滤驱动可以接收传入的I/O控制码(IOCTLs)。而且,文件系统过滤驱动还可以接收和定义文件系统控制码(FSCTLs)。同设备驱动类似,文件系统过滤驱动可以被配置为在系统引导过程中加载或者在系统启动过程完成后加载。2、文件系统过滤驱动同设备驱动之间的不同点:(1)、无需电源管理由于文件系统过滤驱动并不是真正的设备驱动,而且它们不需要直接控制硬件设备,因此它们并不接收IRP_MJ_POWER请求。(电源管理IRP将直接发送到存储设备堆栈中。但是,在非常罕见的情况下,文件系统过滤驱动有可能会影响到电源管理。)由此,文件系统过滤驱动并不注册IRP_MJ_POWER相关例程,它们也不会调用PoXxx例程。(2)、非WDM文件系统过滤驱动并不是WDM驱动程序,WDM驱动模型仅适用于设备驱动。(3)、没有AddDevice或StartIo例程由于文件系统过滤驱动并不是设备驱动,而且它们并不直接控制硬件设备,因此它们没有AddDevice或StartIo例程。(4)、创建不同的设备对象虽然文件系统过滤驱动和设备驱动均需要创建设备对象,但是它们所创建的设备对象的种类和数量都是不同的。设备驱动创建物理和功能设备对象来描述设备。即插即用(PnP)管理器将构建一个设备树来存放所有由设备驱动所创建的设备对象。毕业论文正文第3页共37页文件系统过滤驱动所创建的设备对象,并不包含在这个设备树中。文件系统过滤驱动并不创建物理或功能设备对象,它们创建控制设备对象和过滤设备对象。控制设备对象对系统和用户模式应用程序提供过滤驱动的描绘。过滤设备对象执行对指定文件系统或卷的实际过滤工作。文件系统过滤驱动通常创建一个控制设备对象和多个过滤设备对象。(5)、其它不同点:由于文件系统过滤驱动并不是设备驱动,因此他们将不会执行直接内存访问(DMA)。与设备过滤驱动不同,设备过滤驱动可以附加到目标设备功能驱动的上层和下层,文件系统过滤驱动仅能附加到目标文件系统驱动的上层。因此在设备驱动队列中,文件系统仅能进行上层过滤而无法进行下层过滤。1.3文件系统过滤驱动的工作原理1文件系统驱动文件系统驱动是存储管理子系统的一个重要组成部分,它向用户提供在磁盘或光盘等非易失性媒介信息的存储、转发,同时和存管理器、高速缓冲管理器紧密结合,不但保证了应用程序可以准确地提取数据文件的内容,而且提高了访问效率。用户进程对磁盘上文件的创建、打开、读、写等操作由WIN32子系统调用相应的服务来代表该进程发出请求操作。I/O管理器接收到上层传来的I/O请求,通过构造输入输出请求包IRP(I/ORequestPackage)来描述这个请求,然后向下传递给文件系统驱动、存储设备驱动做后续处理,低层驱动处理完毕后把结果依次向上返回,最后经过I/O管理器,由WIN32子系统把结果返回给发出请求的应用进程,整个对文件的操作请求执行完毕。Windows的I/O管理器是可扩展结构,支持分层驱动模型,这样按照我们的需求开发具有某种功能的驱动程序插入到这个层次结构当中,截获所需处理的IRP进行处理,然后再继续向下传递或直接向上返回结果。2文件系统过滤驱动文件系统过滤驱动是针对文件系统而言,它既可以位于文件系统驱动之上,也可以被插在文件系统驱动和存储设备驱动之间。I/O管理器在发送文件操作请求到目标设备对象之前,会检查是否有附加的设备对象挂载在目标设备之上,若有,则把该IRP先发送给附加设备,经附加设备所属驱动程序的处理后,再发送给目标设备完成操作请求。这样通过文件系统过滤驱动程序构造附加设备对象挂载在文件系统的存储设备之上,在过滤驱动程序中对发送到目标设备的操作请求进行预期处理,达到控制文件访问、保护文件安全性等目的。1.4文件系统过滤驱动开发过程和其他应用程序一样,驱动函数也有一个主函数,称为入口函数DriverEntry,格式为:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath)。DriverObject是驱动对应的驱动对象,是系统在加载驱动时分配的。RegistryPath是专用于记录驱动相关参数的注册表路径,也是由系统所分配。DriverObject驱动对象拥有一组函数指针,称为dispatchfunctions,在IRP发送给目标设备之前,编写这组函数,在dispatchfunctions中按照功能需求处理这些IRP,可以让IRP失败掉,或使其成功返回,或对其进行修改,甚至可以自己构造IRP向下层驱动程序发送。在DriverEntry中首先调用系统函数IoCreateDevice生成一个控制设备对象CDO,作用是修改整个驱动的内部配置。接着对所要监控的目标设备对象进行绑定,过程如下:调用ZwCreateFile函数获得设备对象句柄ntFileHandle,再通过ObReferenceObjectByHandle函数生成该ntFileHandle毕业论文正文第4页共37页描述的文件设备对象指针FileObject(WindowsNT把每个设备当作一个文件来看待,并用一个FILE_OBJECT结构描述其属性);调用IoGetRelatedDeviceObject得到该文件对象对应的设备对象fileSysDevice,即我们最后要绑定到目标设备对象上的附加设备对象;最后我们调用AttachTOTargegDeviceObject把刚生成的附加设备对象fileSysDevice绑定到目标设备对象上。成功绑定后,在过滤驱动中截获所关注的IRP,设置分发例程,对于不关注的IRP调用默认例程直接向下传递。以上所有工作完成后,清除DeviceObject初始化标记,整个过滤驱动构造完毕,可以加载使用。上边的绑定是对系统本地卷的绑定,称为静态绑定。当一个U盘插入USB端口,一个名为“J”的卷动态产生时,要求能够生成一个设备来绑定它,称这种绑定为动态绑定。一个新的存储媒质被系统发现并在文件系统中生成一个Volume的过程称为Mounting。过程开始时,文件系统CDO收到一个MajorFunctionCode为IRP_MJ_FILE_SYSTEM_CONTROL,MinorFunctionCode为IRP_MN_MOUNT的IRP。如果已绑定了文件系统CDO,则可以得到这样的IRP,在其中知道一个新的Volume正在Mounting,这时再按照上边的静态绑定方法来绑定这个新生成的卷设备对象。微软为我们提供了一个有用的系统调用IoRegisterFsRegistrationChange,用它来注册一个回调函数,当系统中有任何文件系统被激活或撤消时,注册过的回调函数就会被调用,在回调函数中绑定刚激活的文件系统的控制设备对象,在的分发例程中绑定这个新卷设备对象。2USB管理系统1:文件系统过滤驱动USB管理系统是一个对U盘进行读写控制操作的文件系统过滤驱动程序,在系统的过滤层进行监控,对辅存发向内存的数据包IRP进行截获,然后分析IRP包,通过分析对U盘文件进行操作。。并用MFC实现一个界面清晰,操作简单的USB管理系统,可以实现连接驱动、禁止读写、开放读写、只读、安装驱动、卸载驱动等操作。是一款功能完整的U盘读写控制的管理系统。2.1开发目的现在有很多人需要开发文件系统驱动,windows的PC机上以过滤驱动居多,其目的不外乎以下几种:一是用于防病毒引擎。希望在系统读写文件的时候,捕获读写的数据内容,然后检测其中是否含有病毒代码。二是用于文件系统的透明附加功能。比如希望在文件写过程中对数据进行加密,数据个性化等等过程,针对特殊的过