什么是dll劫持?

The*_*per 40 windows dll

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

我读了很多关于哪些应用程序易受攻击的内容,但没有深入了解原因.

答案赞赏.

Mar*_*c B 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
Run Code Online (Sandbox Code Playgroud)

和一些应用程序Foo.exe请求"bar.dll",它恰好存在于syswow64(d)子目录中.这使您有机会将恶意版本放在a),b)或c)中,并且只要应用程序请求bar.dll,它就会自动加载到应用程序中.现在,你的foo很好,而且很棒.

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

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


Jus*_*ner 9

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

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

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