Copyright (c) 2010 Czy Invicta <Hack01@Live!cn> All rights reserved.
在这篇文章中,我要谈论一些缺陷如何成为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分钟到一个小时。
图1:审计应用程序特定文件的扩展名
审计结束后,脚本会产生并保存它生成的报告。确保你保存在审计工具包目录中,名称为Logfile.CSV。
接下来,运行02_Analyze.bat脚本。此脚本会解析CSV文件并确定潜在的漏洞。如果一个漏洞被发现之后,应用程序会生成概念验证攻击代码可用于演示该漏洞。
图2:第二个脚本实际上是检查潜在的漏洞并企图利用这些漏洞
一旦完成之后,命令提示符会列出哪些应用程序成功地利用。对于每一个可利用的应用程序,该脚本将创建一个Exploits子目录。除此之外,如果你发现了脆弱的应用程序,那么你应该检查一下应用程序的提供商是否存在补丁。如果没有,那么建议你与供应商取得联系并为他们提供概念验证代码,使他们能及时给出一个更新补丁。
部署CWDIllegalInDllSearch ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Microsoft最初对这一漏洞提供一个注册表修改以有助于减轻动态DLL加载的攻击。此部署要非常小心,因为它有可能破坏应用程序的功能,但如果你对这个攻击媒介关注,它值得测试。你可以从http://support.microsoft.com/kb/2264107/cn这里阅读更多信息。
卸载存在漏洞的软件 ~~~~~~~~~~~~~~~~~~~~ 听起来像在开玩笑,因为这可能不总是可行的。但如果你正在运行一个脆弱的应用程序,应该考虑一下它所带来的后果。
部署入侵检测系统 ~~~~~~~~~~~~~~~~~~~ 在某些情况下,你根本无法缓解攻击。因此,最好的事情就是,你可以赶在攻击者的入侵行动之前(对于此部分的详细内容,已经在曾经写过的文章中详细概述许多遍),使用像Snort之类的东西。
尾声 ~~~~~~ 有如此多的DLL劫持漏洞的出现,表明了一个有趣的事情,因为它不会轻易地由操作系统补丁得到解决。一定要明白此漏洞是如何工作的,如何测试你的网络中所运行的应用程序,以及如何修补它。这是我们安全漏洞研究员工作的一部分,也希望你能做好。有疑问请写信件至我的Email(Hack01[at]Live.cn)内。
# HACKER NETSPY [C.Z.Y]
|