如何使用aDLL自动识别DLL劫持漏洞

一颗小胡椒2022-01-07 21:17:37

关于aDLL

aDLL是一款功能强大的代码分析工具,可以帮助广大研究人员以自动化的方式识别并发现DLL劫持漏洞。该工具可以分析加载至内存中的源码镜像,并在加载过程中搜索DLL,并且利用了微软Detours代码库来拦截针对LoadLibrary/LoadLibraryEx函数的调用,然后分析在代码运行时过程中加载的DLL文件。

该工具的主要目标就是帮助广大研究人员搜索可执行程序所使用的DLL列表,并从中识别出潜在的DLL劫持漏洞。

DLL劫持攻击

DLL劫持指的是,病毒通过一些手段来劫持或者替换正常的DLL,欺骗正常程序加载预先准备好的恶意DLL。

首先我们要了解Windows为什么可以DLL劫持呢?主要是因为Windows的资源共享机制。为了尽可能多地安排资源共享,微软建议多个应用程序共享的任何模块应该放在Windows的系统目录中,如kernel32.dll,这样能够方便找到。但是随着时间的推移,安装程序会用旧文件或者未向后兼容的新文件来替换系统目录下的文件,这样会使一些其他的应用程序无法正确执行,因此,微软改变了策略,建议应用程序将所有文件放到自己的目录中去,而不要去碰系统目录下的任何东西。

为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。利用系统的这个特性,就可以使应用程序强制加载我们指定的DLL做一些特殊的工作。

快速开始

首先,我们需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/ideaslocas/aDLL.git

接下来,我们就可以在项目的Binaries文件夹中找到已编译好的aDLL可执行文件了。我们建议广大用户使用版本架构(32位或64位)对应的版本来分析目标可执行文件。

为了保证该工具可以正常运行,我们必须将“hook32”、“hook64”、“informer*32”和“informer64”放置于“aDLL.exe”的相同目录下。

工具要求

aDLL是在Windows 10操作系统平台上开发和测试的,如果你所使用的操作系统版本比较老,或者没有安装Visual Studio的话,那么工具在运行时可能会抛出例如“VCRUNTIME140.dll not found”之类的错误,此时我们就需要安装Visual C++ Redistributable更新了。

项目编译

如需对项目代码进行修改或重新编译,建议使用Visual Studio 2015或更高版本。

工具使用

该工具提供了一个-h选项,可以帮助我们获取aDLL全部可用的参数选项:

.\aDLL -h

针对aDLL的使用,我们需要提供至少一个运行参数,即需要分析的可执行程序路径:

.\aDLL -e "C:\System32otepad.exe"

工具选项

-h:显示工具的帮助信息,并简要说明每个选项的功能。
-e:指定aDLL要分析的可执行文件的路径。
-t:指定文本文件的路径,其中包含可执行路径列表。
-o:指定扫描报告的存储目录路径,每个扫描的可执行文件都将在其中存储报告。
-m:搜索可执行文件的清单列表并将其显示在屏幕上。aDLL将会搜索嵌入在二进制文件中的清单列表,如果清单列表作为外部文件存在,aDLL将无法找到该清单列表。
-w:定义在运行时搜索加载的DLL时可执行进程保持打开状态的秒数。默认时间为20秒。
-aDLL:如果搜索到了待测DLL,则会自动检测该DLL是否会通过伪装成合法DLL来执行(恶意DLL伪装)。
-d:与-a选项结合使用,此选项允许我们选择恶意DLL的路径。
-r:可执行文件导入的每个DLL都可以作为依赖项导入其他DLL。将对aDLL找到的所有未重定向(ApiseSchema或WinSxS)且不属于系统已知DLL列表的DLL进行“n”次递归搜索。

项目地址

https://github.com/ideaslocas/aDLL

参考资料

https://www.microsoft.com/es-ES/download/details.aspx?id=49984

https://github.com/ctxis/DLLHSC

版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!

dll文件dll劫持
本作品采用《CC 协议》,转载必须注明作者和本文链接
目前还没有任何安全厂商公开披露该组织的攻击活动,也没有安全厂商公开披露利用该技术的真实APT攻击事件。由于此次攻击活动属于360全球首次捕获披露,我们根据该组织擅长攻击技术的谐音,将其命名为“旺刺”组织,并为其分配了新编号APT-C-47。
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件
DLL劫持思路和研究
2021-10-25 10:13:22
基础知识DLL文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件。在这种利用场景下,伪造的DLL文件不需要存在任何导出函数即可被成功加载,即使加载后进程内部出错,也是在DLL被成功加载之后的事情。
C:\Users\dyy\AppData\Local\Programs\Python\Python38\Scripts\oci.dll使用 cs 生成恶意 dll,重命名为?后放置到该目录下手动挖掘Process Monitor 查找可用 dll,设置如下图所示配置完可以保存导出配置,下次直接导入使用使用?进行测试,运行程序 filter 加载所使用的 dll 文件这里可以看出来,当?文件编写一个基础的弹窗 dllJAVA1. // dllmain.cpp : 定义 DLL 应用程序的入口点。CS 上线cs 生成 c 的 payload生成的?填入到下面相应的位置上CPP1
Kaspersky AVP.exe DLL 劫持
2022-07-21 22:53:31
Kaspersky AVP.exe 中的 DLL 注入允许本地管理员在不知道 Kaspersky 密码的情况
一个应用程序运行时可能需要依赖于多个 dll 的函数才能完成功能,如果控制其中任一dll,那么便可以控制该应用程序的执行流程。
DLL劫持的防御策略
近日,安识科技A-Team团队监测到一则 Node.js 组件存在 DLL 劫持漏洞的信息,漏洞编号:CVE-2022-32223,漏洞威胁等级:高危。对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
aDLL是一款功能强大的代码分析工具,可以帮助广大研究人员以自动化的方式识别并发现DLL劫持漏洞。
DLL 代理加载 shellcode
2020-10-27 17:59:01
DLL侧面加载或DLL代理加载允许攻击者滥用合法的和经过签名的可执行文件,以在受感染的系统上执行代码。使用上面的示例流程,将发生以下情况。签名,目标应该是经过数字签名的“合法”可执行文件。在运行时不安全地加载少量DLL ,可执行流必须是可劫持的,但我们不希望将超过1-3个DLL放到目标上以使我们的攻击才能顺利进行。名称应与原始DLL名称匹配,命名“ libnettle-7”,然后单击“创建”。我们使用SharpDllProxy生成源代码时定义了文件名“ ”。
一颗小胡椒
暂无描述