dll劫持技術

DLL劫持技術當一個可執行文件運行時,Windows加載器將可執行模塊映射到進程的地址空間中,加載器分析可執行模塊的輸入表,並設法找出任何須要的DLL,並將它們映射到進程的地址空間中。git

DLL劫持原理編程

因爲輸入表中只包含DLL名而沒有它的路徑名,所以加載程序必須在磁盤上搜索DLL文件。首先會嘗試從當前程序所在的目錄加載DLL,若是沒找到,則在Windows系統目錄中查找,最後是在環境變量中列出的各個目錄下查找。利用這個特色,先僞造一個系統同名的DLL,提供一樣的輸出表,每一個輸出函數轉向真正的系統DLL。程序調用系統DLL時會先調用當前目錄下僞造的DLL,完成相關功能後,再跳到系統DLL同名函數裏執行。這個過程用個形象的詞來描述就是系統DLL被劫持(hijack)了。windows

 

 

利用這種方法取得控制權後,能夠對主程序進行補丁。此種方法只對除kernel32.dll、ntdll.dll等核心系統庫之外的DLL有效,如網絡應用程序的ws2_32.dll、遊戲程序中的d3d8.dll,還有大部分應用程序都調用的lpk.dll、sxs.dll,這些DLL均可被劫持。api

 

僞造的dll製做好後,放到程序當前目錄下,這樣當原程序調用原函數時就調用了僞造的dll的同名函數,進入劫持DLL的代碼,處理完畢後,再調用原DLL此函數。瀏覽器

 

這種補丁技術,對加殼保護的軟件頗有效,選擇掛接的函數最好是在殼中沒有被調用的,當掛接函數被執行時,相關的代碼已被解壓,能夠直接補丁了。在有些狀況下,必須用計數器統計掛接的函數的調用次數來接近OEP。此方法巧妙地繞過了殼的複雜檢測,很適合加殼程序的補丁製做。安全

 

 

一些木馬或病毒也會利用DLL劫持技術搞破壞,所以當在應用程序目錄下發現系統一些DLL文件存在時,如lpk.dll,應引發注意。網絡

 

如何防止DLL劫持函數

 

DLL劫持利用系統未知DLL的搜索路徑方式,使得程序加載 當前目錄下的系統同名DLL。因此能夠告訴系統DLL的位置,改變加載系統DLL的順序不是 當前目錄,而是直接到系統目錄下查找。
這個想法能夠經過修改註冊表實現。
註冊表鍵值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
是調用系統DLL的首要查找目錄。例如裏面有RE_SZ類型的"ntdll"="ntdll.dll"項,則系統載入"ntdll"時會直接從系統目錄加載。
由此,添加"LPK"="LPK.DLL"便可防止LPK被劫持,同理能夠阻止一些其餘DLL被劫持,例如"USP10"。
在Windows NT系統,XP默認只有少數關鍵DLL在此鍵值下,Win7下面此鍵值已經至關齊全,在Win7系統下發生DLL劫持的機率要比XP小不少。
一 回顧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挾持的攻擊原理分析和防護
動態連接庫文件一般加載順序以下
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挾持問題
(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 參數設置爲一個 空字符串
相關文章
相關標籤/搜索