基本介紹
- 中文名:Microsoft Windows Ndistapi
- 描述:本地拒絕服務漏洞
- 詳細:微軟發布的非常流行的作業系統
- 品牌:Microsoft
涉及程式,描述,詳細,
涉及程式
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/)