网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

无线安全团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > 无线安全 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

APT攻防之DLL劫持技术与白利用结合

文章来源:重庆网络安全 发布时间:2020-03-18 14:05:00 围观次数:
分享到:

摘要:从蓝队的角度来看,我们可以更好地理解攻击者将广泛使用的那些恶意技术,以进行实际的网络攻击,从而更好地防御此类攻击。

DLL劫持技术概述


  在Windows中加载DLL的规则:首先尝试从当前程序所在的目录中加载DLL。如果找不到,它将在Windows系统目录中查找。如果仍然没有,它将在环境变量中列出的目录中查找。


  动态链接库(DLL)劫持原理:攻击者可以使用Windows规则加载DLL,并用恶意DLL替换被劫持程序目录中的合法DLL。


  DLL劫持技术已经存在了很多年,并且早在2010年就被发现了,那么为什么我们要继续炒剩饭呢?因为它仍然是可行的方法,并且在野APT攻击样本中仍然占有一席之地!随着越来越多的APT组织逐渐暴露于每个人的视野,他们使用的攻击负载也将暴露出来。经过长期的分析和研究,我们发现能够挖掘或使用0day攻击的APT组织很少。他们使用现有技术、使用不受欢迎的技术进行攻击。当前,大多数软件开发人员仍不具备安全意识或与安全相关的技能。市场上仍然有许多易受该技术签名的可执行文件。作为一个红色团队,我们可以使DLL劫持技术武器化,即使DLL劫持技术不是新技术或尖端技术,本文仍将分享如何查找可以使用的程序以及如何构造被劫持的DLL。


  DLL劫持技术与白利用结合


  在大多数情况下,程序开发人员使用LoadLibrary API动态加载DLL。可执行程序将首先在当前目录中查找所需的DLL。只需将合法的PE文件复制到攻击者已读写的目录中即可。如果攻击者创建了一个恶意加载的DLL,则合法的应用程序将加载该DLL并执行攻击者的代码,而PE软件可能会被安全软件签名和信任,从而可以绕过白名单机制。


  接下来,我们分析一个示例,我们使用WinWord.exe,这是由Microsoft签名的二进制软件。

blob.png

那么为什么要使用这个模块呢?


  1.该模块是Word的主要模块,它对于网络钓鱼电子邮件非常混乱。(然后,在选择白文件时将优先考虑这种类型的模块,可以根据特定的渗透情况选择)


  2.该模块由Microsoft数字签名。(通常,由Microsoft签名的数字证书的过程将比普通的数字证书更安全)

  我们可以使用IDA将PE文件拖到分析中,首先找到PE文件的函数导入表,找到LoadLibraryWInAPI,然后使用IDA交叉引用函数找到所有引用该函数的特定代码。

blob.png

 我们可以看到该模块在6个地方调用了API,然后找到其中之一具体分析。

blob.png

 我们可以看到第一个LoadLibrary加载了wwlib.dll,经过分析,我们发现没有相关的验证代码。

blob.png

 从下图可以看出,在加载之后获得FMain,然后调用导出的函数。

blob.png

 如果您不能使用IDA静态分析,我们可以使用API监视软件进行观察,例如火绒剑或API Monitor,当然,您也可以使用OD断点进行分析。(此处使用IDA之间没有什么区别。不同的PE文件使用不同的方法来获得最佳结果。)blob.png

blob.png

blob.png

 接下来,我们需要确保WinWord.exe调用wwlib.dll的那些导出函数。

blob.png

 一般的劫持方法有两种。一种是劫持DLL的导出函数。 第二个是DLLMain中劫持。DLL没有初始功能DLLMain。 从上面的代码中,如果我们使用第一种方法进行劫持,则会在加载wwlib之后调用FMain,但是在调用之前将确定是否成功获取了其他两个函数,因此我们需要导出其他两个函数。


  创建一个新的DLL项目,编写3个导出函数,并将DLL命名为wwlib。

blob.png

 写入后,可以将其放置在同一目录中。我们打开该exe来成功加载我们的自定义DLL,并由word.exe加载。

blob.png

 如上所述,还有另一种方法更简单,更通用,但仅限于用C/C++编写的PE文件,这是劫持DllMain中的控制流。


 如果选择这种方式,则无需枚举并满足所有必需的导出。在某些情况下,DLL没有任何导出,只能通过DllMain入口点进行劫持。


  您可以稍微更改代码,在DllMain中的DLL_PROCESS_ATTACH选项下调用FMain,并注释掉退出代码。然后,您将看到两个弹出窗口。当调用LoadLibrary加载wwlib模块时,将调用第一个弹出窗口,加载DllMain,第二个由导出的函数调用。(当DLL首先映射到进程的地址空间时执行DLL_PROCESS_ATTACH)

blob.png


  如何发现DLL劫持漏洞新的可执行文件


  实际上,网络世界中有很多具有DLL劫持漏洞的应用程序,那么我们如何选择相应的可执行文件?


  1.独立的EXE文件可调用恶意DLL。(独立的EXE必须是合法的白文件)


  2.独立的EXE文件必须具有数字签名,并且数字证书短期内不会过期。


  3.数字签名最好包括微软的数字签名。


  4.独立EXE必须在不验证DLL的情况下使用Load加载DLL。

  通过以上方法,容易受到System32目录中DLL劫持的EXE,例如Dism.exe。

blob.png

 这是一个部署映像服务和管理的程序。动态分析系统程序,并观察到它正在尝试将DismCore.dll文件加载到当前目录中,如下图所示:

blob.png

 接下来,我们可以从其正常路径(C:\Windows\System32)将DISM系统程序加载到API Monitor中,如下图所示:

blob.png

 然后,我们使用前面的模块来修改名称以查看并成功弹出被劫持的代码。

blob.png

防御与总结


  首先,有几种更好的方法可以抵御此类攻击。


  1.您可以检查网络连接异常的过程:首先,我们可以记录正常的网络通信过程链。当发现进程的网络活动与记录的进程链不匹配时,它可能会受到DLL劫持的攻击。


  2.加载DLL时,首先将文件读入内存以验证其数字签名或哈希值。如果找不到匹配项,则不会加载DLL。


  3.当然,Microsoft提供了一些有关DLL安全和DLL劫持漏洞的相关文档。


本文由 重庆网络安全 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:APT攻防 DLL劫持 白利用 重庆网络安全公司

上一篇:流氓应用程序收集隐私:分析Apple设备剪贴板上泄漏GPS信息的潜在危险
下一篇:利用攻击西门子PLC系列S7-300的过程和思路介绍适合学习的工控工具和框架

热门资讯

鼠标向下滚动