天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧安全 >> 正文

金山安全专家详解DLL劫持漏洞技术原理

2010-8-31天空软件佚名
p>  一、回顾DLL挟持的发展

  2010年08月24日微软发布安全公告2269637,提到三方软件编程不安全存在一个DLL挟持的缺陷可以导致远程攻击,随后DLL劫持漏洞开始大规模传播,金山毒霸云安全实验室也在第一时间发布病毒预警,并发布对应的金山毒霸免疫工具。

  2010年08月24日流行的漏洞信息共享网站exploit-db马上就爆出多个DLL挟持漏洞涉及的软件有:Wireshark(免费嗅探器),WindowsLiveemail(邮箱客户端),MicrosoftMovieMaker(视频编辑处理),Firefox(网页浏览器),uTorrent(BT下载工具),PowerPoint2010(办公软件)等

  2010年08月25日-26日漏洞信息共享网站exploit-db继续爆出Winamp,GoogleEarth,Photoshop等软件存在DLL挟持漏洞,同时发布这个blog之前笔者的电脑中已经发掘存在的流行软件有,QQ影音,QQ音乐,美图秀秀,ppstream等

  二、新老DLL挟持的攻击原理分析和防御

  1动态链接库文件通常加载顺序如下

  windowsxpsp2系统以上会默认开启SafeDllSearchMode,在这么模式下DLL文件的搜索顺序如下所示

  (1)可执行程序加载的目录(可理解为程序安装目录比如C:ProgramFilesuTorrent)

  (2)系统目录(即%windir%system32)

  (3)16位系统目录(即%windir%system)

  (4)Windows目录(即%windir%)

  (5)当前目录(运行的某个文件所在目录,比如C:DocumentsandSettingsAdministratorDesktoptest)

  (6)PATH环境变量中列出的目录

  2老DLL挟持触发的原理解析和防御(漏洞触发在DLL搜索流程的第一层)

  (1)老DLL挟持的特点:

  为了增加触发的概率,通常会使用usp1.dll,ws2_32.dll,lpk.dll等应用程序所必须的系统dll文件,然后利用DLL搜索第一顺位是程序安装目录,在程序安装目录释放一个同名DLL文件,抢先加载恶意病毒DLL文件,从而达到破坏的作用。这里可执行程序相当于恶意dll的加载器

  (2)老DLL挟持病毒利用回顾重现

  2007年罗姆病毒(ws2_32.dll导致很多杀毒软件无法打开),2009年春节猫癣病毒(usp10.dll导致很多用户重装系统都无法解决病毒问题)

  通常使用老DLL挟持的病毒木马会枚举电脑里面的所有exe目录,然后将恶意的usp10.dll释放到每个exe所在的目录。当用户执行一个应用程序的时候,将会把恶意的usp10.dll文件优先加载从而感染系统

  根据前面介绍的DLL加载顺序,运行程序的时候会优先到程序执行的目录下加载必须文件,下图显示了utorrent.exe在安装目录下的找到了usp10.dll文件并把它加载到内存中。

  (3)老DLL挟持的通用免疫方案

  可以通过编辑HKLMSYSTEMCurrentControlSetControlSessionManagerKnownDLLs来添加需要面议的DLL文件,比如:新建一个ws2_32指向ws2_32.dll

  3新DLL挟持触发的原理解析和防御(漏洞触发在DLL搜索流程的第五层)

  (1)新DLL挟持的特点:

  应用程序为了扩展或者兼容等目的需要加载相应的DLL文件,但是因为某些原因导致这个DLL文件默认不存在于当前系统,比如plugin_dll.dll文件默认情况下不存在utorrent的安装目录,dwmapi.dllxp环境下不存在(Vista以上系统存在),ie6环境下没有ieframe.dll(ie7以上版本存在)。正是因为程序需要的DLL文件在DLL搜索顺序的(1)-(4)中都不可能存在,此时就会尝试加载文件所在目录下的恶意dll文件,从而达到破坏的作用。这里运行的文件(比如mp3)相当于触发者,根据文件关联它会启动一个应用程序去播放mp3文件。而因为应用程序存在DLL挟持漏洞(比如QQ影音),此时QQ影音就会因为设计上的不足导致成为恶意DLL的加载器。相当于老DLL挟持,简直达到了运行图片/视频文件就会执行恶意文件的目的,当然前提是大灰客们能猜中你电脑里面的默认查看的软件是否存在DLL挟持漏洞了

  (2)新DLL挟持利用重现

  通常灰客们会先通过DLL挟持挖掘工具寻找存在DLL挟持漏洞的流行应用程序,然后构造相应的文件上传到网络上供用户下载(具体的传播方式请看下一章),如果用户的电脑存在漏洞那么运行相应文件的时候就会执行存在漏洞的程序,从而使得恶意dll被不知不觉加载

  根据前面介绍的DLL加载顺序和新DLL挟持的特点,程序在前四个流程都没有找到需要的文件,只能勉为其难的在第五流程-当前文件目录下加载恶意dll文件,下图就显示了uTorrent加载plugin_dll.dll顺序(前四个流程都是namenotfound)并且加载当前目录下恶意plugin_dll.dll文件(第五流程显示的是success)的过程

  (3)新DLL挟持的免疫

  目前微软没有提供有效的免疫方案可以使用,建议升级你常用软件到最新版本,同时可以尝试使用金山毒霸dll劫持漏洞免疫工具减少风险

  三、新DLL挟持可能存在的攻击方式

  exploit-db公布了存在DLLHijacking的大量常用软件,这些软件里面有视频音频播放器,图像设计浏览软件,IM聊天工具,文字处理软件,网页浏览器,下载软件,杀毒软件。根据在下的一点拙见如果病毒作者想要利用这个漏洞来实现广泛传播的话主要有几种方式。

  1BT下载大片传播

  挖掘出支持BT下载的流行软件(比如uTorrent)的DLLHijacking漏洞,然后构造一个恶意dll文件(估计会设置隐藏属性,这样你解压以后将不会看到这个文件)和BT种子文件打包成压缩包上传到网上供用户下载,用户一旦下载了这个压缩包双击BT种子文件的时候会调用uTorrent打开,uTorrent运行的时候由于设计上的不河蟹根据dll加载的顺序最后会将种子所在目录的恶意dll加载

  2美女图片分享传播

  挖掘出流行图片浏览工具(比如美图秀秀)的DLLHijacking漏洞,然后构造一个恶意dll文件(估计会设置隐藏属性,这样你解压以后将不会看到这个文件)和图片文件打包成压缩包上传到网上供用户下载,用户一旦下载了这个压缩包,解压浏览美女靓照的时候可能会调用图片浏览工具打开从而触发漏洞加载恶意dll文件

  3软件下载包含的网页文件传播

  挖掘出流行网页浏览工具(比如firefox)的DLLHijacking漏洞,然后构造一个恶意dll文件(估计会设置隐藏属性,这样你解压以后将不会看到这个文件),应用程序和htm等网页文件打包成软件压缩包并上传到网上供用户下载。用户一旦下载了这个软件压缩包,解压以后运行安装必看.htm之类的网页文件会调用网页浏览工具打开从而触发漏洞加载恶意dll文件

  4热门视频音频文件传播

  挖掘出流行视频音频播放工具(比如QQ影音)的DLLHijacking漏洞,然后构造一个恶意dll文件(估计会设置隐藏属性,这样你解压以后将不会看到这个文件)和rmvb等视音频文件打包压缩包并上传到网上供用户下载。用户一旦下载了这个压缩包,解压播放相应视频的时候从而触发漏洞加载恶意dll文件

  5目前公布的部分软件列表

  GoogleEarth

  NullsoftWinamp5.581

  MediaPlayerClassic6.4.9.1

  MozillaThunderbird

  MicrosoftOfficePowerPoint2007

  AdobeInDesignCS4

  NvidiaDriver

  AdobeIllustratorCS4

  AdobePremierProCS4

  Skype<=4.2.0.169

  TechSmithSnagit10

  Safariv5.0.1

  uTorrent

  MicrosoftVisio2003

  AdobePhotoshopCS2

  avast!<=5.0.594

  AdobeDreamweaverCS5

  Operav10.61

  Firefox<=3.6.8

  四、DLL安全编程,避免产生DLL挟持问题

  更多信息请访问http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx

  (1)调用LoadLibrary,LoadLibraryEx,CreateProcess的,或者的ShellExecute等涉及到模块加载的函数的时候,指定DLL加载的完整路径,貌似应该有API可以获取当前程序运行的目录的

  (2)考虑使用的DLL重定向或Manifests文件,以确保您的应用程序使用正确的DLL。

  HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerKnownDLLs

  (3)确保DLL安全搜索模式被激活。未使用安全搜索设置的话,第二加载项就是当前目录。

  HKLMSystemCurrentControlSetControlSessionManagerSafeDllSearchMode

  (4)从搜索列表中取消当前目录,可以通过调用SetDllDirectory参数设置为一个空字符串

本文来源:天空软件 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行