InnoSetup 创建的可执行文件有办法阻止 DLL 重定向吗?

问题描述 投票:0回答:2

启动使用 InnoSetup 创建的安装程序时,它会尝试从 Windows 加载公共控件 DLL。我假设这是为了渲染 UI 对话框。但是,通过使用 Windows 提供的 DLL 重定向功能 (https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-redirection),您可以使安装程序以不同的方式运行您放置在特定位置的 DLL。

此行为可能会成为问题,特别是如果安装程序本身需要提升权限才能运行,但安装程序文件已放置在更易于访问的位置(例如用户下载文件夹)。

Microsoft 提供了几个选项来管理 DLL 加载行为,例如在构建应用程序时使用链接器上的一些特定参数 (https://devblogs.microsoft.com/oldnewthing/20230328-00/?p=107978 )

所以我想知道是否有办法告诉 InnoSetup 使用此(或其他)缓解替代方案来防止这种情况发生。这是一个已知问题吗?是否存在一些关于如何处理此问题的文档?

PS:我目前使用的是InnoSetup v6.0.5

inno-setup dll-injection
2个回答
1
投票

在深入研究 InnoSetup 文档后,发现这个问题在更高版本中得到了修复。使用 v6.2.2(当前最新版本)构建的安装程序似乎不会出现相同的问题,并且不会尝试运行“假”dll。

摘自JRSoftware网站:

默认行为的更改:从 Inno Setup 6.1 开始 [Setup] 节指令 MinVersion 默认为 6.1sp1,因此默认情况下安装 无法在 Windows Vista 或 Windows 7 和 Windows 版本上运行 Server 2008 R2 尚未更新。将 MinVersion 设置为 6.0 支持允许安装程序在 Windows Vista 上运行,但不支持 建议:Windows Vista 不支持某些安装程序的安全性 针对潜在 DLL 预加载攻击的措施 所以这些必须是 如果 MinVersion 低于 6.1 则被编译器删除 安装程序在所有版本的 Windows 上都不太安全。


0
投票

InnoSetup 至少从 5.3.11 版本开始就具有防止 DLL 重定向的功能,并且随着时间的推移不断更新这些功能。

发布历史记录的注释:

v5.3.11 https://jrsoftware.org/files/is5.5-whatsnew.htm#installerprotect1

  • InnoSetup 特别禁止本地加载 DLL(正如我在下面尝试的那样)。其文档说明了以下与 DLL 劫持相关的内容: o“为了帮助保护安装程序免受潜在的 DLL/EXE 预加载攻击,安装/卸载现在调用 SetDllDirectory 从 DLL 搜索顺序中删除当前目录,并调用 SetSearchPathMode 来防止 SearchPath 和 CreateProcess 在系统目录之前搜索当前目录。”

v5.5.9 https://jrsoftware.org/files/is5.5-whatsnew.htm

  • “为了进一步帮助保护安装程序免受潜在的 DLL 预加载攻击,安装/卸载现在会调用 SetDefaultDllDirectories(如果可用)从 DLL 搜索顺序中删除应用程序目录。如果 SetDefaultDllDirectories 不可用或无法调用,它现在会额外预加载一组已知会被旧版或未修补版本的 Windows 不安全加载的系统 DLL。”

v6.1 https://jrsoftware.org/files/is6.1-whatsnew.htm

  • “...默认情况下,安装程序不会在 Windows Vista 或尚未更新的 Windows 7 和 Windows Server 2008 R2 版本上运行...[早期 Windows 版本不]支持安装程序针对潜在 DLL 预加载攻击的一些安全措施”

© www.soinside.com 2019 - 2024. All rights reserved.