网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 安全漏洞 > Microsoft > Microsoft Windows Ndistapi本地拒绝服务漏洞  

Microsoft Windows Ndistapi本地拒绝服务漏洞

2007-05-17  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

涉及程序:
Microsoft Windows Ndistapi
 
描述:
Microsoft Windows Ndistapi本地拒绝服务漏洞
 
详细:
Microsoft Windows是微软发布的非常流行的操作系统。

Microsoft Windows的NDISTAPI.sys驱动实现机制上存在漏洞,本地攻击者可能利用此漏洞对系统执行拒绝服务攻击。

Windows的NDISTAPI.sys驱动是内核态组件,但允许非特权用户的访问,因此任意用户态应用程序都可以向这个设备写入数据:

Ndistapi.sys
Windows XP SP2

_; __stdcall NdisTapiDispatch(x, x)
.text:000115E8 _NdisTapiDispatch@8 proc near       ; DATA XREF:
DriverEntry(x,x)+13E#o
.text:000115E8
.text:000115E8 arg_4       = dword ptr 0Ch
.text:000115E8
.text:000115E8           push   ebp
.text:000115E9           mov   ebp, esp
.text:000115EB           push   ebx
.text:000115EC           push   esi 网管网www_bitscn_com
.text:000115ED           mov   esi, [ebp+arg_4]
.text:000115F0           mov   eax, [esi+60h]
.text:000115F3           movzx  ecx, byte ptr [eax]
.text:000115F6           sub   ecx, 0
.text:000115F9           mov   edx, [esi+0Ch]
.text:000115FC           mov   ebx, [eax+4]
.text:000115FF           push   edi
.text:00011600           mov   edi, [eax+8]
.text:00011603           jz    short loc_1167E
.text:00011605           dec   ecx
.text:00011606           dec   ecx
.text:00011607           jz    short loc_11674
.text:00011609           sub   ecx, 0Ch 网管下载dl.bitscn.com
.text:0001160C           jnz   loc_11697
.text:00011612           mov   eax, [eax+0Ch]
.text:00011615           cmp   eax, 8FFF23C0h ;IOCTL
.text:0001161A           jz    short loc_11669 ;DoIoctlConnectWork()
.text:0001161C           cmp   eax, 8FFF23C8h
.text:00011621           jz    short loc_1165C
{...}
.text:00010B16 ; __stdcall DoIoctlConnectWork(x, x, x, x)
.text:00010B16 _DoIoctlConnectWork@16 proc near     ; CODE XREF:
NdisTapiDispatch(x,x)+85#p
.text:00010B16
.text:00010B16 arg_0       = dword ptr 4
.text:00010B16 arg_4       = dword ptr 8
.text:00010B16 arg_8       = dword ptr 0Ch
.text:00010B16 arg_C       = dword ptr 10h
.text:00010B16
.text:00010B16           mov   ecx, _DeviceExtension

网管网www_bitscn_com


.text:00010B1C           push   edi
.text:00010B1D           mov   edi,
ds:__imp_@KfAcquireSpinLock@4 ; KfAcquireSpinLock(x)
.text:00010B23           add   ecx, 4Ch
.text:00010B26           call   edi ; KfAcquireSpinLock(x) ;<=
FLAW KfAcquireSpinLock(x)
.text:00010B28           cmp   [esp+4+arg_8], 8 ;InputBuffer length
.text:00010B2D           mov   dl, al
.text:00010B2F           jb    loc_10BC5
.text:00010B35           cmp   [esp+4+arg_C], 4 ;OutputBuffer
length
.text:00010B3A           jb    loc_10BC5
.text:00010B40           mov   ecx, _DeviceExtension
.text:00010B46           cmp   dword ptr [ecx+4], 1

网管联盟bitsCN_com


.text:00010B4A           push   ebx
.text:00010B4B           mov   ebx, [esp+8+arg_4]
.text:00010B4F           push   esi
.text:00010B50           mov   esi,
ds:__imp_@KfReleaseSpinLock@8 ; KfReleaseSpinLock(x,x)
.text:00010B56           jnz   short loc_10B8D
.text:00010B58           mov   dword ptr [ecx+4], 2
.text:00010B5F           mov   ecx, _DeviceExtension
.text:00010B65           mov   eax, [ebx]
.text:00010B67           mov   [ecx+10h], eax
.text:00010B6A           mov   ecx, _DeviceExtension
.text:00010B70           add   ecx, 4Ch
.text:00010B73           call   esi ; KfReleaseSpinLock(x,x) ;

网管bitscn_com


KfReleaseSpinLock(x,x)

[---]

.text:00010BC5
.text:00010BC5 loc_10BC5:
.text:00010BC5
.text:00010BC5           mov   eax, 0C0000023h ; ERROR CODE
.text:00010BCA           xor   ecx, ecx
.text:00010BCC
.text:00010BCC loc_10BCC:
.text:00010BCC           mov   edx, [esp+4+arg_0]
.text:00010BD0           mov   [edx+18h], eax
.text:00010BD3           mov   [edx+1Ch], ecx
.text:00010BD6           pop   edi
.text:00010BD7           retn   10h         ; Return

可见这个例程将IRQL提升到DISPATCH级别,在检查长度之前要求spinlock,之后如果所提供的大小无效的话,例程没有释放所获得的spinlock便返回,因此即使返回到Ring3之后IRQL仍在该线程的DISPATCH级。

最终的结果是用户态线程以DISPATCH级运行。由于在DISPATCH级无法访问分页内存,而在用户态大多数内存都是分页的,因此只要线程执行涉及到访问分页内存的操作,内核都会由于IRQL_LESS_THAN_NOT_EQUAL而出现bugcheck错误,导致系统崩溃。

网管下载dl.bitscn.com



<*来源:Rubén Santamarta

链接:(http://marc.info/?l=bugtraq&m=117433257617993&w=2
*>

受影响系统:
Microsoft Windows XP SP2
Microsoft Windows Server 2003 SP1
 
攻击方法:
暂无有效攻击代码
 
解决方案:
厂商补丁:

Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

(http://www.microsoft.com/technet/security/)

TAGs   服务   漏洞   拒绝   本地       mov   ecx   eax   .text:00010B16      
 上一篇:没有了   下一篇:CA Brightstor Backup Mediasvr.exe远程指令执行漏洞
Microsoft Windows Ndistapi本地拒绝服务漏洞 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: