【问题标题】:How does Windows know I'm installing something?Windows 如何知道我正在安装某些东西?
【发布时间】:2015-11-06 21:06:16
【问题描述】:

禁止用户在没有提升权限的情况下安装程序是一种常见做法,尤其是在大公司中。当用户运行安装可执行文件(.exe.msi)时,会在用户访问控制允许安装之前提示用户输入这些管理员凭据。许多需要安装的程序都利用了默认的 Windows 安装程序 .msi 打包或类似的东西,但可执行文件可以执行所有相同的功能,对吧?

是不是这种常见的安装打包解决方案会告诉 Windows:“嘿,我是安装程序。正在安装一些东西。”? Windows 不会分析可执行文件的实际行为,对吧?

【问题讨论】:

  • 现代应用程序(包括第三方安装程序)应在清单中包含一个条目,说明是否需要提升。对于较旧的应用程序,Windows 会尝试猜测。我不知道在多大程度上分析了可执行文件的预期行为,因为该算法从未完全记录在 AFAIK 中。但是,我们确实知道猜测是在可执行文件实际开始运行之前进行的。
  • 我不确定这对 MSI 文件是如何工作的。不过,Windows Installer 可以动态提升(即在安装期间),因此它可能只是等待并且仅在被要求执行需要它的操作时才请求提升。
  • @HarryJohnston 是的,我想知道这一点。对于.exe 安装程序,Windows 似乎会在任何事情发生之前要求提升,但大多数.msi 文件在执行实际需要的步骤之前不会询问。我不相信所有可执行文件都需要在我的系统上进行提升,不过,我必须使用少数.exe 安装程序。
  • “现代”(这个词仍然让我难以置信)“应用程序”及其安装程序往往是按用户安装的,不需要任何提升的权限。我将使用术语“成熟”应用程序,安装程序可以是每个用户或每台机器,但往往是每台机器,因此往往需要提升。 MSI 中的这个故事非常有据可查。

标签: windows windows-installer installation uac


【解决方案1】:

如果您的问题是关于询问管理员凭据,那么当可执行文件的清单表明它需要管理员权限时,这是正常行为。我猜如果您说您的 InnoSetup 需要管理员权限,它将包含一个需要提升的清单,并且 Windows 将显示提升提示。

没有 Windows InstallShield 这样的东西,以防您认为 InstallShield 是 Microsoft Windows 产品。 InstallShield 是第 3 方产品,在许多情况下会创建 MSI 文件。 MSI 文件被标记(在构建时)是否需要提升。这是说明 MSI 是否需要提升才能安装的摘要信息 strean Word Count:

https://msdn.microsoft.com/en-us/library/aa372870(v=vs.85).aspx

【讨论】:

  • 我对“InstallShield”位的错误,由于某种原因,我将它与 UAC 混淆了。问题已更新。因此,安装程序是否需要提升真的取决于发布者吗?当然,Windows 必须进行一些分析,否则可能会简单地包含此清单,这似乎有点像一个安全漏洞。或者,是否可以编写一个可执行文件来执行 .msi 或 manifest'd .exe 将执行的所有相同步骤并在 UAC 的雷达下飞行?
  • 从技术上讲,Windows 分发了一些有趣的 InstallShield 垫片。 :) 他们拦截了 InstallScript 引擎,并出于 appcompat 的原因替换了 Flexera 提供给 Microsoft 的不同版本。
  • @iAmMortos:这里没有安全问题。如果您以标准用户身份登录并运行安装程序,则 Windows 将要求输入管理员密码,或者它将在没有管理员权限的情况下运行安装程序。允许标准用户安装软件,前提是安装只影响用户自己的帐户。
  • (如果系统管理员想要阻止用户安装或运行任何未经批准的软件,则需要采用不同的方法。组策略可用于将已批准的可执行文件列入白名单,并将 Windows 配置为拒绝运行任何未经批准的可执行文件在白名单上。)
【解决方案2】:

如果是 .MSI,Windows 会自动知道您安装的内容。我认为您的问题更像是除了 .MSI 之外的其他内容? Windows 内置了一些启发式方法,AFAIK 由应用程序兼容性团队管理。他们做一些事情来检测他们是什么设置(如文件名、进程名、检查摘要信息流等)并执行各种功能,如检测可能失败的安装、询问它是否是安装以及是否失败他们执行应用程序兼容性填充程序,例如版本谎言和强制 UAC 提升提示。

您可以避免这个丑陋的世界,我编写了正确设计的 MSI。 :)

【讨论】:

  • 有道理,所有.msis 都是安装人员,对吧?但正如 Harry 在问题的 cmets 中所说,一些 .msis 在达到某个步骤之前不会要求提供凭据,因此这些似乎具有动态提升过程。 .exes 的启发式方法也很有意义,但它是一个万无一失的系统吗?难道怀有恶意的人仍然能够编写可以“安装”而不触发 UAC 的东西吗?
  • 对于 EXE 来说,这不是一个万无一失的系统。他们只是试图帮助它工作的垫片,而不是真正的安全模型。 MSI 有一个健壮的安全模型,它有很好的文档记录,需要一章来描述它。
  • 是的。 MSI 有一个安全模型,管理员可以将策略设置为可以安装和不能安装/修补的内容,并且可以授权用户启动进程,同时不会向用户公开这些权限,因为工作是由后端服务完成的以 SYSTEM 身份运行。
  • 我认为发布者可以做的最糟糕的事情是 1) 创建一个编写不佳的安装程序,它不遵循模型并且用户/管理员体验欠佳 2) 向中间人开放模型攻击 3) 指示 MSI 对操作系统进行基线更改,从而导致机器安全性降低。
  • 请注意,只有旧的(或不正确构建的)可执行文件受试探法的约束。如果可执行文件包含清单,则清单会告诉 Windows 是否需要提升。 Windows 不会尝试对此进行猜测。
【解决方案3】:

MSI 可以按用户或计算机创建。默认情况下,每用户安装不会要求提升。一旦达到 InstallExecuteSequence,每台机器的安装将要求提升。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2019-04-02
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多