Microsoft Windows Ndistapi

基本介紹

  • 中文名: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/)

相關詞條

熱門詞條

聯絡我們