目录
SFilter框架(3):规则下发、规则匹配
目录
Win中的文件路径
- 这里需要植入一个前置思想:Win平台中使用的路径只有
Dos路径、NT路径两种,如下所示:
DOS 路径
C:\Windows\System32\xxx.sys
NT 路径
\Device\HarddiskVolume3\Windows\System32\xxx.sys- 在我们日常工作中,遇到的99%文件路径都是
Dos路径 - 但是不要忘记一句话:Windows下万物皆对象,系统内核在运行时,会将硬盘也当作一个内核对象,即
\Device\HarddiskVolume3,但是为了让R3程序可以正常使用这个对象,必须创建一个符号链接,将该内核对象暴露到3环,这个符号链接就是C: - 这里笔者有一个比较武断、但是好理解的说法:Win内核在运行时,涉及到的各种文件路径,最后都会统一转换为
NT路径访问目标文件
DOS 路径
C:\Windows\System32\xxx.sys
│
│ 盘符 C: 是符号链接
↓
NT 路径
\Device\HarddiskVolume3\Windows\System32\xxx.sys
│
└── \Device\HarddiskVolume3 = Volume 的设备对象名称SFilter驱动中Create回调
NTSTATUS FsFilterDispatchCreate(
__in PDEVICE_OBJECT DeviceObject,
__in PIRP Irp
)
{
PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;
/*
\Users\Administrator\Desktop\Dbgview.vmp.exe.lnk
\Users\Administrator\Desktop
\Users\Administrator\Desktop
\Users\Administrator\Desktop\Dbgview.vmp.exe.lnk
*/
DbgPrint("%wZ\n", &pFileObject->FileName);
return FsFilterDispatchPassThrough(DeviceObject, Irp);
}- 可以看到,在
FsFilterCreate回调中能直接获取到的是相对路径,假设该文件为C盘
R3程序
C:\Users\Administrator\Desktop\Dbgview.vmp.exe
R0程序
\Device\HarddiskVolume3\Users\Administrator\Desktop\Dbgview.vmp.exe- 出于我们的开发习惯,不管是设计主防规则、还是匹配主防规则时,我们都希望统一面对的是
Dos路径
坑点
NT路径转Dos路径
- 在
Legacy驱动中路径转换是非常麻烦、费力的事情,没必要花大量时间自己实现一套完美的路径获取、路径转换库 - 在实际工作中,
Legacy工程直接选用已经被市场验证过功能完善、运行稳定的库。如果是MiniFilter框架,更是几行代码就实现了路径获取、转换
长短名问题
- 短名:技术债,也叫8.3文件名
C:\PROGRA~1\、C:\Program Files指向的是同一个目录- 如果不将短名转为长名,就会导致规则匹配遗漏问题
FsCreate不一定是打开文件
- 也有可能是打开(新建)一个目录,打开目录这个行为本身不是高危动作,
Hips一般会放行
规则匹配(通配符)
Hips主防驱动中,常用的是通配符表达式,例如设置规则C:\Windows\System32\*.sys,表示监控该路径下的所有驱动文件操作