2010-09-02 55 views

回答

43

基礎很簡單。 Windows有一個DLL的搜索路徑,與找到可執行文件的$ PATH非常相似。如果您可以找出沒有絕對路徑的應用程序所需的DLL(觸發此搜索過程),則可以將敵對DLL放置在搜索路徑的更高處,以便在實際版本之前找到它,並且Windows將很高興將您的攻擊代碼提供給應用程序。

所以,讓我們假設你的系統的DLL搜索路徑看起來是這樣的:

a) .  <--current working directory of the application, highest priority, first check 
b) \windows 
c) \windows\system32 
d) \windows\syswow64 <-- lowest priority, last check 

和一些應用foo.exe的請求「bar.dll」,這恰好住在SysWow64資料(d)子目錄。這使您有機會將惡意版本置於a),b)或c)中,並且只要應用程序請求bar.dll就會自動將其加載到應用程序中。現在,你的美好,真實地被禁止了。

如前所述,甚至是絕對的完整路徑不能防止這一點,如果你可以替換爲自己的版本的DLL。

,當然還有,這是不是真的限制到Windows任。任何允許外部庫動態鏈接的操作系統理論上都容易受此影響。

7

DLL劫持是一個非常簡單的概念。

應用加載經由DLL的外部代碼(動態鏈接庫)。 DLL Highjacking是惡意代碼通過與應用程序使用的DLL具有相同名稱的惡意DLL注入應用程序的過程。

的應用程序,這取決於它們如何引用他們的DLL是脆弱的DLL劫持。一個例子是使用相對路徑而不是DLL的絕對路徑。另一個是使用環境變量加載DLL,在這種情況下,該目錄默認爲正在執行的應用程序的相對路徑。