如何防止DLL劫持?

时间:2016-02-09 10:25:02

标签: dll loadlibrary dlopen dll-injection

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

在DLL劫持中如果程序员开始使用绝对路径而不是相对路径,则漏洞将会减少。读取绝对路径,Windows或任何其他操作系统将不依赖于路径的系统变量,并将直接寻找预期的DLL,从而忽略在更高优先级路径中加载相同名称DLL的机会。这种方法也不是防故障的,因为如果系统受到攻击,并且网络犯罪分子知道DLL的确切路径,他们将用假DLL替换原始DLL。这将覆盖文件,以便将原始DLL更改为恶意代码。但同样,网络犯罪分子需要知道应用程序中提到的确切绝对路径,该路径需要DLL。这个过程对网络犯罪分子来说很难,因此可以依靠。