背景
微软8月23日发布了新的安全通告(MSA2269637),提醒用户防范因应用程序采用不安全
的DLL加载方式而导致的远程代码执行威胁,即“DLL劫持攻击”。攻击者只要成功诱导用
户从一个不安全路径打开一个特殊构造的文件,即可触发运行用户计算机上存在问题的应用程
序,进而远程执行任意代码[1]。
原理
当应用程序调用LoadLibrary()或者LoadLibraryEx()的时候,如果参数指定了DLL的完整
路径,那么就会直接加载该路径上的DLL;否则就会按照预定的路径搜索顺序寻找同名的DLL来
加载。
DLL加载的搜索顺序如下[4]:
SafeDllSearchMode关闭
1.应用程序所在目录
2.当前工作目录
3.系统目录
4.16位系统目录
5.Windows目录
6.环境变量指定的目录
SafeDllSearchMode打开
1.应用程序所在目录
2.系统目录
3.16位系统目录
4.Windows目录
5.当前工作目录
6.环境变量指定的目录
利用的方法
利用过程
攻击者把同名的恶意DLL放在当前工作目录上。应用程序运行时会按上述的搜索顺序寻找DLL,如
果在当前工作目录前的所有目录都没有需要的DLL,那么当搜索到当前工作目录时,应用程序就会
加载同名的恶意DLL,使得DLL中的代码可以在该应用程序的权限下执行。
利用条件
1.应用程序在调用LoadLibrary()时没有指定完整路径
2.在路径搜索顺序中,真正的DLL所在的目录排在当前工作目录之后
3.当前工作目录在路径搜索顺序中没有被剔除
4.当前工作目录的切换(方法:如BitTorrent,将恶意同名DLL跟一个种子文件放在同
一个目录下,当双击这个种子文件时,系统会自动调用BitTorrent程序来打开文件,
此时当前工作目录就是恶意DLL所在的目录)
为什么选择当前工作目录?
1.没有访问和修改系统目录的权限
2.当前工作目录所涵盖的范围更广(如包括WebDAV、SMB、etc.),所需要的权限较低
影响
攻击者可以通过提供恶意同名DLL,利用有漏洞的应用程序,在目标系统上执行恶意的代码,从而
实现获取权限、留下后门等目的。
受影响的程序:VMware、Wireshark、Mozilla、BitTorrent、Adobe、etc.(详见[3])
解决方法
1.指定完整路径的DLL
2.打开安全路径搜索模式(部分解决)
3.剔除对当前工作目录的搜索