阅读:4016回复:20
在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪个文件将要被执行?
在做一个文件保护项目,以sfilter为模版,参考了tooflat的加密驱动、filespy、filemon等程序。第一阶段,在操作系统启动过程中,对驱动程序、系统服务、自启动应用程序进行校验。原理:在IRP_MJ_CREATE中拦截以上文件的打开请求,下传IRP读取文件内容,与先验存储的HASH比对。此部分工作已完成。
接下来,在系统启动后,计划对用户执行的EXE程序进行校验,拦截EXE执行的首个CREATE请求,与用户交互判断是否执行,取HASH值后放行后继的CREATE请求。目前遇到的问题是:当打开一个目录时,会拦截到Explorer对目录下所有文件的间断CREATE操作,如何从中区分中哪一个是文件运行的CREATE请求? 试过IRP的几个标志位,没有明确的结果。此时是否要转到对进程的监控更有效?PsSetCreateProcessNotifyRoutine or Hook SSDT? 项目结束后,将代码整理一下,学习学习tooflat的精神,如果有人需要,可以共享,虽然都是些很基本的东西。 |
|
最新喜欢:![]() |
沙发#
发布于:2007-09-14 10:49
xx_qiang看到我发的短信了吗?有空加QQ聊聊,呵呵
|
|
板凳#
发布于:2007-09-14 10:44
针对EXE的打开请求,先检查Hash Table,根据Table内容,决定是否放行。如果不在Table中,又检测DesiredAccess =FILE_EXECUTE,就去询问用户,如果用户允许,就将路径添加到Hash Table中,这样同一个EXE不会询问客户两次或以上。
|
|
地板#
发布于:2007-09-14 10:35
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
这样不行吧?我记得一次操作会有多次这样的请求。。。 |
|
地下室#
发布于:2007-09-14 09:49
在2K系统中,判断DesiredAccess&0xF0 = FILE_EXECUTE(也就是0x20)
|
|
5楼#
发布于:2007-09-12 22:22
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
PsSetLoadImageNotify() can only be used for monitoring purpose. It cannot prevent an executable from executing. |
|
6楼#
发布于:2007-09-12 20:14
It is extremely hard using IRP's to determine an executable is starting. I
would recomend use PsSetLoadImageNotify to determine a process is loading a particular executable. Note: that as has been disucussed many times, this approach as a protection scheme is incredibly easy to overcome. If you use the pathname, to defeat things just change the path. If you hash the executable, just modify the resource section, etc. -- Don Burn (MVP, Windows DDK) Windows 2k/XP/2k3 Filesystem and Driver Consulting Remove StopSpam from the email to reply |
|
7楼#
发布于:2007-09-12 18:55
xx_qiang,看过你05年在驱网发的帖子,问题和这个类似。明天看看2K的版本特殊在哪里。
是啊,现在都07年了,....呵呵,闻道有先后,还要多向大家请教。 |
|
8楼#
发布于:2007-09-12 18:28
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
版本之间的差距是挺大的,其中2000最特殊,xp和2003比较类似。但各个sp之间可能也有稍微的不同。这种东西有过商业化的版本,是个台湾的公司,但那是2005年的事了。。。。。 |
|
9楼#
发布于:2007-09-12 17:23
呵呵,wowocock 老大说的不错的,一开始苦恼的就是这个问题,用户的手要点残废了。
Explorer会不定时Create所有的文件,现在在XP中检测,发现当EXE运行时,关键的一个Create请求,其DesiredAccess&0xF0 = FILE_EXECUTE|FILE_READ_ATTRIBUTES(也就是0xa0),其它的Create请求(包括Explorer打开的)不具有这个特征。这样Explorer打开的就都可以放过了。(感谢xx_qiang 的提示) 还有一个前提,系统常运行的EXE文件路径都事先存在Hash Table里,该放行就放行了。 这种方法具体的可行性与版本适用性还有待测试。有空再去试试Hook zwcreatesection。 请问wowocock老大,“结合其他处理”是指什么? |
|
10楼#
发布于:2007-09-11 20:55
在打开目录的时候,所有的EXE文件,均有该请求过来,如果某目录下有几百个EXE,估计你的用户会把你劈了。。。。。。
|
|
|
11楼#
发布于:2007-09-11 18:20
今天下午跟踪了一下irpsp->Parameters.Create.Options和irpsp->Parameters.Create.SecurityContext->DesiredAccess
目前将irpsp->Parameters.Create.SecurityContext->DesiredAccess与FILE_EXECUTE|FILE_READ_ATTRIBUTES比较,然后交用户判断,通过的存入Hash Table。现在还只测试了XP系统,不知道xx_qiang说的系统不同问题是否严重。 |
|
12楼#
发布于:2007-09-11 15:40
用进程的创建通知可以监控进程,要拦截进程怕是不行
在Create里面拦没有什么条件好判断的,难啊 |
|
|
13楼#
发布于:2007-09-11 11:03
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
呵呵,谢谢xx_qiang,找到了你之前发的帖子,才发现几乎是类似的问题,我跟跟看。 |
|
14楼#
发布于:2007-09-11 09:40
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
用irp中的access和options来判断,2000和xp不一样,自己跟一下就知道了 |
|
15楼#
发布于:2007-09-10 23:12
楼上的可以具体说一下有哪些标志位吗?谢谢
我今天试了一下pssetcreateprocessnotifyroutine,当运行到回调函数时,文件已经打开了,这样只能做监控而不能拦截,难道真的要去Hook NtCreatepross,NtCreatSection吗? |
|
16楼#
发布于:2007-09-10 11:52
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
可以根据一些irp的标志位来判断,但各个系统各个sp都有可能变化。也就是说兼容性太差了,自己用就可以,商业化比较头疼。赫赫,我自己写了一个玩,防止一些简单的病毒倒是可以。 |
|
17楼#
发布于:2007-09-09 17:20
谢谢michaelgz和wowocock,我去试一下Hook了
|
|
18楼#
发布于:2007-09-09 15:33
引用第2楼little_mud于2007-09-09 14:20发表的 : 不能精确判断,必须结合其他处理。 |
|
|
19楼#
发布于:2007-09-09 14:20
问题可以简化为:在FSD上如何拦截进程创建?
|
|
上一页
下一页