如何避免“Windows Defender SmartScreen 阻止无法识别的应用程序启动警告”

Posted

技术标签:

【中文标题】如何避免“Windows Defender SmartScreen 阻止无法识别的应用程序启动警告”【英文标题】:How to avoid the "Windows Defender SmartScreen prevented an unrecognized app from starting warning" 【发布时间】:2018-08-03 10:34:36 【问题描述】:

我的公司通过我们的网站向客户分发安装程序。最近,当我通过网站下载并尝试运行安装程序时,我收到警告消息:

Windows 保护您的电脑

Windows Defender SmartScreen 阻止了 无法识别的应用程序从启动。运行此应用程序可能会使您的电脑处于 风险。

如果我右键单击安装程序并选择属性,我会注意到以下内容:

我们的安装程序已签名。

如何找到 Windows Defender SmartScreen 警告的原因?

我没有找到任何 Windows Defender 的日志文件,也没有在事件查看器中找到任何内容。

【问题讨论】:

看来问题在于我们正在使用“标准代码签名证书”进行签名。如果我们使用“扩展验证 (EV) 代码签名证书”进行签名,我们不需要通过让许多用户安装我们的软件来建立信任。相反,证书颁发者会进行审查程序,以确保我们是一家合法的公司。我怀疑最近的 Windows 10 升级发生了政策变化。无论如何,能够从 Windows Defender 读取日志真的很有用。下次问题可能是其他问题,找出问题所在很痛苦。 我们在谈论什么样的钱来购买 EV 代码签名证书?你检查过了吗?没有太在外面听起来:谁闻到球拍的味道?我们现在是“基于信任”的,除非你深入挖掘你的钱包?如果“正常”证书不产生信任,它们的开销会很奇怪吗?他们至少将水作为“防篡改”吗?也许在下面看到我对 Virustotal 的评论。 每年 410 美元对 289 美元。我认为这几乎是公平的。似乎他们做了一些额外的工作,比如通过电话联系公司,在官方注册中查找公司等。是的,普通证书保证安装程序没有被篡改。 感谢您的信息。听起来就像他们在 15 年前获得普通证书时所做的那样?那时我们也必须提供相当多的信息,但我想事情已经发生了变化——价格似乎和当时一样。事物变化越多,它们就越保持不变——只是名称发生了变化?在使用此类 EV 证书之前进行强制性恶意软件检查怎么样?我的意思是,如果他们在纯粹的防篡改之外进入“信任”和“声誉”——这将是比简单地检查公司存在更好的要求吗?你不觉得吗?签名的恶意软件 - 不太好。 添加旧问答的链接:How to pass the smart screen on Win8 when install a signed application?。 【参考方案1】:

单击阻止您的应用程序安装的任何安装程序 (.exe) 的属性(Windows Defender SmartScreen 阻止了无法识别的应用程序)针对该问题,我找到了一个解决方案

    右键单击安装程序(.exe) 选择属性选项。 单击复选框以选中属性底部的取消阻止

此解决方案适用于 Heroku CLI (heroku-x64) 安装程序 (.exe)

【讨论】:

这并不能解决其他人下载它的问题! 可能是您做错了什么,或者您的 (.exe) 已损坏。 @user2568374 这是更好的解决方案。 Windows Defender 阻止了 Kaspersky AVZ 反病毒工具包:-O 你救了我。这行得通。无论如何,我正在从 AWS 安装 SAM,这应该是安全的【参考方案2】:

TL;DR

如果您的应用在 Microsoft SmartScreen 中还没有足够的声誉,则会显示此警告。为了获得声誉,您可以

将您的应用提交给 Microsoft 进行恶意软件分析, 购买“扩展验证”代码签名证书, 购买标准代码签名证书,或 请稍等。

继续阅读以了解有关这些不同选项的详细信息。

选项 1:将您的应用提交给 Microsoft 进行恶意软件分析

微软允许软件开发者submit a file for malware analysis。据微软称,这将帮助开发人员“验证对其产品的检测”。如果审核成功,Microsoft SmartScreen 警告会更快消失,有时甚至会立即消失(它对我自己的一个应用程序立即起作用)。您需要拥有 Microsoft 帐户才能提交您的应用以供审核。

但是,请注意,如果您发布了应用的更新版本,那么您还必须再次申请新的审核。要克服这个问题,您必须使用“扩展验证”或标准代码签名证书(见下文)。

