little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:4016回复:20

在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪个文件将要被执行?

楼主#
更多 发布于:2007-09-07 20:50
  在做一个文件保护项目,以sfilter为模版,参考了tooflat的加密驱动、filespy、filemon等程序。第一阶段,在操作系统启动过程中,对驱动程序、系统服务、自启动应用程序进行校验。原理:在IRP_MJ_CREATE中拦截以上文件的打开请求,下传IRP读取文件内容,与先验存储的HASH比对。此部分工作已完成。

  接下来,在系统启动后,计划对用户执行的EXE程序进行校验,拦截EXE执行的首个CREATE请求,与用户交互判断是否执行,取HASH值后放行后继的CREATE请求。目前遇到的问题是:当打开一个目录时,会拦截到Explorer对目录下所有文件的间断CREATE操作,如何从中区分中哪一个是文件运行的CREATE请求?

  试过IRP的几个标志位,没有明确的结果。此时是否要转到对进程的监控更有效?PsSetCreateProcessNotifyRoutine or Hook SSDT?

        项目结束后,将代码整理一下,学习学习tooflat的精神,如果有人需要,可以共享,虽然都是些很基本的东西。
  

最新喜欢:

tmx21tmx21
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-14 10:49
xx_qiang看到我发的短信了吗?有空加QQ聊聊,呵呵
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-14 10:44
针对EXE的打开请求,先检查Hash Table,根据Table内容,决定是否放行。如果不在Table中,又检测DesiredAccess =FILE_EXECUTE,就去询问用户,如果用户允许,就将路径添加到Hash Table中,这样同一个EXE不会询问客户两次或以上。
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-09-14 10:35
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
这样不行吧?我记得一次操作会有多次这样的请求。。。
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-14 09:49
在2K系统中,判断DesiredAccess&0xF0 = FILE_EXECUTE(也就是0x20)
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
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.
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
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
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-09-12 18:55
  xx_qiang,看过你05年在驱网发的帖子,问题和这个类似。明天看看2K的版本特殊在哪里。
  是啊,现在都07年了,....呵呵,闻道有先后,还要多向大家请教。
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2007-09-12 18:28
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
版本之间的差距是挺大的,其中2000最特殊,xp和2003比较类似。但各个sp之间可能也有稍微的不同。这种东西有过商业化的版本,是个台湾的公司,但那是2005年的事了。。。。。
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
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老大,“结合其他处理”是指什么?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-09-11 20:55
在打开目录的时候,所有的EXE文件,均有该请求过来,如果某目录下有几百个EXE,估计你的用户会把你劈了。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
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说的系统不同问题是否严重。
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-09-11 15:40
用进程的创建通知可以监控进程,要拦截进程怕是不行

在Create里面拦没有什么条件好判断的,难啊
提问归提问,还是只能靠自己
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-09-11 11:03
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
呵呵,谢谢xx_qiang,找到了你之前发的帖子,才发现几乎是类似的问题,我跟跟看。
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2007-09-11 09:40
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
用irp中的access和options来判断,2000和xp不一样,自己跟一下就知道了
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-09-10 23:12
楼上的可以具体说一下有哪些标志位吗?谢谢
我今天试了一下pssetcreateprocessnotifyroutine,当运行到回调函数时,文件已经打开了,这样只能做监控而不能拦截,难道真的要去Hook NtCreatepross,NtCreatSection吗?
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2007-09-10 11:52
Re:在FSD上如何拦截进程创建?-如何在Explorer牛毛般的CREATE操作中找出哪
可以根据一些irp的标志位来判断,但各个系统各个sp都有可能变化。也就是说兼容性太差了,自己用就可以,商业化比较头疼。赫赫,我自己写了一个玩,防止一些简单的病毒倒是可以。
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-09-09 17:20
谢谢michaelgz和wowocock,我去试一下Hook了
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
18楼#
发布于:2007-09-09 15:33
引用第2楼little_mud于2007-09-09 14:20发表的  :
问题可以简化为:在FSD上如何拦截进程创建?


不能精确判断,必须结合其他处理。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
little_mud
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2009-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-09-09 14:20
问题可以简化为:在FSD上如何拦截进程创建?
上一页
游客

返回顶部