欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

通过感知哈希算法跟踪视觉相似图像的恶意软件活动

来源:本站整理 作者:佚名 时间:2020-03-05 TAG: 我要投稿

恶意文档中通常会带有攻击者伪造的一些常见应用程序的图像,其目的是诱使用户执行某些操作,例如禁用Microsoft Office的只读模式(受保护的视图),或是启用宏等。在执行恶意活动时,攻击者往往会重复使用或稍微修改这些图像,借以逃避通过哈希值对其活动的跟踪。本文将描述如何通过感知哈希算法跟踪及检测在涉及视觉相似的恶意文档的活动中分布的恶意软件家族,同时我们还发布了一个名为graph_similar_document_images.py的脚本来应用此技术。
常见应用程序图像
我们从2019年检测到的250个恶意文档样本中,识别出了32个不同的常见应用程序图像,如下表所示。

表1 –应用程序或公司图标检测数量
攻击者最常见的诱骗手段是声称文档“受保护”(13个变体),其次是声称文档与查看的软件版本不兼容(10个变体)。
加密哈希函数
哈希值常用于文件校验或签名,也是威胁情报中常见的一类指示类型。通过一定的哈希算法(典型的有MD5,SHA-1等),能将一段较长的数据映射为较短的哈希值,它的一个特点是唯一性,只要输入的数据发生了微小变化,哈希值也会跟着改变,此属性能用于创建已知恶意文件的指示符(即哈希值),但对跟踪恶意文件中携带的图像来说却不太好使,因为攻击者只要对图像做细微修改就能产生完全不同的哈希(这被称为雪崩效应),这也意味着使用从文件内容中得出的哈希值来跟踪图像的重用并不是一个可靠的解决方案。
示例– 2019年QAKBOT系列活动
2019年10月起,有攻击者展开了Qakbot威胁活动,QakBot是一种能窃取用户凭证的银行木马。图1-3显示了攻击者通过编码的方式随机生成蓝色小圆圈(红圈中所示)、进而阻止通过哈希函数进行跟踪的过程。

图1 –从QakBot活动使用的恶意Word文档中提取的JPEG图像。

图2 –第二个恶意Word文档中提取的JPEG图像。

图3 –第三个样本中的JPEG图像,已做色差处理。
 

图4 –同一批次行动中,由于图像差异而产生的唯一MD5值。
尽管图像之间的视觉差异很小,但由于JPEG文件的编码方式,这些改动也能极大改变文件的组成,如图5所示。

图5 –图1和图2的字节可视化,由binvis.io生成。
感知哈希算法
我们可以通过使用可比较的感知哈希算法代替原本的算法,最简单的感知哈希算法之一是“平均哈希”(Average Hash),它产生的是一个8字节的哈希值。为了演示其工作原理,我们使用Johannes Buchner的Python库ImageHash,来计算QakBot活动中其中一幅图像的平均哈希值。
>>> from PIL import Image
>>> import imagehash
>>> a = imagehash.average_hash(Image.open('sample (1).jpg'))
>>> print(a)
0000c0d3dedc4000
要计算平均哈希,首先需要将图像的大小调整为8×8像素,然后将其转换为灰度来减少颜色的数量,之后是计算图像的平均颜色值。最后,对于每个像素的颜色值,如果高于平均值,则设置为1,如果低于平均值,则设置为0。我们可以打印出一个网格来显示其工作原理。
>>> print(a.hash)
[[False False False False False False False False]
 [False False False False False False False False]
 [ True  True False False False False False False]
 [ True  True False  True False False  True  True]
 [ True  True False  True  True  True  True False]
 [ True  True False  True  True  True False False]
 [False  True False False False False False False]
 [False False False False False False False False]]
哈希值0000c0d3dedc4000是从上到下每行的位的十六进制表示,这意味着可以使用汉明距离之类的字符串度量来计算两个哈希之间的距离,从而确定一对平均哈希的相似程度。让我们计算来自QakBot活动中另一个样本的哈希值,然后计算它们的距离。
>>> b = imagehash.average_hash(Image.open('sample (2).jpg'))
>>> print(b)
0000c0d3dedc4000
>>> a-b
0
尽管MD5值不同,但两个图像的“平均哈希值”却匹配。
通过GRAPH_SIMILAR_DOCUMENT_IMAGES.PY脚本的应用实例
我们可以使用感知哈希算法和字符串度量来识别视觉上相似的恶意文档。我们编写了一个名为graph_similar_document_images.py的脚本,将这种方法应用于社会工程图像的检测和识别中。
该脚本首先使用LibreOffice将文档转换成Office Open XML (OOXML)格式,以便可靠地提取嵌入的图像。这一步是必要的,因为大多数恶意文档都使用旧的复合文件二进制文件格式(CFBF)。该脚本提取任何嵌入图像后,会计算它们的平均哈希值,然后计算每个图像哈希之间的距离。最后,如果距离满足相似阈值(默认为87.5%),脚本将图像绘制成图像哈希相似图,如图6和图7所示。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载