http://labs.chinamobile.com/mblog/398353_63956

这几天各大杀毒厂商都在炒作Dll劫持,这种攻击方式好像在2002年就出现过。其实攻击的方法说白了就是偷梁换柱。将一些恶意的DLL文件伪装成Windows的动态链接库,由于某些软件在调用Windows动态链接库的时候会先搜索本目录下的,因此就导致了伪装DLL文件的执行。

这样说或许有些人还是不明白,我举一个简单的例子:假如你安装了酷狗播放器,而酷狗播放器在播放音乐的时候必须调用Windows系统下一个标准动态链接库mp3play.dll,那么黑客就自己开发一个恶意的mp3play.dll,然后再找一个MP3歌曲,将这个恶意的DLL和歌曲放在同一个文件夹下,然后打包压缩发给受害者。

如果受害者用右键将这个压缩包中的MP3文件和DLL文件都解压缩到了一个目录中(90%的人会这样干),那么当受害者点击这个MP3文件的时候,酷狗就会先去寻找mp3play.dll进行加载,而微软设计的加载顺序是先从默认文件本身的目录进行寻找,于是那个虚假的、恶意的mp3play.dll就先被加载运行了。

大致是这样的一个过程。我的同事找来了一个不错的文章,给大家转载一下,让大家更加了解DLL劫持吧

一 回顾DLL挟持的发展

2010年08月24日 微软发布安全公告2269637,提到三方软件编程不安全存在一个DLL挟持的缺陷可以导致远程攻击

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

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

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

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

windows xp sp2系统以上会默认开启SafeDllSearchMode,安全dll搜索模式下DLL文件的搜索顺序如下所示

(1)可执行程序加载的目录(可理解为程序安装目录比如 C:/Program Files/uTorrent)
(2)系统目录(即 %windir%/system32 )
(3)16位系统目录(即 %windir%/system)
(4)Windows目录(即 %windir%)
(5)运行某文件的所在目录,比如C:/Documents and Settings/Administrator/Desktop/test)
(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挟持的通用免疫方案

可以通过编辑HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/KnownDLLs来添加需要面议的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挟持漏洞了,目前已经发现的存在DLL挟持缺陷的主要有以下几类

① 特定系统环境下的文件

典型的有dwmapi.dll文件,xp环境下不存在,vista以上版本存在,也就是说需要触发这个漏洞的系统环境只能是XP系统

② 特定软件版本下的文件

典型的有:ieframe.dll,IE6下不 存在,ie7以上版本有,也就是说触发漏洞的电脑IE必须是IE6版本

③ 特定的库文件

典型的有:mfc80chs.dll

④ 程序自己需要的dll文件,可能是为了功能扩展或者兼容

典型的有:plugin_dll.dll

⑤ 其它未知

(2)新DLL挟持利用重现

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

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

(3)新DLL挟持的免疫

目前微软没有提供有效的免疫方案可以使用,建议升级你常用软件到最新版本.

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

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

1  BT下载大片传播

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

2  美女图片分享传播

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

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

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

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

Google Earth
Nullsoft Winamp 5.581
Media Player Classic 6.4.9.1
Mozilla Thunderbird
Microsoft Office PowerPoint 2007
Adobe InDesign CS4
Nvidia Driver
Adobe Illustrator CS4
Adobe Premier Pro CS4
Skype <= 4.2.0.169
TechSmith Snagit 10
Safari v5.0.1
uTorrent
Microsoft Visio 2003
Adobe Photoshop CS2
avast! <= 5.0.594
Adobe Dreamweaver CS5
Opera v10.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_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/KnownDLLs

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

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

DLL劫持的发展历程相关推荐

  1. 如何向小白讲述软件架构发展历程?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:kimmking,关注于互联网电商,金融,支付等系统领域,10多年研发管理和架构经 ...

  2. 软件架构发展历程分享

    本文来自作者 kimmking 在 GitChat 上分享 「软件架构发展历程分享」,「阅读原文」查看交流实录. 编辑 | 哈比 什么是架构 计算机科学和程序设计的飞速发展,使得软件设计应用到从航空航 ...

  3. 【超分辨率】从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程

    此文转自 知乎专栏 棉花糖的工坊 作者 棉花糖 (侵删) 一直在学习图像超分辨率和深度学习,看到此文写得很好,故此转载分享.如有侵权,私信联系我,我将作删除. 超分辨率技术(Super-Resolut ...

  4. 浅谈显 ipqq 发展历程

    浅谈显 ipqq 发展历程 [附显 ipqq原理] 声明,本文章未经过疯狂绅士与runjin的同意不得转载. 浅谈IPQQ软件的技术发展轨迹 疯狂绅士.RunJin 摘要:本文先给出了IPQQ的界定, ...

  5. 【原创】软件架构技术发展历程总结及思考 1of2(待续)

    软件架构技术的发展历程总结及思考1of2(待续) 骆金松 1   软件架构技术产生的背景 1.1     软件危机的出现 20 世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的 ...

  6. C/C++发展历程和标准

    1.C语言发展历程 C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统.此时,C语言又被称为 ...

  7. 百度PHP高级顾问惠新宸:PHP在百度的发展历程

    惠新宸,百度PHP高级顾问,年二十有八,好追根究底,有不良嗜好, 幸性本善.乙酉年识互联网,丁亥年入雅虎,翌年入百度.虽性好安稳,然经变无数,唯常叹"人生,菠菜汤尔". 大家好,今 ...

  8. vue 发展历程时间轴动画_PPT时间轴如何做出创意感?海量素材免费分享,网友:收藏...

    时间轴页面,是工作型PPT中常见的页面之一.个人述职或者公司介绍PPT中,使用时间轴,能够让观众更加清晰地了解公司的发展历程. 但是,很多人在制作时间轴页面时,往往是这样的效果: 只有几行字和一根线, ...

  9. 7 大主题!梳理神经网络中 Normalization 的发展历程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本篇文章用于总结近年来神经网络中 Normalization 操作 ...

最新文章

  1. Castor映射java对象
  2. [K/3Cloud]进度条控件编程接口
  3. easyui 行编辑修改
  4. 深入了解 gRPC:协议
  5. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
  6. 从 DevOps 到 Serverless
  7. Ubuntu16.04 安装 docker
  8. Spring Data JPA 从入门到精通~SpEL表达式的支持
  9. 数据结构基础(7) --循环队列的设计与实现
  10. 取得浏览器当前鼠标的X,Y坐标的JavaScript脚本及document元素的一些重要属性
  11. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)
  12. 这10道大厂Java面试题,我敢打赌90%的人都不会!!!
  13. 论文笔记 -- Contrastive Clustering(对比聚类)
  14. openwrt lede_在openwrt lede接入点上的免费动态dns服务提供商配置
  15. egret引擎生命周期相关
  16. 团队作业8----第二次项目冲刺(Beta阶段) 第二天
  17. 这27个电源符号,还傻傻分不清楚?
  18. 博学笃志 追求卓越--献给研究生的12条忠告与建议
  19. 男生一些必备APP的分享
  20. 基于深度学习的图标型验证码识别系统(包含完整代码、界面)

热门文章

  1. 算法之动态规划——编辑距离问题
  2. android 仿微信侧滑删除SwipeListView实例
  3. # mergeSort 归并排序
  4. 【Python】hello python!
  5. SQL2008 一直error40 无法连接到localhost
  6. 【概率论】1-0:介绍
  7. PXE 01-PXE介绍
  8. python文件和目录操作方法
  9. android studio 导入一个已有的android studio project作为lib使用
  10. F1.4大光圈专业相机-海鸥CF100