选项 2:购买“扩展验证”代码签名证书

立即永久摆脱 Microsoft SmartScreen 警告的有保证的方法是从 @ 之一购买“扩展验证”(EV) 代码签名证书987654322@(CA),并使用该 EV 证书签署您的应用程序。

这样的 EV 证书每年的费用介于 250 and 700 USD 之间,并且只会颁发给已注册的企业。如果您是单一开发商,您必须是独资经营者并拥有有效的营业执照。您可以在EV Code Signing Certificate Guidelines 中阅读更多关于 EV 代码签名证书的正式要求。

EV 证书通常会通过硬件令牌实物交付给您。

选项 3:购买标准代码签名证书

更便宜的“标准”(即非 EV)代码签名证书也可用于永久(但不是立即)摆脱 Microsoft SmartScreen 警告。标准代码签名证书的费用在每年100 and 500 USD 之间,也可以颁发给没有有效营业执照的私人开发人员。一些 CA 还为开源项目提供折扣。

没有即时解决方案

标准代码签名证书的问题在于它们不会立即使 Microsoft SmartScreen 静音。相反,在警告消失之前,您的证书需要一些时间来建立声誉。但是,一旦您的证书建立了足够的声誉,使用该证书签名的所有应用程序都将受到 Microsoft SmartScreen 的永久信任,并且不会再触发警告。

需要多长时间?

那么,使用标准代码签名证书时,Microsoft SmartScreen 警告需要多长时间才能消失?不幸的是,这很难回答,因为微软本身拒绝公布有关此的任何细节。而且,由于 Microsoft SmartScreen 可能会使用大量信息来决定可信度,因此您的里程可能会有很大差异。根据各种来源报告的非官方数字(见下文),通常需要在2 and 8 weeks 之间,直到警告永久消失。但是,请记住,这还取决于您的应用的下载次数和/或安装次数。

非官方数字是:

42 days 和大约 1.400 app installs。来源:我自己的证书(2021 年 2 月) 16 days 和大约 2.000 app installs。来源:我自己的证书(2020 年 5 月) One month 和更多 10.000 downloads。来源:here(2020 年 1 月) 在a few weeksa month 之间。来源:here(2019 年 12 月) 关于2-3 weeks。来源:here(2019 年 12 月) 关于3.000 downloads。来源:here(2013 年 12 月)

您还需要了解的内容

请注意,标准代码签名证书的另一个问题是证书信誉不会自动转移到重新颁发的新证书(例如,当您的旧证书已过期时)。即使新证书基于与旧证书相同的证书签名请求 (CSR),也是如此。为此,强烈建议购买具有长期有效期的标准代码签名证书。

最后一点,请始终确保为已签名的应用添加时间戳。时间戳非常重要,因为它将允许签名的应用程序在证书本身过期后保持有效。确保对文件和时间戳签名都使用 SHA-2 摘要算法(例如 SHA-256)。另请参阅this question 了解更多详情。

选项4:等很久

如果您根本不采取任何措施,Microsoft SmartScreen 警告最终也会消失。然而,这可能需要大量的时间(几个月)和/或下载(数万)。另一个大问题是,每次发布应用程序的更新版本时,等待期都会重新开始。所以,这可能不是您正在寻找的解决方案。

【讨论】:

可以确认选项1在24小时内消除了警告。 总体来说是一个非常好的选项总结,确实非常有用!但是,将应用程序提交到应用程序商店(选项 4)不会成功。在 Windows 安全控制台中打开“基于信誉的保护设置”时,默认情况下也会打开“应用商店应用检查”。因此,如果您是应用程序的开发者,即使您的应用程序被提交到应用程序商店并且用户从应用程序商店下载,您的应用程序仍然会收到警告。用户需要专门关闭此检查,作为开发人员,我们无法强制执行。 @samiksc 感谢您指出这一点。没错,SmartScreen 实际上也默认启用了 Microsoft 商店应用程序(至少在 Windows 10 中)。我已更新我的答案并删除了 Microsoft 应用商店选项。【参考方案3】:

如果您拥有标准代码签名证书,则您的应用程序需要一些时间来建立信任。 Microsoft 确认扩展验证 (EV) 代码签名证书允许我们跳过这段建立信任的过程。 According to Microsoft,扩展验证证书将使开发人员能够立即在 SmartScreen 中建立声誉。否则,用户将看到类似“Windows Defender SmartScreen 阻止无法识别的应用程序启动。运行此应用程序可能会使您的 PC 面临风险。”的警告,并带有两个按钮:“仍然运行”和“不运行”。

