我的可执行文件中的防病毒误报

Posted

技术标签:

【中文标题】我的可执行文件中的防病毒误报【英文标题】:Antivirus False positive in my executable 【发布时间】:2011-03-21 07:53:21 【问题描述】:

我刚刚遇到了一个烦人的问题。突然,Avira AntiVir 开始将我软件中的一个可执行文件标记为病毒。

由于几乎所有用户的默认操作是单击“确定”并且 Avira 建议将 病毒 隔离,因此我的大多数用户都在删除此可执行文件。

好吧,我们不要自大,检查一下我是否真的被感染了。我将文件发布到http://www.virustotal.com,并且在所有防病毒软件中,只有 Avira 将其标记为受感染。此外,我用两种不同的防病毒软件扫描了我的电脑,它是干净的。

我已经向我的用户发布了一封邮件,解释了正在发生的事情,但这对我的支持来说是一种开销,我真的不想要。

好的,问题是:有没有办法避免这种行为?除了签署文件之外,我想不出任何办法,(真的不知道它是否会解决)但让我们看看你是否有任何创意。

【问题讨论】:

AVG 也是一款报告大量误报的一周杀毒软件。我已经在我的(干净的)程序中看到了它。 我的应用在 Virustotal 上的检测率为 0,但它被 Windows Defender 标记为“特洛伊木马”。很郁闷! 也许针对这些防病毒软件生产商的集体诉讼会有所帮助:docs.google.com/forms/d/… 【参考方案1】:

令人惊讶的是,Delphi 应用程序被 AV 应用程序报告为(潜在)有害。前段时间发生在我身上,使用Delphi 2009,见http://en.wikipedia.org/wiki/Wikipedia:Reference_desk/Archives/Computing/2010_March_20#Delphi.2FAVG_Issue。

在 SO,我们也有

Virus in Delphi 7 Accidentally created a virus?

还有更多。

它可能是实际的Induc Virus。但很可能是误报。

【讨论】:

【参考方案2】:

Andreas 的回答非常好; Delphi 应用程序经常发生这种情况。

签名代码没有任何区别——我让 NOD32 对签名的 Delphi 代码抛出误报。

如果有任何技术可以避免误报,病毒作者将使用它们来避免检测。

不幸的是,我发现最好的行动方案是被动而不是主动。所有 AV 供应商都有报告误报的工具,而且我发现他们会对报告做出响应。

【讨论】:

确实如此。 Avira 用了不到 12 小时来确认误报。 别忘了参与调查:docs.google.com/forms/d/…【参考方案3】:

许多诚实的开发人员会因为粗心的防病毒软件而遇到问题。 另请参阅:How to prevent false positive virus alarm on my software?

想象一下,对于他们显示的每一个误报,您都会失去一个可能的客户。程序员应take action 反对此类防病毒产品,并迫使他们更加小心误报警报,甚至为我们因它们而损失的销售额获得一些收入。

更新: 最近我观察到:

VirusTotal.com 上的误报数量在“发布模式”(带有编译器优化)下编译程序时比在“调试模式”下编译时高得多。 使用 EurekaLog 时检测天空火箭。

所以,在发布程序之前提交给 VirusTotal!


2019 年更新: 不幸的是,InnoSetup 也未能幸免。我使用 InnoSetup 创建了一个虚拟安装程序并将其上传到 VirusTotal。 52 个程序中有 5 个 reported 误报!更新中更新:现在误报数扩大到 9!

【讨论】:

我点了重新扫描,现在到18了!【参考方案4】:

作为一种解决方案,您可能希望:

1 - 验证您的 Delphi 编译器没有被感染 2 - 验证您的源代码和库没有被调和(这是 Induc Virus 的 M.O.) 3 - 使用 AV 检查您的(保证的)干净的 exe。如果他们报告误报,请联系他们,以便他们修复测试。

4 - 如果您需要在有机会更正 AV 之前分发,请签署您的 exe,以便您的用户可以验证它是干净的。

【讨论】:

数字签名是一个不错的选择,也可以防止误报检测,但是像我这样的大多数开发人员都负担不起每年 200 到 500 美元的费用。有时软件是免费软件,有时它们不会产生多少收入来支付 200 美元/年。 签名应用程序在大多数情况下没有任何区别。它所做的只是告诉 Windows 您的应用程序来自可信赖的来源。就这些。防病毒软件往往会忽略这一点,因为有很多病毒也可能已被签名。【参考方案5】:

反病毒产品可能会在 Delphi 生成的 exe 上触发的原因有多种,其中一些常见原因是:

很多病毒都是用 Delphi 编写的,因此您的 exe 可能有一些看起来与现有病毒相同的代码部分。 程序的导入表用于确定您的 exe可能做什么,例如链接到凭据管理或磁盘管理功能会触发某些 AV。

按照建议,在尝试使用 Virustotal 或 Jotti 等在线服务扫描您的发布版本之前,始终向供应商报告您的误报,而不是试图防止误报。我的经验是 AV 供应商在提交时反应非常快。

【讨论】:

“AV 供应商对提交的反应非常快” --- 大多数供应商报告说,更改将在他们审查您的案例 72 小时后出现。因此,这就像您提交案例后的 100 多个小时。但 Sophos 尤其是一场噩梦。缓慢而无用。【参考方案6】:

在 Free Pascal/Lazarus 组和 bugtracker 中,此类消息几乎每个版本和/或每个月都会发生。

我们通常建议用户忽略所有“通用”或“启发式”扫描类型,并坚持使用基于签名的扫描(正如大多数公司病毒扫描程序所做的那样)。

这是因为它几乎总是一种启发式警报,而不是特定的恶意软件。从检测到的“病毒/特洛伊木马”几乎总是属于“通用”类型这一事实中可以很容易地看出这一点。通常病毒扫描仪也是典型的“家庭”病毒扫描仪,或者是普通病毒扫描仪的家庭版(诺顿曾经特别糟糕,现在主要是规模较小的“廉价”家用扫描仪)

但是,我们主要与开发人员交流,并且已经难以传达此信息。我可以想象,当分发给无知的最终用户时,这是一个很难传达的信息。

不过,没有其他办法。

【讨论】:

我在这篇文章中收到了一些 cmets,指责我鄙视“家用”扫描仪。我不是故意的,因为我认为 McAfee 和 Norton 的公司和家庭扫描仪无论如何都是相同的代码库。关键在于默认设置不同。企业版本通常会关闭不确定的启发式方法。 家庭用户必须更容易受到新病毒的攻击,因为他们不像 IT 部门那么小心,因此家庭设置默认进行尽可能多的检查是合理的。 家庭用户可以在误报时关闭病毒,这是一个更大的风险。但现实情况是,购买家庭病毒是为了“吓人”的价值。家庭用户认为每天不反应的病毒毫无价值。

以上是关于我的可执行文件中的防病毒误报的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux C 程序中写入自己的可执行文件,错误“文本文件忙”

linux怎样检测一个tar包是不是有病毒

防病毒误报?

通过 cabal 中的可执行文件分析库

在 Cabal 测试套件中找到我的可执行文件

不小心制造了病毒?