什么是dll劫持?

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

我读了很多关于哪些应用程序易受攻击的问题,但是为什么还没有深入。

解决赞赏。

基础很简单。 Windows有一个DLL的搜索路径,就像它找到可执行文件的路径一样。 如果你可以找出没有绝对路径的应用程序需要什么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。 任何允许外部库动态链接的操作系统在理论上都是脆弱的。

DLL劫持真的是一个简单的概念。

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

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