首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>系统安全>文章内容
分析DLL劫持攻击
来源:Hack01@Live!cn 作者:Czy 发布时间:2010-12-06  

Copyright (c) 2010 Czy Invicta <Hack01@Live!cn>
All rights reserved.

分析DLL劫持攻击

在这篇文章中,我要谈论一些缺陷如何成为DLL劫持的可能性。希望能够在以后使用应用程序的时候确定它是否为脆弱的,并能够采取措施以确保你不是这次攻击的目标。


工作机制
~~~~~~~~~~~
DLL的劫持成为可能,是因为几乎所有的Windows应用程序的动态链接库作为核心功能的一部分。DLL包含了模块化代码,开发人员可以根据他们的应用程序的需求来调用并执行各种功能。

随着DLL内置到Windows,应用开发商往往创建出包含自己DLL函数的应用程序。当这些完成之后,开发人员将为DLL与应用程序打包并安装。问题就发生在应用程序是如何加载DLL的。默认情况下,当一个应用程序没有一个静态定义路径的情况下,它需要一个DLL通过一个进程去发现它的动态。在这样的应用程序中首先搜索所执行的当前目录,然后搜索系统目录、16-bit系统目录、Windows目录,然后再PATH环境变量中列出操作系统目录。应用程序将使用该DLL来找到这些路径。

鉴于知识,让我们想一下我们在哪里已经执行了一个应用程序,必须动态查找什么时间加载的DLL。从执行路径中搜索并找到一个匹配的DLL。不幸的是,真正的DLL与应用程序关联的,位于Windows系统目录中。如果应用程序目录中的DLL已经被一个攻击者修改,并允许远程命令Shell访问到系统中,那么,应用程序将永远得不到真正的DLL,因为它已经找到了自己所匹配的并得到了需求。那是攻击者所做的。


识别脆弱的应用程序
~~~~~~~~~~~~~~~~~~~~
DLL劫持攻击的最大问题是,Microsoft不能发布所有脆弱应用程序的解决方案,因为这样做只会导致某些应用程序不能正常工作(或全部)。在这样的情况下,固定的问题是出现的双方的手中。第一,公司与谁创建了这个脆弱的应用程序,开发人员必须解决他们的代码并为用户提供更新。第二,用户(即系统管理员)必须确定他们的网络正在运行的应用程序容易遭受攻击,寻求供应商提供补丁并安装。

这里有几种方法来确定正在运行的应用程序是否存在漏洞。最简单的方法是检查公共资源的安全资料。也可以访问http://www.exploit-db.com/dll-hijacking-vulnerable-applications/,这里包含了相当可观的清单。

第二种方法需要更多的工作,但有一点要注意,要在高度安全的环境中进行。现在,你可能认为这种事情是高度技术性的,并通常是高层次的安全研究员保留的。但不管怎样,我们需要一个审计工具包来查找系统上脆弱的应用程序。

该套件被称为“DllHijackAuditKitv2”并且可点击这里下载DLLHijackAuditKit.zip。你需要确保你是作为一个系统管理员身份登录的,解压ZIP文件,并执行01_StartAudit.bat。这个脚本将下载Sysinternals进程监视器,并开始检测系统是否存在脆弱的应用程序。我已经意识到下载监视器的过程中往往会失败,如果你在运行脚本之后发生了同样的情况,可以手动下载这个http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx工具。确保下载到与审计脚本相同的目录中。在初步审计时将需要一些时间来运行。根据不同的应用程序在系统中可能需要15分钟到一个小时。

分析DLL劫持攻击
图1:审计应用程序特定文件的扩展名

 

审计结束后,脚本会产生并保存它生成的报告。确保你保存在审计工具包目录中,名称为Logfile.CSV。

接下来,运行02_Analyze.bat脚本。此脚本会解析CSV文件并确定潜在的漏洞。如果一个漏洞被发现之后,应用程序会生成概念验证攻击代码可用于演示该漏洞。

分析DLL劫持攻击
图2:第二个脚本实际上是检查潜在的漏洞并企图利用这些漏洞

 

一旦完成之后,命令提示符会列出哪些应用程序成功地利用。对于每一个可利用的应用程序,该脚本将创建一个Exploits子目录。除此之外,如果你发现了脆弱的应用程序,那么你应该检查一下应用程序的提供商是否存在补丁。如果没有,那么建议你与供应商取得联系并为他们提供概念验证代码,使他们能及时给出一个更新补丁。


部署CWDIllegalInDllSearch
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Microsoft最初对这一漏洞提供一个注册表修改以有助于减轻动态DLL加载的攻击。此部署要非常小心,因为它有可能破坏应用程序的功能,但如果你对这个攻击媒介关注,它值得测试。你可以从
http://support.microsoft.com/kb/2264107/cn这里阅读更多信息。


卸载存在漏洞的软件
~~~~~~~~~~~~~~~~~~~~
听起来像在开玩笑,因为这可能不总是可行的。但如果你正在运行一个脆弱的应用程序,应该考虑一下它所带来的后果。


部署入侵检测系统
~~~~~~~~~~~~~~~~~~~
在某些情况下,你根本无法缓解攻击。因此,最好的事情就是,你可以赶在攻击者的入侵行动之前(对于此部分的详细内容,已经在曾经写过的文章中详细概述许多遍),使用像Snort之类的东西。


尾声
~~~~~~
有如此多的DLL劫持漏洞的出现,表明了一个有趣的事情,因为它不会轻易地由操作系统补丁得到解决。一定要明白此漏洞是如何工作的,如何测试你的网络中所运行的应用程序,以及如何修补它。这是我们安全漏洞研究员工作的一部分,也希望你能做好。有疑问请写信件至我的Email(Hack01[at]Live.cn)内。

 

# HACKER NETSPY [C.Z.Y]


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·Windows 系统调用功能列表
·windows入侵提权-创建隐藏帐号(
· CC_STACKPROTECTOR防止内核stac
·Linux内核安全研究之Stack Overf
· Exploit The Linux Kernel NULL
·Kernel Locking 中文版
·IA32上Linux内核中断机制分析
·Award BIOS Rootkit,universal
·PHP代码审计
·N种内核注入DLL的思路及实现
·glibc 2.3.5 的一些新安全特性
·Struts2/XWork < 2.2.0 Remote C
  相关文章
·HOWTO: 在本地配置名字服务器并
·php扫马、内网查mysql数据库账号
·windows堆溢出利用方式总结
·Linux内核安全研究之Stack Overf
· CC_STACKPROTECTOR防止内核stac
·Linux下的入侵响应案例
·windows溢出保护原理与绕过方法
·php通用防注入程序
·PHP代码审计
·高级脚本“小马”的后门发现之旅
·Shell 防止CC攻击
·PHP漏洞中的战争
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved