【发布时间】:2010-09-02 02:37:18
【问题描述】:
简单问题:什么是dll劫持?
我阅读了很多关于哪些应用程序易受攻击的信息,但没有深入了解为什么。
答案表示赞赏。
【问题讨论】:
简单问题:什么是dll劫持?
我阅读了很多关于哪些应用程序易受攻击的信息,但没有深入了解为什么。
答案表示赞赏。
【问题讨论】:
基础很简单。 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。理论上,任何允许动态链接外部库的操作系统都容易受到此攻击。
【讨论】:
DLL 劫持其实是一个简单的概念。
应用程序通过 DLL(动态链接库)加载外部代码。 DLL 劫持是通过与应用程序使用的 DLL 同名的恶意 DLL 将恶意代码注入应用程序的过程。
根据应用程序引用其 DLL 的方式,应用程序容易受到 DLL 劫持。一个示例是使用相对路径而不是 DLL 的绝对路径。另一种是使用可能未正确设置的环境变量加载 DLL,在这种情况下,目录默认为正在执行的应用程序的相对路径。
【讨论】: