首页
社区
课程
招聘
[原创]Hips篇高操之正确的全局Patch/拦截模块姿势
发表于: 2017-5-22 15:00 16834

[原创]Hips篇高操之正确的全局Patch/拦截模块姿势

2017-5-22 15:00
16834

潜水了两个月,由于工作的关系没有什么多余的时间发新帖了,由于临近端午准备休息一下,于是乎决定在周末搞点事情,恰逢北京今日又下起雨来,在这朦朦胧胧的雨天里给大家呈上一份Hips的高端操作,让大家燃一下。


这也是初入安全时我一直想实现的一个东西,但是由于当时技术局限,很菜,其实今天来看只是当时没有找到好的学习方法,没有办法实现很是遗憾。然而今日在团队的带领下,我改进了自己的学习方法,学会了如何有效看待问题分析问题以及解决问题。在此感谢我的导师以及leader。


这个一直想实现的东西就是用驱动拦截模块,看似很简单的一个问题但是实际上要操作起来并非易事,要看得懂代码,得先理解了这张图:


可以看到,调用API加载模块的时候最后都逃不过ntdll!ZwMapViewOfSection,最后进入系统调用然后触发模块回调,我们唯一能做的就是在模块回调里干一些猥琐的事情。直接Patch?那是不可能的,因为模块回调有限制,这时候有EProcess.AddressCreationLock的限制不说,模块还未能初始化完成,直接去搞肯定是不正确的做法。那么可以想到的是用Apc延迟去Patch模块,因为在ZwMapViewOfSection在内核中最后会返回至Ring3,在返回的过程中调用Apc去Patch这样就完美了。


话又说回来,模块回调中为每一个模块都插一个Apc? 这显然也不现实,因此这种方法最好是有一个Ring3层进程来制定策略指定对哪一个进程加载哪一个模块时执行哪种Patch操作那么这就涉及到Ring0与Ring3的通信问题。说到这里就有三种方法可供选择,一种是LPC(ZwConnetPort...),一种是内核可等待对象,还有一种就是Minifilter的双向通信机制。


当然,我选择的是最后一种,现在貌似运用这种方法做通信的不多,我也没怎么接触过,一切都是从0开始,那就试试吧...


首先由Ring3进程指定策略,这里拿金山的两个模块开刀:



注册这个通信是奠定与Ring3进程通信的基础,应用层进程可以通过连接之后发送策略(即要对哪个进程的哪个模块进行监控),然后由模块回调在匹配策略之后对应用程序进行通知



这里一定要注意,FltSendMessage这个函数msdn上说的很清楚,如果RelpyData为NULL, 只要是Ring3进程调用了FilterGetMessage取得了数据,那么这个函数不会再等待。而我们需要做的是在GetMessage之后发消息给驱动,让它为LoadImage这个当前线程插入Apc,那么在模块回调中必须卡死直到应用进程调用FilterRelpyMessage回应消息,否则这一次系统调用就返回了。


Ring3进程拿到模块监控数据之后决定对该模块采取什么样的Patch措施,然后将决定结果送达至Ring0,这里我就以Patch基地址即DosHeader.e_magic为例了。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (21)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
那个啥。。拦截dll加载用minifilter有好几个点位可以撸,不需要ps回调的,XP和低版本win7下有8个限制,很容易被占坑
2017-5-22 15:12
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
3
hzqst 那个啥。。拦截dll加载用minifilter有好几个点位可以撸,不需要ps回调的,XP和低版本win7下有8个限制,很容易被占坑
这位大哥,可否说来听听
2017-5-22 15:13
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4

minifilter  ->  IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION  -> IoStatus.Status  给 STATUS_ACCESS_DENIED
dll加载必走这里,但有一个不好就是会弹“电脑提示损坏的图像,没有被指定在Windows上运行”

minifilter  -> IRP_MJ_CREATE  -> 对进程隐藏dll或拒绝访问,直接文件都找不到了还加载个毛~
缺点是正常CreateFile打开dll也会失败,不过有方法可以过滤,这里不细讲。


ps: PsLoadImage里撸PE头好像也是会弹损坏的图像的吧

pss: PsLoadImage里放FltSendMessage我记得会把整个系统卡炸的

psss: 阻塞CreateFile好像就没事,毕竟纯同步的IRP

2017-5-22 15:20
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
5
hzqst minifilter  ->  IRP_MJ_ACQUIRE_FOR_SECTION ...
既然有这么多方法,为什么不发出来大家一起学习学习啊
2017-5-22 16:08
0
雪    币: 346
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
QQ管家的驱动没加VMP吗?
2017-5-22 16:51
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
7
OnlyForU QQ管家的驱动没加VMP吗?
跑起来都费劲,还加VMP,那就是自己给自己下套子
2017-5-22 17:00
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
hzqst minifilter  ->  IRP_MJ_ACQUIRE_FOR_SECTION ...
过滤是指  IRP_MJ_CREATE->  FILE_EXECUTE属性的都拒绝?,
2017-5-23 11:29
0
雪    币: 615
活跃值: (590)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
http://bbs.pediy.com/thread-217780.htm      原来病毒这么做就是来对付楼主的
2017-5-26 06:37
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
10
ugvjewxf http://bbs.pediy.com/thread-217780.htm 原来病毒这么做就是来对付楼主的
是的,内存加载可以避开回调Patch,但是内存加载容易被误杀,尤其是没有模块句柄被认为是ShellCode
2017-5-26 10:30
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
lz厉害了,顶
2017-5-26 10:58
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
为何你的probforwrite不用加try
2017-5-26 17:18
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
13
IDGHOST 为何你的probforwrite不用加try
讲道理是要加的,逆向的时候没看见  mov          [ebp+ms_exc.registration.TryLevel],  0这样的指令就忘了,不过貌似是存在于.pdata  RUNTIME_FUNCTION  里的...
2017-5-26 18:02
0
雪    币: 615
活跃值: (590)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
14
好方法,支持下,
2017-5-27 14:21
0
雪    币: 190
活跃值: (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
2017-5-27 19:05
0
雪    币: 9662
活跃值: (4588)
能力值: ( LV15,RANK:800 )
在线值:
发帖
回帖
粉丝
16
666
2017-5-27 19:19
0
雪    币: 436
活跃值: (2668)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可以的,厉害。
2017-6-26 18:51
0
雪    币: 10248
活跃值: (4421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
楼主牛人,感谢分享。
2018-9-18 08:26
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19

最后于 2019-1-4 21:38 被冰栈编辑 ,原因:
2019-1-4 20:32
0
雪    币: 273
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark
2019-1-17 21:04
0
雪    币: 183
活跃值: (6634)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
21
发个牛逼mark一下
2023-1-16 09:35
0
雪    币: 1572
活跃值: (1880)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
mark一下
2023-2-7 11:48
0
游客
登录 | 注册 方可回帖
返回
//