DLL劫持的发展历程
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劫持的发展历程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: v8学习笔记(八) 【JS与C++互调】
- 下一篇: C/C++头文件大全