什么是dll劫持?

时间:2010-09-02 02:37:19

标签: windows dll

简单问题:什么是dll劫持?

我读了很多关于哪些应用程序容易受到攻击,但对于为什么没有太多深度。

答案赞赏。

2 个答案:

答案 0 :(得分:51)

基础很简单。 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,它就会自动加载到应用程序中。现在,你的foo很好,也很棒。

如前所述,如果您可以用自己的版本替换DLL,即使是绝对完整路径也无法防止这种情况。

当然,这并不仅限于Windows。任何允许动态链接外部库的操作系统在理论上都容易受到攻击。

答案 1 :(得分:9)

DLL劫持实际上是一个简单的概念。

应用程序通过DLL(动态链接库)加载外部代码。 DLL Highjacking是一个恶意代码通过恶意DLL注入应用程序的过程,该恶意DLL与应用程序使用的DLL同名。

应用程序容易受到DLL劫持的攻击,具体取决于它们如何引用其DLL。一个例子是使用相对路径而不是DLL的绝对路径。另一个是使用可能未正确设置的环境变量加载DLL,在这种情况下,目录默认为正在执行的应用程序的相对路径。