避免使用不安全的哈希扫描程序-另一个程序正在使用此文件

翻译:secist

预估稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言


在这篇文章中,我将讨论几个 WordPress 恶意软件扫描器,存在的一个主要的问题:使用弱哈希算法对文件的好和坏进行标识。在一些 WordPress 之外的恶意软件和病毒扫描器上,同样也发现了类似的问题。

为了使我接下来的阐述更加清晰简洁,下面我将其称之为“弱 hash 扫描器”问题分析。

此问题可能允许攻击者隐藏恶意软件,而是用 MD5 散列算法的扫描器将无法检测到它。下面我将解释安全中 hash 使用的一些问题及解决方法。我还将演示这个问题和进一步深入探讨。 我还将描述 Wordfence 是如何在恶意软件扫描器上,使用安全的哈希算法的。

安全行业中是如何使用哈希来鉴别文件的?


在安全行业中,我们通常所说的算法是指,一个文件在经过一系列逻辑运算后,生成唯一一个数字,称之为算法。该数字用于唯一文件标识。 此过程称之为散列算法,唯一编号则被称为“散列”。

我们所使用的各种散列算法真的非常实用和有趣。例如,我们先来获取一个恶意软件,然后为它创建一个哈希值并保存它。 接着,我们创建一个包含该恶意软件哈希值的文件,并用扫描器进行检查。 如果扫描器发现该哈希值,与我们之前创建的恶意软件的哈希值匹配,则我们就可以知道该文件为恶意程序。

我们还可以使用 hash 来识别检查已知正常的文件。 在 Wordfence 我们已经为 WordPress 中,那些已知安全的文件创建了哈希。我们为所有的主题,插件及核心版本都做了哈希值,在之前的所有 WordPress 历史版本中。

从刚刚 Wordfence 跟踪的哈希检查结果来看:

205,146 Wordfence 知道的 WordPress 核心文件是安全的。

5,967,361 Wordfence 知道的 WordPress 主题文件是安全的。

23,527,261 Wordfence 知道的 WordPress 插件是安全的。

散列对于像我们这样的安全公司来说,是一种存储小块数据,用于唯一地识别已知文件是否正常的鉴别工具。我们会使用该数据来检查那些文件是否存在于我们的系统上。然后我们将来决定,是保留文件还是删除它。

下图说明了,恶意软件扫描器是如何使用散列,来识别文件的。

避免使用不安全的哈希扫描程序

不是所有的哈希算法都是相同的:MD5 vs SHA-2


我们可以通过多种方法来创建哈希,无论我们使用哪种哈希算法,他都会为我们生成一串唯一固定长度的数字。MD5 是一种散列算法,它是由 Ron Rivest 教授于1991年发明的。这是一个不错的散列算法,不过目前看来它已经相当古老,而且也并不安全。

另一个更新和更安全的哈希算法称为SHA-2由国家安全局开发,并由国家标准与技术研究所于2001年发布。直到今天 SHA-2 仍被广泛使用,并被认为足够的安全并非常适用于商业加密。

MD5 加密算法,现在已经相当古老。它的问题是极容易被恶意攻击者利用“碰撞”的方式进行攻击。 这里其实很容易理解:我们可以为两个不同的文件创建使用相同的 MD5 哈希值,或唯一的证书签名。这就可能躲过恶意软件扫描器的扫描,误认为恶意文件实际上是已知正常的文件。

这就是为什么我们要在 Wordfence 中,使用 SHA-2 来跟踪已知文件。因为它可以防止攻击者创建具有与已知正常文件相同的散列,从而避免误检。

弱哈希扫描器的问题


不幸的是,不是所有的安全产品都这么做。在 WordPress 中,一些恶意扫描程序,在扫描恶意文件时仍然使用老旧的 MD5 哈希文件。例如 WordPress 的 Sucuri 插件和“Shield WordPress Security ”这两款插件,它们仍然使用 MD5 来检测核心文件的更改情况。他们的方式是从 api.wordpress.org 来获取最新的MD5 哈希值的。

这些产品使用的 API 并非设计用于恶意软件的检测扫描。它最初是在 2013 年的 WordPress 升级过程中被创建的,用于帮助确定哪些文件是需要升级的。此外该 API 使用的 MD5 算法在加密方面不够强大,也无法适用于恶意或安全文件的检测分析。

在 Wordfence 我们使用的是 SHA-2 散列算法,这也是我们为什么创建了,我们自己的用于恶意软件扫描的 API 的原因之一。这样做的目的是让我们能使用加密强的哈希函数,来确保恶意软件不能通过利用弱哈希算法,来逃避检测。

上周,安全研究人员展示了 如何创建两个具有相同 MD5 哈希值的 Windows 可执行文件。这将允许攻击者创建一个友好的可执行文件和另一个恶意文件,然后将友好可执行文件替换,并避免检测。

2014 Nat McHugh 演示了如何创建两个不同的 PHP 文件 和 两个不同的图像文件,拥有相同的 MD5 哈希值。这在PHP中展示了相同的概念 - 攻击者可以创建一个友好的文件,变得可信,然后用恶意文件替换它,避免 MD5 扫描器检测。

这项研究,实际上已经有一段时间了。它早在2005年就由中国山东大学的 王晓云和洪波宇写的一篇文章 中首先提到,他们称之为 MD5 的模块化差异攻击。

2007年,Marc Stevens 创建了一个 开源工具包 作为他的硕士论文的一部分,实际上也是利用了 MD5 的这个问题。这些工具使用的,就是上面相同的方法,使用相同的 MD5 哈希值来创建不同的文件。

这项研究表明,可能已经有攻击者利用 MD5 来提供一个安全文件,然后再用恶意文件替换它,来夺避使用 MD5 检测的扫描器。攻击者可能很快就会创建出与合法的 WordPress 核心文件,拥有相同 MD5 哈希的恶意替换文件。因此,对于我们而言重要的是避免使用通过 MD5 来检测文件的扫描器,而是使用拥有强大的加密哈希函数,来验证文件完整性的扫描程序来进行检测。

写这篇文章的目的


我想通过这篇文章达到以下两个目的:

1. 如果你是安全产品的客户,请确保你选择的安全产品正在使用 SHA-2 或其他更为安全的散列算法来进行恶意软件的扫描及检测。因为一旦它使用的是 MD5 验证,那么他会错误的将一个高危文件,识别成一个可靠的安全的文件,这对你来说无疑是非常危险的!

2. 如果你是安全供应商,并且尚未将你的安全产品切换到 SHA-2 或安全散列算法的话,那么为了你客户的安全利益,请你务必做好这个工作。

推荐阅读