白利用就是利用已经是白名单的文件来达到木马自身的目的,进入白名单的文件,又可分为木马作者利用社会工程学,欺骗杀软的分析人员,将木马混入白名单和,正常程序本身设计的缺陷导致存在被利用的可能。前者没办法,对于后者,却是可以进行改善的。
比如
1.
char __usercall GetQQPCMgrInstallDir@<al>(BYTE *a1@<esi>)
{
char v1; // bl
HKEY hKey; // [esp+4h] [ebp-10h]
DWORD cbData; // [esp+8h] [ebp-Ch]
DWORD Type; // [esp+Ch] [ebp-8h]
unsigned int v6; // [esp+10h] [ebp-4h]
v6 = (unsigned int)&hKey ^ dword_40D008;
hKey = 0;
v1 = 0;
if ( !RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Tencent\\QQPCMgr", &hKey) )
{
Type = 0;
cbData = 260;
if ( !RegQueryValueExW(hKey, L"InstallDir", 0, &Type, a1, &cbData) )
v1 = 1;
}
if ( !hKey )
RegCloseKey(0);
return v1;
}
int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
wchar_t Dst; // [esp+8h] [ebp-210h]
char v6; // [esp+Ah] [ebp-20Eh]
unsigned int v7; // [esp+214h] [ebp-4h]
v7 = (unsigned int)&Dst ^ dword_40D008;
Dst = 0;
memset(&v6, 0, 0x208u);
if ( !GetQQPCMgrInstallDir((BYTE *)&Dst) )
return -1;
wcscat_s(&Dst, 0x104u, L"\\QQPCMgr.exe");
ExecuteQQPCMgr();
return 0;
}
这个程序会读取这个位置的键值,获取电脑管家的安装路径,然后不加校验的启动这个路径下的QQPCMGR.exe文件,就是打开SOFTWARE\\Tencent\\QQPCMgr这个key,查询“InstallDir”这个value,拼上\\QQPCMgr.exe,所以木马只要把这个QQPCUrlLoader.exe放到启动项里,然后把自己的要启动的程序改名为QQPCMGR.exe,同时将自己的路径写到注册表的这个位置,就可以达到开机启动自身的目的。而常规情况下杀软的启动项扫描只能扫到QQPCUrlLoader.exe的这个白文件,而扫不到被间接启动的木马文件,从而达到了绕过杀软扫描的目的。同时也告诉我们,在我们自己写程序的时候,加载或运行其他程序或模块的时候,是否是加载或运行所要的模块,还是可能被偷梁换柱的,最好应该加个校验,比如签名信息等。
2.
劫持了这个DLL,把这个DLL替换成木马自身的DLL,来启动自己。众所周知,当前很多杀软防御都是基于进程级别的,没有做到模块级别,这也是基于效率的考虑,但也同时给木马留下了大量的机会。
但现在启发式很的情况下,这个DLL如果做太多的事,则可能被启发式报出来,所以木马在这里又耍了个滑头,这个DLL本身并不做太多的事,他只是读取当前目录下的那个XXX.bmp文件,这个XXX.BMP文件实际是个BMP图像文件,外带一堆木马的SHELLCODE,这样通过DLL,读取该文件中的SHELLCODE来执行,来达到绕过启发式引擎的发现。因为没有人会去扫描一个BMP文件,也算是用心良苦了
所以不要用导入表加载模块。
3.
前面所说的导入表DLL劫持,其实还是可以被检测出来,杀软通过扫描可执行EXE 文件的导入表,就可以知道该程序会用到哪些DLL。下面要说的是更为隐蔽的方法,白程序内部通过LoadLibrary来加载DLL,而木马通过劫持这个DLL,来达到白利用的目的。举
该程序会通过Loadlibrary来加载EXE当前目录下的enlpu32.dll,并调用其导出的函数EnableLPU,木马既可以在该DLL的DLLMAIN里做坏事,也可以在导出的EnableLPU函数里做坏事。而这种白利用基本只有发现一个杀一个了。
4.
白驱动利用,驱动中被利用,可能导致的危害也更大,这里举个例子,也希望大家在写驱动的时候,除了完成功能外,也要考虑到是否有被恶意利用的可能。
5.隐魂病毒