模糊散列帮助研究人员识别变形恶意软件

来源:互联网 发布:爱心机构网站源码 编辑:程序博客网 时间:2024/05/07 09:32

模糊散列帮助研究人员识别变形恶意软件

作者:Michael Kassner(迈克尔.卡斯纳)
翻译:PurpleEndurer,2011-05-03 第1版

 

  导读:反恶意软件仍然依靠特征码来识别恶意软件。因此,恶意软件作者只需持续改变恶意软件代码。迈克尔.卡斯纳介绍了一个可能有效的防范手段:模糊散列。

 

 

 

  尽管很明显,但我必须说出来。现在为抑制恶意软件所做的努力有问题。尽管不同专家出现的问题也不同,但其中也有一些相同之处。反恶意软件程序都存在比较被动的部分。而且,这虽然不是一件好事,但只能接受,除非一些更好的方法浮出水面。

  基于特征码的检测方法就是这样一个部分。特征码,也叫指纹,是恶意代码特有片段的加密哈希。反恶意软件程序开发者把这些指纹和适当的启发式参数编译到数据库中,反恶意软件程序则据此检测恶意软件。

  问题就在这里。必须掌握恶意软件才能提取特征码。


  为什么使用哈希?

 

  使用加密哈希的原因有几个。与我们的讨论有关的一个原因是更快地进行处理。请记得反恶意软件程序是如何工作的。他们扫描整个文件来寻找恶意代码。这需要时间,而用户在下载东东时对此特别敏感。

  既然如此,为什么不把恶意代码片段和可疑文件都转换成数字散列(速度比扫描快得多)。


  棘手的话题

 

  起初,我关注一个涉及散列的主题。其中有很多部分我不明白。糟糕地是,我跟导师提到了这件事,于是从他那得到了如我所料的回答。“你得自力更生。读者们翘首以待呢。”

  我不想跟他多废话,含糊不清地说需要去拿东西,挂了电话,开始工作。

 

  什么是哈希?

 

  由于那些与哈希有关的链接大都指向Wolfram对散列的数学解释。作为一个维基百科的拥趸,我更喜欢这个定义:

 

  *PurpleEndurer注:Wolfram Research - 维基百科,自由的百科全书
http://zh.wikipedia.org/zh-cn/Wolfram_Research

 

  “在计算机科学中,指纹识别(哈希)算法是一个过程,它将一个任意大的数据项(如计算机文件)映射为短得多的二进制位串,即指纹,它实际上是原始数据的唯一标识,就像人的指纹可以唯一地标识一个人。”

 

  我认为(简而言之):

 

  数字签名/指纹是使用散列算法对实际恶意代码块进行魔术般计算的结果。

 

  使用相同的哈希算法,反恶意软件程序对待检测的文件做相同的魔术。如果最终结果是不相同的,就可以被认为该文件没有受恶意软件的影响。

  存在的难题是:“exactly identical(精确一致)”是必需的。

 

  问题

 

  通过比较哈希结果的测试过程与我看世界的方法相似。事物非黑即白,灰色不计。恶意软件开发者了解了这一点,并让他们的代码不断变形。

  如此一来,在对受新修改的恶意软件感染的文件进行扫描时,其结果与数据库中的所有特征码都不同。它们仍是自由无阻的,直到:

 

  反恶意软件开发商注意到恶意软件的新变种。
  对恶意软件实施逆向工程,了解其行为。
  创建一个新的特征码/指纹。
  把新特征码推到所有现有的反恶意软件客户端应用程序。

 

  模糊散列来增援

 

  如这个子标题所示,深浅不一的灰色色调现在是成为可能。我对模糊散列的初步认识是源自学习如何用它来对付垃圾邮件。Andrew Tridgell(安德鲁·垂鸠)博士开发了Spamsum,试图找出垃圾邮件的共同指标:

 

  “模糊散列让发现潜在罪证成为可能,这些罪证使用传统的散列方法可能无法发现。该模糊哈希的用法与模糊逻辑搜索很像,它寻找相似但不完全相同的文档,即所谓的同源性文件”。

 

  在Spamsum基础上前进

 

  Jesse Kornblum(杰西·科恩布卢姆)先生因在开发ssdeep时采用Spamsum和进一步引入分段哈希(模糊哈希)上下文概念而赢得称赞。他对ssdeep作了如下描述:

 

  “Ssdeep是一种构建哈希散列特征码的新技术,综合了数种根据输入的上下文确定边界的传统哈希散列生成方法。这些签名可以用来识别已知文件的修改版本,即使新的文件中插入、修改或删除了数据。”

 

  出奇致胜

 

  记得吗,我在上面巧妙地避开了围绕着加密散列的的数学理论知识。我将再次尝试。
  无论如何,我偶遇到了一些有趣的研究,研究者是卡耐基梅隆大学软件工程学院的资深成员David French(大卫·弗伦奇)先生。记得吗,我提到模糊哈希是用来发现垃圾邮件的。弗伦奇先生正在研究把模糊哈希用作一种帮助发现恶意软件(链接)的工具。

  你们显然更喜欢由学术专家弗伦奇先生来解释模糊哈希。说曹操,曹操到!既来之,则安之。

  卡斯纳:我在上面对模糊散列所做的描述是不够的。能否请你给读者就模糊散列是什么,它是如何工作的做一个简要概述?

  弗伦奇:涉及模糊哈希的技术有许多。其中大多数涉及两个互异又互补的算法:哈希算法本身,以及判断哈希是否“匹配”的比较算法。对ssdeep来说,使用的算法是开放源码的,并可以同时在ssdeep和原始spamsum源代码进行检查。
  概而言之,模糊哈希是一种确定两个输入的数据是否类似而非相同的方法。模糊哈希的工作是把输入的数据细分为固定大小的块,或依据输入数据来锁定其大小。这些区块被进一步缩小到一个较小的数据值。例如,把各单独块散列成单字节值。
