请输入您要查询的百科知识:

 

词条 Microsoft Windows Ndistapi
释义

Microsoft Windows Ndistapi本地拒绝服务漏洞

涉及程序:

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

.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

.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

.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

.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) ;

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错误,导致系统崩溃。

<*来源: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/)

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/27 17:14:19