免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 利用Windows用户模式回调机制实施内核攻击(6)

利用Windows用户模式回调机制实施内核攻击(6)

时间:2012-05-05 22:02来源:未知 整理:寂涯网络 点击:


.text:BF89C7C7 cmp [ebp+cIteras], edx ;  more items ?
.text:BF89C7CA jnz short loc_BF89C789 
为了解决菜单子项事件涉及的漏洞问题,Microsoft在win32k中引入一个新函数 MNGetpItemFromIndex.此函数以菜单对象指针以及菜单子项索引index为输入参数,获取对应子项的属性信息。
 setwindows数组之use-after-free漏洞。windows允许应用程序对多个窗口进行批次 更新。使用一个特殊的setwindowsPos对象即指向窗口位置结构体数组的指针。当应用程序 调用deferwindowsPos()函数时,系统会对swp对象及窗口结构体数组进行初始化,并 对数组元素的个数(即窗口位置结构体)进行预分配;随后系统会调用deferwindowspos() 函数更新窗口位置,当请求更新的窗口位置索引项超出了预分配的项数时,win32k会用更多 可用空间分配给窗口位置数组,如图9所示。
图9. smwp数组重分配

当所有请求更新的窗口位置都处理完毕后,应用程序会调用EndDEferwindowspos()函 数更新窗口列表。在操作smwp数组时,为ink并不总是会在用户模式回调之后校验数组指针, 调用enddeferwindowspos函数处理多窗口位置结构体时,win32k会调用xxxCalcValidRects 函数会计算8丽?数组中每个被引用的窗口大小及位置,同时遍历每个窗口项,执行各项操作 如发送丽31仙01卩080_01恥消息通知每个位置正发生改变的窗口。此消息会触发用户模式 回调,攻击者可以在同一个51?对象上调用deferwindowspos,促使smwp数组重分配,如下所示:
DeferWindowPos(..)fitte SMWP array entries
.text:BF8A37B8 mov ebx, [esi+14hJ ;SMWP array 
.text:BF8A37BB mov [ebp+var_20], 1 
.text:BF8A37C2 mov [ebp+cItems], eax ; SMWP array count
.text:BF8A37C5 js loc_BF8A3DE3 ;  exit if no entries
.text:RF8A3839 Dush ebx  h eax
.text:BF8A383B push WM_WINDOWPOSCHANGING
.text:BF8A383D push esi
.text:BF8A383E call _xxxSendMessage@16 ; user-mode callback
• text:BF8A3843 mov eax, [ebx+4]
• text:BF8A3846 raov [ebx], edi ; window handle
• text:BF8A3DD7 add ebx, 60h ; get next entry
.text:BF8A3DDA dec [ebp+cItems] ; decrement cItems
.text:BF8A3DDD jns loc_BF8A37CB
若xxxCalcValidRects函数没有充分校验指针和数组大小边界,则当它将窗口句柄写回 原缓冲区时就有可能导致似6-3代6广打66漏洞。
3.use-after-free漏洞利用
攻击者要在win32k上实现use-after-free漏洞利用,需要对已经释放的内存进行重分配 并能控制其内存空间上的内容。因为用户对象及其相关数据结构都是以字符方式存储,故通 过设置对象属性完全控制最近存放在已释放的内存空间内容并对其进行任意大小的分配是 完全可能。只要避免肌^)见]匕8发生(字符串的结束符),使用任意字节的组合都有可能操 作内存中的对象与数据结构。如何在desktop heap上引发此漏洞,攻击者可借助setwindowtextw函数对一个窗口的标题栏命名,迫使desktop heap分配任意大小的堆空间。 类似地,调用SetClassLongPtr并指定GCLP_MENUNAME参数,以设置窗口类相关的菜单字符名 时,可触发任意大小的会话池分配。下面的代码显示了键盘布局对象上的use-after-free漏洞:
up ei pl nz na efl=00010207
[eax+OCh], esi
eax=41414141 ebx=00000000 ecx=ffbl37e0 edx=8el35f00 esi=fe74aa60 edi=fe964d60
eip=92d05f53 esp=807d28d4 ebp=807d28f0 iopl=0 nv pe cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 win32k!xxxSetPKLinThreads+0xa9:
92d05f53 89700c raov dword ptr
ds:0023:4141414d=????????
kd> dt win32k!tagKL @edi _b +0x000 head : _HEAD +0x000 h : 0x41414141 +0x004 cLockObj : 0x41414142 +0x008 pklNext : 0x41414141 +0x00c pklPrev : 0x41414141
由上面的代码可知,键盘布局对象已经被攻击者在如desktop heap上恶意分配的字符所 覆盖。此时win32k尝试将此键盘布局对象链接到键盘布局对象链表时,将会操作一个已释放 的对象。显然,攻击者可以在被释放的位置安置一个恶意shellcode地址。
4.小结
本文描述了用户模式回调有可能引发的各种安全漏洞问题,并详细阐述了windows管理器中的全局锁在用户模式回调机制中的瑕疵。尽管涉及到的各种由于用户模式回调机制下为充分校验对象指针等各种关键资源导致漏洞已经基本解决,但这些问题的某些复杂性表明更多的细微缺陷很可能依旧驻留在为ink中。 

本页地址 http://www.jybase.net/xitonganquan/20120505900.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com