将 MD5 用于恶意软件 ID:碰撞攻击风险?

信息安全 哈希 反恶意软件
2021-08-27 17:14:00

自 2004 年以来就知道 MD5 哈希容易受到碰撞攻击(更新 - 不是“原像”攻击 - 我的错误....)。然而,人们似乎仍在使用它来识别恶意软件。例如,关于新的 Flame 恶意软件文档的报道,人们可以追溯到几年前在存档的 md5 数据中发现相同的 md5 签名。

火焰几岁了?- Alienvault 实验室

攻击者可能会确保他们的所有文件都与他们公开且看似无害的其他文件的 md5 哈希相匹配,因此依赖 md5 似乎很危险。

我没有看到对 sha256 甚至 sha1 的引用,它们没有看到(公共)碰撞攻击。为病毒数据库迁移到更好的哈希值的状态如何?

更新:我担心的是,如果病毒数据库没有保留所有相关文件的完整副本(例如,因为有些文件真的很大或其他什么),和/或搜索数据库的人没有检查完整他们正在使用归档文件查找新文件的内容,然后来自恶意病毒的新文件与旧的“无害”文件相匹配,可能仅基于 md5 匹配就被错误地视为不危险。但希望反病毒研究人员保留并检查完整文件,否则他们将容易受到这种攻击。

那么针对恶意软件 id 的哪些类型的攻击可能会利用产生 md5 冲突的便利性,以及在特定的哈希数据库和 AV 软件中实际采取了哪些步骤来阻止它们?

3个回答

快速分析:

威胁:有人创建了一个与恶意文件的 MD5 哈希匹配的干净文件。

结果:干净的文件被识别为恶意文件,但只是一个冲突。另一个匹配的文件仍然存在,并且总是被标识为相同的。

我想如果发生这种情况,可能会有一些关于继续前进的讨论。我对为什么我们没有的猜测:

  • 这不是对恶意软件进行身份验证,而是对其进行识别。插入误报匹配的价值有限。仍然会找到真正的阳性结果。
  • 目前是通用的。只需一种散列算法操作即可识别恶意软件。如果我们改变,你将不得不开始使用多种算法散列每个文件,除非有人保留一个存储库并且可以为所有内容发布新的算法散列。

错误匹配的价值非常有限,因为您只能尝试说服某人他们正在查看可能是不同恶意软件的恶意软件......或者只是一堆比特. 只有试图了解该特定恶意软件的研究人员才会关心,他们应该意识到发生了什么。

更新

据我了解,病毒数据库不包括“干净”的校验和。如果有匹配的 MD5 条目,则它是用于您系统上不想要的东西,除非您正在尝试对其进行研究。因为可执行文件的一部分可以被搁置以填充任何旧的废话,所以可以创建一个恶意软件文件,它与另一个无害文件具有相同的 MD5 和(“碰撞攻击”)。虽然我们不知道如何进行实际的“原像攻击”,但可执行文件的设计性质使得有针对性的攻击者很可能会如维基百科的 MD5 页面所述创建碰撞攻击. 也就是说,可执行结构允许在填充插入执行期间被忽略的任何选择数据方面具有很大的灵活性。此外,可以从启动器加载其他不可执行的文件,从而允许修改文件中的任何前导或尾随数据。这提供了通用启动器的使用和非常容易的哈希冲突,因为第一个和最后一个字节可以是任何东西。

由于数据库不包含干净的文件,因此您不会得到误报。如果有人为此设计了恶意软件,您可能会得到误报。如果您今天负责构建第一个恶意软件数据库,您将使用不同的哈希算法。由于历史原因和成功碰撞攻击的影响相对较小,MD5 继续前进,尽管现在并不理想。

首先——你是对的,最好使用 SHA1、SHA256、SHA2 或更现代的哈希函数。

但是,我认为风险不是很高。为了解释为什么我必须提供一些关于哈希函数攻击的背景知识。有两种攻击需要担心:

  • 碰撞攻击。 攻击者找到两个具有相同哈希的文件M(恶意)、S (安全)。这里攻击者可以自由选择MS。

  • 第二次原像攻击。 攻击者得到一个文件C(Common),并且必须找到第二个文件M与文件C具有相同的哈希值请注意,攻击者不能选择C它是给他的。攻击者唯一的自由度是选择M

