热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】避免使用不安全的哈希扫描程序

翻译:secist 预估稿费:200RMB(不服你也来投稿啊!)投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言在这篇文章中,我将讨论几个 WordPress 恶意软件扫描器,

https://img8.php1.cn/3cdc5/186f6/a6e/0618850d7b2a82b0.png

翻译: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  插件是安全的。

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

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

http://p7.qhimg.com/t0151ea2a2a46f7e6a9.png


不是所有的哈希算法都是相同的: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 或安全散列算法的话,那么为了你客户的安全利益,请你务必做好这个工作。



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 无详细内容MySQLmysqlmysqlDELIMITERmysqlCREATEFUNCTIONmyProc(costDECIMAL(10,2))-RETURNSDECIMAL(1 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 本文介绍了安全性要求高的真正密码随机数生成器的概念和原理。首先解释了统计学意义上的伪随机数和真随机数的区别,以及伪随机数在密码学安全中的应用。然后讨论了真随机数的定义和产生方法,并指出了实际情况下真随机数的不可预测性和复杂性。最后介绍了随机数生成器的概念和方法。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
author-avatar
Smitty
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有