“白加黑”是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段。本文将针对此类病毒做了一个简单技术介绍和案例演示。
所谓的“白加黑”,笼统来说是“白exe”加“黑dll”,“白exe”是指带有数字签名的正常exe文件,那么“黑dll”当然是指包含恶意代码 的dll文件。病毒借助那些带数字签名且在杀毒软件白名单内的exe程序去加载自己带有恶意代码的dll,便能获得杀毒软件主动防御的自动信任,从而成功 加载到系统中。病毒的这种手段其实是钻了软件编写的空子,若第三方软件在编写时对调用的库文件没有进行审查或审查得不够严谨,就容易发生DLL劫持,这种 编写漏洞已被微软获悉,详情可参考Microsoft 安全通报(2269637)
Dll劫持技术简介
当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL, 并将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目 录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。恶意程序利用这个特点,先伪造一个系统同名的 DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。这样,程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统 DLL同名函数里执行。这个过程用个形象的词来描述就是,系统DLL被劫持了。
Windows XP SP2系统以上DLL文件加载的搜索顺序如下:
(1)可执行程序加载的目录(可理解为程序安装目录比如C:\Program Files\Internet Explorer)
(2)系统目录(即 %windir%\system32)
(3)16位系统目录(即 %windir%\system)
(4)Windows目录(即 %windir%)
(5)运行某文件的所在目录(比如C:\Documents and Settings\Administrator\Desktop\test)
(6)PATH环境变量中列出的目录
根据前面介绍的DLL加载顺序,运行程序的时候会优先到程序执行的目录下加载必须文件,这么一来,病毒作者可以伪造一个dll,包含所有被劫持dll的导出函数,放到可执行程序目录下,当exe运行时,病毒dll就理所当然被优先调用了。
原文地址:http://bbs.gksec.com/thread-747-1-1.html 作者:Dark_Tsa97
转载请注明:jinglingshu的博客 » 浅谈“白加黑”-DLL劫持技术