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

当前位置: 主页 > 系统综合 > 系统安全 > MS11-046本地权限提权0day详解

MS11-046本地权限提权0day详解

时间:2012-01-01 18:13来源:未知 整理:寂涯网络 点击:

微软前几天刚刚发布了MS11-046 本地权限提升漏洞的补丁,并对漏洞进行如下描述:
此安全更新可解决 Microsoft Windows 辅助功能驱动程序(AFD)中一个公开披露的漏
洞。如果攻击者登录用户的系统,并运行特制应用程序,则此漏洞可能允许提升特权。攻击
者必须拥有有效的登录凭据,并能够本地登录才能利用此漏洞。
此安全更新通过更正AFD在将输入从用户模式传递到Windows内核之前验证输入的方式
来解决漏洞。
与 MS08-066 一样,该漏洞存在于系统文件Afd.sys中。Afd.sys是辅助功能驱动模块,
用于支持 Windows套接字应用程序,并管理Winsock TCP/IP通信协议。
将Afd.sys文件反汇编,在驱动程序入口函数DriverEntry()中存在如下派遣函数设置,
如图1所示。  

 驱动程序入口函数DriverEntry()代码图片

图 1代码首先针对所有的MajorFunction号全都设置成AfdDispatch处理函数,然后再
修改第 14 号分发函数,重新设置为 AfdDispatchDeviceControl。接下来是设置 FastIO 的
处理函数以及设置卸载函数。
MS08-066 权限提升漏洞的问题函数为 AfdGetRemoteAddress(),是在 FastIO 接口
AfdFastIoDeviceControl (该接口用于提供对NtDeviceIoControlFile的支持)中通过 IOCTL
号在 AfdImmediateCallDispatch 表中索引的;而 MS11-046 的问题函数为
AfdConnectApcKernelRoutine(),是在AfdConnect中用到的。至于AfdConnect,它与 AfdBind
等一起是在派遣函数 AfdDispatchDeviceControl 中通过 IOCTL 号在 AfdIrpCallDispatch
表中索引的。
辅助功能驱动模块Afd.sys的数据段中存在表AfdIoctlTable,其中放有各种IOCTL号, 
它与 AfdImmediateCallDispatch 表、AfdIrpCallDispatch 表的对应关系如图 2 所示,
AfdConnect对应的 IOCTL号是 0x12007。 

用户在 Winsock编程中用到Win API函数connect()的时候,该函数逐级向下调用,经
过 NtDeviceIoControlFile,通过 sysenter 陷入内核,接着请求到达 Afd.sys 的派遣函数
AfdDispatchDeviceControl 中,通过 0x12007 索引到 AfdConnect 函数。从 connect()到
Afd.sys 的函数调用关系。 

在 Afd.sys内部,派遣函数AfdDispatchDeviceControl到 AfdConnect,再到问题函数
AfdConnectApcKernelRoutine()的调用栈。 
问题函数 AfdConnectApcKernelRoutine()的 IDA 反汇编代码,代码已加注
释。  
其中,汇编语句“mov eax,dword ptr [esi+3Ch]”将把用户定义的输出缓冲区地址传
给寄存器 eax,再通过汇编语句“mov dword ptr [eax],ecx”把连接成功的返回值0 传入
该用户自定义的地址中。以上过程中,用户自己定义的输出缓冲区始终没有得到任何合法性 

检查,所以用户在此可以提供任意缓冲区地址,包括内核地址。
触发该漏洞可以在 connect 连接之前对 NtDeviceIoControlFile 进行 Hook,如发现
IOCTL号是0x12007, 则修改输出缓冲区指针。这里把输出缓冲区指针指向HalDispatchTable
表。
先来看一下HalDispatchTable表,如图6所示。

 

把输出缓冲区指针改为 0x80545A3C,(即:“HalDispatchTable + 4”) 。结果会导致
HalDispatchTable 表的更改,更改之后的 HalDispatchTable 表。原
“HalDispatchTable + 4”处的值 0x806E5BBA 已经变为 0x00000000。然后向 0x00000000
地址写入内核提权ShellCode,再调用 ZwQueryIntervalProfile函数即可提升权限。

为什么调用 ZwQueryIntervalProfile 函数就可以执行 ShellCode 呢?图 8 所示为
KeQueryIntervalProfile函数在 WinDbg中的反汇编代码。

其中,call dword ptr [nt!HalDispatchTable+0x4 (80545A3C)]正好运行我们刚写入
的 ShellCode成功提权。

本文主要对MS11-046本地权限提升漏洞的问题函数的位置、漏洞原理及相应函数调用关系
进行较为详尽的分析,同时给出漏洞利用方法及利用代码(利用代码已在Windows XP
sp2\sp3 测试通过)

 

 

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

百度搜索更多

谷歌搜索更多

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

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


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

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