然后,我们得到的数据精简集即“模糊散列”,使用一些比较函数来将它与其他模糊散列进行比较。理想的情况下,比较功能将提供一些有用的度量或尺度,使我们可以判断输入的数据是相似还是不同。

  卡斯纳:你第一次来接触模糊散列是什么时候?是什么让你考虑将它用于恶意软件的检测研究?

  弗伦奇:模糊散列在过去五年得到了巨大的普及。有许多公开发表的报告和出版物使用模糊散列,例如数字媒体取证。也有公共研究描述了如何使用模糊哈希来检测相似的恶意软件。
  我对使用模糊散列检测恶意软件的兴趣在于它在对付恶意软件方面究竟有多少效果。恶意代码与其他可以应用模糊散列的领域(如生物信息学)有很大的不同,因为它涉及到人,这些人阻止他人理解其软件而直接获益。

  卡斯纳:普通散列可以准确确定文件是重复的,而模糊散列则检测“几乎相同”的文件,这为什么那么重要呢?

  弗伦奇:检测几乎相同的文件,特别是几乎相同的恶意代码的重要性,是恶意软件分析的经济性使然。分析员不仅培训成本昂贵,而且他们花在分析恶意代码上的时间也是非常宝贵的。
  没有软件或自动处理可以取代智慧,直觉,和分析员的坚韧。但是,任何可以发现待检测文件与以前分析过的文件之间有大量相似性的方法,都具备节省时间和金钱的潜力,

  卡斯纳:ssdeep是你在研究时使用的程序吗?能否请您谈一下它的有效性?

  弗伦奇:Ssdeep将是我在研究时使用的程序之一。我的研究目标是量化其针对恶意代码的具体成效。在这个时候我还不能讨论我的研究结果。

  卡斯纳:你发现模糊散列的任何其他潜在用途了吗?

  弗伦奇:模糊散列一般可以适用于需要观测数据集之间的大量相似性的任何数据域。唯一的限制是,待研究的数据域使用模糊散列进行编码是否有意义。理想的情况下,数据可能被安排为某种线性序集,这样的顺序和内容是重要的。

 

  真实世界的例子

 

  在我努力了解模糊散列时,碰到了一个如何利用它的有趣例子。Kornblum(科恩布卢姆)先生正与这个论坛上的几个网友交换意见。其中一个网友贴出的建议:

  “一个奇怪的应用程序,或许,它能帮助我的大学自动对抗计算机科学系低年级班级学生提交的作弊课题,这些班级有上千学生,并属于几个不同的年级。”

  该网友继续发贴:

  “你将会感到很惊讶(也许不会),我们用类似的方法逮到了多少人,因为他们认为改变编译器生成的一些东西,就可以让他们的拷贝无法检测。”

  之前我曾拿此开玩笑,但能够确定的是灰色色调数量是完全令人吃惊的。

 

  结语

 

  尽管可能不招人喜欢,但是模糊散列有可能改变我们对世界的看法。例如,遗传学家使用模糊散列来将已知基因组与未知的微生物基因序列进行比较。
  如果有可能,我想感谢做出有益回答的弗伦奇先生和同属卡耐基梅隆的Richard Lynch(理查德.林奇)先生。

 

http://www.techrepublic.com/blog/security/fuzzy-hashing-helps-researchers-spot-morphing-malware/5274

原创粉丝点击