minifilter必须把该句柄传递FltSendMessage之类的函数,作为第二个参数。 DisconnectNotifyCallback 客户端所有连接端口中断,或者minifilter卸载时的回调。 ***MessageNotifyCallback 用户态消息处理回调。 端口名类似L"\\MyFilterPort" 应用程序通过返回的端口句柄与minifilter通信。 2. 发送数据 FilterSendMessage 发送message给内核minifilter message发送到minifilter的消息通知回调函数中,在这里处理消息。 调用者处于等待状态,直到消息被传递并收到minifilter的replay。 当然如果希望有replay,那么outbuffer参数不能为空。 3.
MINIFILTER框架的文件系统过滤驱动,无法使用的CreateService和OpenService进行动态加载。 看了一下,使用Inf文件安装Minifilter驱动的方式是在注册表驱动服务项下比传统驱动多创建了Instances子键,然后读取DefaultInstance值,这个值标明了Instance选项,然后 知道两者区别后就很容易通过些注册表的方式进行Minifilter的动态安装。 下面是实现代码 头文件实现: ? ?
Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使用过滤管理器 图片由于MiniFilter提供了FltEnumerateFilters函数,所以只需要调用这些函数即可获取到所有的过滤器地址,我们看下微软公开的信息。 i = 0;LONG lOperationsOffset = 0;PFLT_OPERATION_REGISTRATION pFltOperationRegistration = NULL;// 获取 Minifilter (NonPagedPool, ulFilterListSize *sizeof(PFLT_FILTER));if (NULL == ppFilterList){return FALSE;}// 获取 Minifilter 过滤器数量: %d \n", ulFilterListSize);// 获取 PFLT_FILTER 中 Operations 偏移lOperationsOffset = 0x1A8;// 开始遍历 Minifilter
简单地来看下Minifilter技术的介绍: ? Filter管理器随Windows一起被安装,但它只在一个minifilter驱动被加载时才会起作用。Filter管理器绑定到目标卷的文件系统栈上。 Minifilter驱动为它要过滤的I/O操作而通过向filter管理器注册来间接绑定到文件系统栈上。 Filter管理器随Windows一起被安装,但它只在一个minifilter驱动被加载时才会起作用。 Filter管理器绑定到目标卷的文件系统栈上。 Minifilter驱动为它要过滤的I/O操作而通过向filter管理器注册来间接绑定到文件系统栈上。 参考文档: WDK之Minifilter权威教程 *本文作者:lzldhu,转载须注明来自FreeBuf.COM
目录 MiniFilter文件过滤第一讲 文件过滤框架以及安装方式 一丶MiniFilter 文件过滤框架 1.1 简介 1.2 MiniFilter框架 二丶MiniFilter 编程框架 2.1 简介 的使用 3.1 Inf安装方式 以passThrough 此例子的Inf讲解 3.2 使用驱动 MiniFilter文件过滤第一讲 文件过滤框架以及安装方式 一丶MiniFilter 文件过滤框架 1.1 简介 MiniFilter是微软为我们开发的一个新的驱动,称为过滤管理器. 不足: MiniFilter开发的时候虽然简单了但是隐藏了很多细节.比如设备对象等等.如果使用以前的方式进行开发 那么就如同 C语言内嵌汇编 对兼容性不好 也失去了MiniFilter的意义. 1.2 MiniFilter框架 框架如下: 在IO管理器中我们的 MiniFilter会去进行注册.
MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 [DefaultInstall.Services] AddService = %ServiceName%,,MiniFilter.Service [DefaultUninstall ] DelFiles = MiniFilter.DriverFiles [DefaultUninstall.Services] DelService = %ServiceName%,0x200 ;Ensure service is stopped before deleting [MiniFilter.Service] ;服务的一些信息 DisplayName ;文件过滤注册表需要添加的高度值等信息 [MiniFilter.AddRegistry] HKR,,"DebugFlags",0x00010001 ,0x0 HKR,"Instances
这是 CmRegisterCallbackEx 函数新增的参数,这个参数在 MSDN 中描述如下: The Altitude parameter defines the position of the minifilter driver relative to other minifilters in the I/O stack when the minifilter is loaded. For more information about altitudes, see Load Order Groups and Altitudes for Minifilter Drivers.
MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 [DefaultInstall.Services]AddService = %ServiceName%,,MiniFilter.Service[DefaultUninstall]DelFiles = MiniFilter.DriverFiles[DefaultUninstall.Services]DelService = %ServiceName%,0x200 ;Ensure service is stopped before deleting[MiniFilter.Service] ;服务的一些信息DisplayName = %ServiceName ");}if (strcmp(str, "stop") == 0){printf("[-] 关闭驱动 \n");StopDriver("minifilter");}}return 0;}至此分别编译驱动程序
MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 [DefaultInstall.Services] AddService = %ServiceName%,,MiniFilter.Service [DefaultUninstall ;Ensure service is stopped before deleting [MiniFilter.Service] ;服务的一些信息 DisplayName ;文件过滤注册表需要添加的高度值等信息 [MiniFilter.AddRegistry] HKR,,"DebugFlags",0x00010001 ,0x0 HKR,"Instances "); } if (strcmp(str, "stop") == 0) { printf("[-] 关闭驱动 \n"); StopDriver("minifilter");
其中驱动部分功能的正常运行需要应用层初始化数据来进行配合,如果单独运行驱动,将直接导致蓝屏,这也在一定程度上增加了分析的难度,值得一说的是,该恶意程序驱动层与应用层的通行采用的并非是常见的DeviceIoControl模型,而是采用的MiniFilter A)通过MiniFilter保护自身相关模块,禁止其他程序访问。 B) 通过MiniFilter检测调试工具,包括OllyDbg,Pchunter,360tcpview,netstat等调试工具,一旦驱动成功运行,这些工具都不能获得正常的运行。
核心逻辑解析 初始化偏移量 通过操作系统版本号(dwMajor 和 dwBuild),动态确定 MiniFilter 数据结构中的关键偏移量: instanceListOffset:FLT_FILTER 函数 2:ClearMiniFilterCallBack 功能概述 枚举系统中所有 MiniFilter 驱动,并对其进行回调清理。 核心逻辑解析 1、定位全局 MiniFilter 数据结构 通过搜索指定模式(调用 FindPattern 函数),找到 FltGlobals 数据结构的位置。 2、处理 MiniFilter 驱动列表 遍历 FLT_FILTER 链表: 获取每个 MiniFilter 驱动的地址及名称(通过 ReadDriverName)。
(https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/load-order-groups-and-altitudes-for-minifilter-drivers https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/load-order-groups-and-altitudes-for-minifilter-drivers
因为MsMpEng采用文件系统minifilter来拦截以及检查所有的文件系统活动,所以给硬盘的任意位置写入相应内容就能实现mpengine中函数的访问。
具体而言,该项目删除以下6大内核函数注册的回调使EDR失去相关能力:CmRegisterCallback、MiniFilter、ObRegisterCallbacks、PsSetCreateProcessNotifyRoutine
由于在驱动层并没有一种通用的机制主动发起向应用层的通信(minifilter在建立和应用层的端口通信后,可以主动发起通信),而LPC恰好可以弥补这一不足,所以便一探这陈酒。
应用框架 Sfilter/Minifilter 文件过滤框架.可以使用Nt模型.
可以直接使用minifilter驱动。
如果失败则卸载注册的回调 FltUnregisterFilter( NullFilterData.FilterHandle ); } } DbgPrint("Minifilter
首先,minifilter有!fltkd.的命令,ndis有!ndiskd.的命令,但是WFP却没有类似的命令。