Another Microsoft resource 声明如下(引用):“虽然不是必需的,但由 EV 代码签名证书签名的程序可以立即在 SmartScreen 信誉服务中建立信誉,即使该文件或发布者之前不存在信誉。EV 代码签名证书还具有唯一标识符,这使得在证书续订期间维护声誉变得更加容易。”

我的经验如下。自 2005 年以来,我们一直使用常规(非 EV)代码签名证书来签署带有时间戳的 .MSI、.EXE 和 .DLL 文件,直到 2018 年 SmartScreen 从未出现过问题,当时只有一个案例自从我们将其发布给 beta 测试人员以来,我们的应用程序的 beta 版本花了 3 天时间来建立信任。它正处于证书有效期的中间。我不知道 SmartScreen 在我们的应用程序的特定版本中可能不喜欢什么,但从那时起就没有 SmartScreen 投诉。因此,如果您的证书是非 EV,它是一个签名的应用程序(例如 .MSI 文件),它将随着时间的推移建立信任,而不是证书。例如,一个证书可以在几个月前颁发并用于签署许多文件,但是对于您发布的每个签名文件,SmartScreen 可能需要几天时间才能在发布后停止抱怨该文件,就像我们在2018.

总之,为了完全避免警告,即防止它突然发生,您需要一个扩展验证 (EV) 代码签名证书。

【讨论】:

Sharing a link to a similar answer on SmartScreen。 “购买信任”……嗯…… EV 证书仅适用于拥有注册公司的人。如果您是没有注册公司的独立软件供应商,则无法购买 EV 证书。【参考方案4】:

更新:这里的另一篇文章: How to add publisher in Installshield 2018 (可能会更好)。


我不太了解这个问题,但请看看这个对另一个问题的回答是否告诉你任何有用的信息(并让我们知道,以便我可以在这里提出更好的答案):How to pass the Windows Defender SmartScreen Protection? 这个问题与 BitRock 有关——一种非 MSI 安装程序技术,但总体问题似乎是相同的。

从我上面的答案中指向的链接之一中提取“......证书不足以获得信任...... SmartScreen 是基于声誉的,而不是与 *** 的工作方式不同... SmartScreen 信任不会导致问题的安装程序。Windows 机器将遥测数据发送回 Redmond,了解已安装的程序以及它们造成的麻烦。如果您获得足够的赞许,SmartScreen 就会自动停止阻止您的安装程序。这需要时间和大量的安装才能获得足够的赞。没有办法知道你走了多远。”

老实说,目前这对我来说都是新闻,所以请务必将您自己挖掘到的任何信息回复给我们。


您在上面标记的实际对话文本肯定与 Zone.Identifier 备用数据流相关,该数据流的值为 3,该数据流添加到从 Internet 下载的任何文件中(有关更多详细信息,请参见上面的链接答案)。


我无法将此问题标记为上一个问题的重复,因为它没有可接受的答案。让我们暂时让这两个问题都悬而未决吗? (一个问题是针对 MSI,一个是针对非 MSI)。

【讨论】:

IMO 都是骗局。我已经帮助了一些有价值的客户。 Rail PITA 是该过程需要 FIPS 140-2 2 级令牌,这使得自动化构建成为一个真正的挑战。 也许只是通过virustotal.com 运行设置然后等待几天可能会影响信任?谁知道?本质上,在被安全软件识别之前,它只是一个“未知二进制文件”。怀疑它会有很大帮助,但值得一试。 也许the telemetry from Windows Defender 是实际使用的?因此,也许可以在几台也与 Microsoft 聊天的 PC 上运行 Defender?我对此知之甚少,只是“某物”被送回了死星:-)。我会在我的 MSI 及其管理映像上运行 Defender(将没有数字证书),看看会发生什么。如果有人能阐明此类遥测数据实际发生的情况,那就太好了。

以上是关于如何避免“Windows Defender SmartScreen 阻止无法识别的应用程序启动警告”的主要内容,如果未能解决你的问题,请参考以下文章

如何避免重复的工作?

DDoS攻击是啥?应该如何避免?

Mongodb 连接失败,怎么避免抛错影响正常流程

Java中,当的数据过大时,如何避免值的改变?

如何避免嵌套订阅超过两个级别

如何触发(不避免!) HttpClient 死锁