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

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

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

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


.text:BF893924 push esi ; parent window
.text:BF893925 push [ebp+pwndInsertAfter]
.text:BF893928 push ebx ; new window
.text:BF893929 call _LinkWindow<S12 ; LinkWindow(x,x ,x)
图2. 2序列链表添加 键盘布局对象之化6]“^4^6漏洞,键盘布局对象用在对一个活动的线程或进程设置 键盘布局。在加载一个键盘布局时,应用程序会调用loadkeyboardlayout函数,加载指定的键盘布局名称。其实windows系统也提供了一个未文档化的函数loadkeyboardlayout,此
函数会调用HKLt0PKL将传入的键盘布局对象句柄hKblay0ut转换为对应的键盘布局对象指 针。HKLtoPKL函数会遍历活跃键盘布局链表(THREADINFO. spklActive),直到找到一个匹配的句柄值,此时loadkeyboardlayoutex会使用栈局部变量保存此对象指针值,如图3所示:
•text:BF8150C7 push [ebp+hkl]
.text:BF8150CA push edi
.text:BF8150CB call _HKLtoPKL08 ; get keyboard layout object
.text:BF8150D0 mov ebx, eax
.text:BF8150D2 mov [ebp+pkl], ebx ; store pointer
图3.将键盘句柄对象转换为指针
由于loadkeyboardlayout函数并没有通过“锁”保护对象指针,故攻击者可以在用 户模式回调函数中卸载此句柄布局即释放此对象指针。这种攻击方式是可能发生的。因为loadkeyboardlayout函数随后会调用loadkeyboardlayout函数来回调用户模式下的hkblayout回调函数。若在回调函数中卸载了hkblyout对象当xxxloadkeyboardlayoutEX再次使 用[ebp+var_8]地址下事先保存的指针时,引用的将会是一块已经被释放的内存,如图4所 示:
.text: :BF8153FC mov ebx, [ebp+pkl] ; KL object pointer
.text: :BF81541D mov eax, [edi+tagTHREADIMFO.ptl]
.text: :BF815423 mov [ebp+tl.next], eax
.text; :BF815426 lea eax, [ebp+tl]
.text: :BF815429 push ebx
.text; :BF81542A mov [edi+tagTHREADIWFO.ptl], eax
.text: :BF815430 inc [ebx+tagKL.head.cLockObj] ; freed memory ?
图4.用户模式回调完成后引用键盘布局对象指针
2.3对象状态验证
为了跟踪对象的使用情况,win32k会使用标识位或者指针来关联用户对象。系统程序在 使用用户对象时,总会校验这些对象的当前状态是否有效。然而,用户模式回调机制可以修 改或更新对象的属性,如改变窗口的父类,导致下拉菜单失效、终止dde会话中的任一方等。 应用程序若没有校验对象状态,则很可能导致_1指针解引用错误及各种use-after-free漏洞发生。
dde会话状态漏洞,dde即动态数据交换协议是一种十分古老的消息通信方式,即在两个 应用程序之间通过共享内存的方式交换数据,一方申请一块全局内存,然后将内存指针传递 给另一方,接收方根据收到的指针访问此全局内存。dde会话内部机制由windows管理器视为 一个dde会话对象管理,分别定义在发送与接收方。为了配合会话双方的通信,会话对象结构体包含一个指向对方的会话对象指针。故,若拥有会话对象的某一方线程被终止,显然对 方的会话对象指针将被清除。
由于dde会话在用户模式下存储数据,它们依赖用户模式回调机制在用户模式与内核模 式之间进行数据的拷进拷出。在发送一个dde会话消息时,win32k会调用xxxCopyDdeIn从用 户模式下拷贝数据到内核模式;同样地,在接收一个dde消息时,win32k会调用xxxCopyDDE0ut 函数将数据拷贝到用户模式。拷贝动作发生后,Win32k会通知会话的一方可以分享此数据。 在处理用户模式回调时,一些函数可能并不会校验另一方的会话对象。攻击者可利用此弱点, 在用户模式回调过程中终止dde会话,并解锁另一方得会话对象。由图5可知,xxxCopyDdeIn 函数会调用一个回调函数,但此函数在将会话对象指针传递给另一方时,却没有重新校验会
话方得对象指针o这种方式很可能导致即匕指针解引用错误0
text:BF8FB8A7 toxt:BF8FB8A8 text:BF8FB8AA toxt:BF8FB8AF text:BF8FB8Bl text:BF8KBSB4
text:BF8FB8C5 r.AXt: BF8FB8C7 BF8FB8CA BF8FB8CF BF8FB8D2
text
push eax
push dvord ptr [edi]
call _xxxCopyDdeInC16
nov obx, eax
cmp ebx, 2
piifth [fthp^arg_4] ; int
push offset _xxxExecuteAckQ12
push dword ptr Cesi>10h] ; conversation obJect
call _Antlc ipatePostC24
图5. dde会话处理中缺乏对象指针校验
菜单状态处理漏洞,尽管菜单对象(tagMENU)本身比较简单,仅仅包含菜单项的相关 信息,但菜单事件的响应却依赖很多复杂函数及结构体来实现。例如,应用程序可调用 TrackP0pupMenuEx函数创建一个弹出菜单窗口,此时菜单窗口可以利用系统定义的菜单窗口 类程序(win32k ! xxxMenuWindowProc)来处理各种特定的菜单消息。特别是,系统为了跟 踪菜单的使用情况,Win32k会为每个当前活跃的菜单创建一个菜单状态结构 (tagMENUSTATE)。

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

百度搜索更多

谷歌搜索更多

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

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


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

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