天天看點

【技術好文】你需要知道的DLL劫持都在這裡了DLL劫持加入社群

DLL劫持

概念

首先來了解DLL在Windows系統中的作用,DLL全稱Dynamic Link Library,稱為動态連接配接庫,在Windows系統中,大多數程式并不是一個單獨的可執行檔案,而是有一些單獨的存放動态連結庫在系統中,當需要某些功能時,通過DLL執行相應的功能,即DLL調用。

那麼既然程式執行某些功能時,可能會通過DLL調用,從利用角度來看,如果替換了這個DLL檔案,或者導出了原DLL的導出函數并惡意構造,在原程式調用正常DLL前調用了我們預先構造好的惡意DLL,那麼就達到了劫持的效果。

是以手法可以有多種,比如替換原DLL檔案,黑DLL放置最先路徑,DLL轉發等。

【技術好文】你需要知道的DLL劫持都在這裡了DLL劫持加入社群

DLL搜尋順序

  1. 程序對應的應用程式所在目錄;
  2. 目前目錄(Current Directory);
  3. 系統目錄(通過 GetSystemDirectory 擷取);
  4. 16 位的系統目錄(即 Windows 目錄中的 System 目錄);
  5. Windows目錄(通過 GetWindowsDirectory 擷取);
  6. PATH環境變量中的各個目錄;

例如:對于檔案系統,如Doc文檔打開會被應用程式Office打開,而Office運作的時候會加載系統的一個DLL檔案,如果我們用惡意的DLL來替換系統的DLL檔案,就是将DLL和Doc文檔放在一起,運作的時候就會在目前目錄中找到DLL,進而優先系統目錄下的DLL而被執行。

更詳細的參考文檔可以在官方文檔中檢視:

https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order

防禦思路

  1. 調用第三方DLL時,使用絕對路徑
  2. 調用API SetDllDirectory()将目前目錄從DLL加載順序中移除
  3. 在開發階段,就使用工具對系統進行測試

DLL劫持漏洞的檢測軟體

文末檢視軟體下載下傳位址

  1. Ratter
  2. ChkDllHijack
  3. Process Explorer
  4. DLL Hijack Auditor

加入社群

繼續閱讀