第二个原像攻击的危害更大,因为它们让攻击者做一些他不能用碰撞攻击做的事情。关于 MD5 要了解的是,它很容易受到碰撞攻击。但是,没有已知的针对 MD5 的第二次原像攻击。

有了这个背景,我现在可以回答你的问题了。虽然 MD5 容易受到碰撞攻击,但攻击者没有明确的方法可以利用它来引发问题。当然,攻击者可以找到具有相同哈希值的恶意文件M和无害文件S。然后攻击者可以开始传播恶意软件M,使 M 的 MD5 散列进入某人的黑名单,这可能导致一些人错误地断定S是有害的。但那又怎样? S将是一堆看起来随机的字节。没有理由任何人已经将S存储在他们的系统上,因此攻击者可以在S上触发错误警报这一事实 基本上是无害的。

对 MD5 的第二次原像攻击会更成问题。它会让攻击者选择一些存储在每个人的硬盘上的良性文件C:例如,可能是对 Windows 防火墙的操作至关重要的文件。然后,(如果攻击者知道的方式做MD5第二预图像攻击)的攻击者可以构造一个恶意文件中号具有相同的哈希值作为Ç,并开始蔓延中号左右。当杀毒公司将M的 MD5 哈希添加到某个黑名单时,这可能会导致问题:可能会导致杀毒软件错误地得出C 的结论。是有害的,并且该错误警报可能最终会在一堆系统或类似的系统上禁用 Windows 防火墙。如果可能的话,那将是糟糕的。然而,就我们今天所知,这种糟糕的情况是不可能的,因为没有人知道有什么方法可以对 MD5 进行成功的第二次前映像攻击。

底线:虽然使用更现代的哈希函数而不是 MD5 会更好,但我认为坏人利用当前使用 MD5 的做法的可能性不大。风险似乎非常低。

我不得不不同意那篇文章的作者所写的结论。

我们找到了一个似乎是在 2008 年底编译的主要组件(mssecmgr.ocx)的版本。这可以表明 Flame 至少已经存在 4 年了。

实际上,这一切都表明,一个非常大的恶意软件的主要组件已经存在 4 年了。这并不意味着使用了其他主要组件。正如我所相信的,Flame 利用了一个在 2010 年修复的缺陷。

更新:在看到火焰的前两周之后。结果发现,火焰实际上已经有好几年了。它之所以能够保持隐藏状态,是因为它利用了终端服务中的一个漏洞和针对 Microsoft 证书的 MD5 冲突攻击。

作者其余的结论我同意。毫无疑问,从某种意义上说,Flame 是新的恶意软件,它利用了一堆东西,以进行几次复杂的攻击。

攻击者可能会确保他们的所有文件都与他们公开且看似无害的其他文件的 md5 哈希相匹配,因此依赖 md5 似乎很危险。

火焰并没有尝试这样做。您的关注不是针对正确的事情

更新:我担心的是,如果病毒数据库没有保留所有相关文件的完整副本(例如,因为有些文件真的很大或其他什么),和/或搜索数据库的人没有检查完整他们正在使用归档文件查找新文件的内容,然后来自恶意病毒的新文件与旧的“无害”文件相匹配,可能仅基于 md5 匹配就被错误地视为不危险。但希望反病毒研究人员保留并检查完整文件,否则他们将容易受到这种攻击。

我要对这个更新说的是你担心错了。这些病毒数据库网站确实保留了该文件的副本。安全公司还使用文件的 MD5 散列来确定文件是否是恶意的。

真实文件匹配恶意文件的 MD5 哈希的机会真的非常小。 因此,即使恶意文件与真实文件的匹配程度更高,也仅使用 MD5 哈希来识别威胁。

过去 10 年中大多数众所周知的恶意感染都使用了相同的漏洞,除了在“发现日期”之间发现的漏洞之外,而且工作方式非常相似。

每个人都认为 Stuxnet 是一种用“自定义”语言编写的非常高级的特洛伊木马。来看看它是用 C 语言编写的,并且和它的其他兄弟姐妹一样共享相同的组件。