如何防范 DLL 劫持?

How to protect against DLL Hijacking?

不时发布安全建议,警告 DLL 注入的风险。

是否有通用的方法来防止 DLL 劫持?我不熟悉该主题,但请求绝对文件名而不是相对文件名应该足以防止工作目录中的恶意 DLL,不是吗?

如果可以覆盖我安装目录中的 DLL,那么也可以覆盖我的可执行文件,因此签名检查接缝无用。

对于不使用绝对路径请求 DLL 的应用程序,可以实现 DLL 劫持。这会触发搜索过程,并且通过将受感染的 DLL 放置在搜索补丁中高于真实版本的位置,有可能执行恶意代码。但是,您的安装目录应该在搜索路径中排在第一位,因此它似乎不适用于您的情况。然而,在将敏感数据(例如密码和用户名)传递给 DLL 时您应该小心。

在 DLL 劫持中 如果程序员开始使用绝对路径而不是相对路径,则漏洞将会减少。读取绝对路径后,Windows 或任何其他操作系统将不依赖于路径的系统变量,而是直接进入预期的 DLL,从而排除在更高优先级路径中加载同名 DLL 的机会。这种方法也不是万无一失的,因为如果系统受到威胁,并且网络犯罪分子知道 DLL 的确切路径,他们将用伪造的 DLL 替换原始 DLL。这将覆盖文件,从而将原始 DLL 更改为恶意代码。但同样,网络罪犯需要知道调用 DLL 的应用程序中提到的确切绝对路径。这个过程对于网络犯罪分子来说是艰难的,因此可以依靠。