图1:PE文件格式分布草图
该领域的研究
这一领域已经有很多研究了,对于基于不同机器学习算法和文件选择功能的恶意软件分类也有广泛的研究成果。大多数算法都需要相关的培训并测试样本集。若能合理调谐,这些算法能够完全自动化并且具有较高效率。但是,如果它们成为恶意软件作者的目标,则很容易出现故障。本文将探讨设计PE文件属性可视化的交互方法。也探讨了无监督学习聚类技术,这一技术能够省略培训集并将人际交往带入分类的过程中,因此在恶意软件分析和分类中生成更大的灵活性和智能保障
我们的研究--恶意文件聚类和可视化
一组文件中,会有哪一种适用于聚类算法的特性吗?如果有,那这一信息稍后可被用来识别检测中新出现或之前没见过的恶意文件。以下文件属性的初始设置被选作参考:
• 入口点地址
• 分区的数量
• 代码长度
• 图像大小
• 第一、二、三分区的虚拟尺寸及原始尺寸
最后决定,最佳的方式是创建一个图形来展示生成的属性,其允许二维空间的数据相互聚类。对于这种情况,平行坐标图更加适用。我们发现,利用R语言及其架对可视化有很大的帮助。R是一种为统计计算和图像服务的语言和环境,它能提供各种各样的统计技巧,例如线性和非线性模式、时间序列分析、分类、聚类等等。R语言还具有强大的图形可视化功能,并具有高度可拓展性。
方法
将不同的可视化和聚类技术应用于多组已知恶意软件家族文件中,并对有效分组这些文件的功效进行评估。这些分析方法也被应用于一组干净文件中,以作对比。
有关工具的说明:本文研究的意图不仅仅是利用文件几何学和可视化聚类恶意文件,也是想以这种方式与其他研究学者分享这些研究结果,进而对这些实验进行复制研究。因此,选用了这些开源的或是在GNU公共许可下的软件工具。
案例研究--Gamarue与Ursnif的外形
Gamarue--解析与绘制实例
在应用可视化与聚类之前,我们要能够解析PE文件并提取其属性至可读文件格式。市面上有许多产品具有上述功能。其中一个就是PeStudio,它能生成含有批命令行模式属性的XML文件。这是一种简便方法,因为许多可视化产品都能解析XML文件,例如我们选择的R语言。作为例子,我们来看看由各种安全产品检测到的Gamarue。Gamarue是一种传播相对普遍的恶意软件家族,通过可移动驱动进行传播并允许攻击者远程控制受害者的机器。
在我们的文件集中运行PeStudio,能够产生一系列包含文件属性的XML文件(图2)。
图2:PeStudioPrompt.exe的批量模式
我们可以利用XML浏览器快速查看其属性。它提供了一种简便的方法,能够通过XML文件快速导航并查看文件属性。
图3:用XML浏览器查看到的XML文件数据
利用R语言,我们能阅读包含数据框架属性的XML文件。由此我们利用这些数据集生成一个平行坐标图。平行坐标图是一种包含众多垂直顶点的图表,其中各顶点代表一个单独的变量。这种可视化使我们能够基于每一顶点所选的属性来估量文件的相似性。选择初始属性集是因为它们能与代码功能紧密耦合,例如入口点地址、区段编号、代码长度、图像大小以及第一、二、三区域的虚拟和原始大小。在多数PE文件中,这些属性都是可用的,也不需要额外的复杂处理,例如文件解压或行为分析、或在文件分区中分析数据流。利用至少一种反病毒产品来处理PE文件集,检测到Gamarue蠕虫,就能生成下面的平行坐标图。
图4:基于一系列文件属性的平行坐标图--Gamarue蠕虫家族
图中的每一条线代表着一个文件。每一个顶点代表着一个文件的属性,我们此应用于平行坐标图可视化中。尽管图中显示了基于所选属性的文件聚类,但是这也使得追踪每一个独立的文件变得更加困难——尤其是文件增多的时候。这种情况下,引用交互式平行坐标图就大有帮助了,其中一组线能被手动突出。
图 5:交互式平行坐标图,选取具有相似CodeSize的文件--Gamarue蠕虫家族
由图可见,CodeSize的选择标准创建了一个相对紧密耦合的聚类,这也包含了具有相似EntryPoint值、VirtualSize1、SizeOfRawData1、VirtualSize3的文件。但是在VirtualSize2、SizeOfRawData2和SizeOfRawData3中也存在细微的差别。或者,在第三区域选择具有相似的虚拟大小值的文件时,聚类就有些分散,但也包含大量的文件。
图6:交互式平行坐标图,选择第三区域中虚拟大小值相似的文件--Gamarue蠕虫家族
当比对这些结果时,我们应注意:即使所选的文件来自单一的病毒家族(Gamarue),当试图基于文件几何学对其聚类时,这些文件也展示了差异性。
这一实验显示,用于组建平行坐标图的文件属性的选择对于可视化的质量是至关重要的,并且这些属性也可能因所属家族的不同而不同。由文件解析器所提供的输出结果可应用于XML或任何其他可读格式,对于这种可视化可检查并利用大量的属性。
Ursnif--目标聚类实例
另一种数据可视化的方式就是应用目标聚类。这是一种无监督学习技术,着眼于独立的属性空间并尝试识别属性的组别和类别。
我们来检查一下Ursnif家族的恶意软件。Ursnif是一种广泛传播的木马,能够窃取敏感信息。该木马能够感染32位和64位的Windows平台,通常在其资源区携带组件(例如DLL)。这一行为特点能够提供一些有趣的文件几何学知识。通过一组由不同反病毒产品检测到Ursnif的32位文件,我们能够生成一个展示聚类的交互式平行坐标图。
图7:Ursnif家族的交互式平行坐标图--突出显示的文件按照分区2的VirtualSize归类
聚类的基本原则就是把目标分组,使一个组内的属性共性较高、跨组别的属性共性较低。基于不同的聚类方法,有很多R语言内可用的算法,例如分区、分层、基于密度和基于网格的方法等。每一种方法都有不同的特点,并且对不同的数据框架实例都有不同的优势。
K均值聚类是无监督学习分区方法中最普遍也最简单的一种方法。为了解K均值聚类算法的工作原理,简单起见,我们假设一个沙盒里有一把弹珠。我们怎样才能发现掩盖了弹珠的聚类呢?首先,我们需要限定预测的聚类数量。K均值算法需要这个信息作为参数。然后,我们随机选择沙箱中聚类中心点的位置。我们计算出每个弹珠与相应的中心点之间的距离。再之后,我们计算出新的中心点,使其距离的平方误差和减少。一旦计算了新的中心点,我们再选择一组属于新中心点的弹珠并继续计算,直到新计算的中心点与原来一模一样。至此,我们算是发现了聚类的所有中心点。
如前面所述,K均值算法的一个特点就是,它需要一个预测的聚类数量作为论据。这里,上述的平行坐标图可视化可能会有所帮助。例如,查看Ursnif家族的一组文件,平行坐标图能够告知我们所期待的聚类的数量。我们也可能评价用于聚类的PE文件属性的质量。由图7可见,在Ursnif池中,有2至3个聚类。
应用带有Ursnif数据框架的K均值聚类,得出:
ClusteringResults <- kmeans(ursnif_files_attributes,3)
这里3 是建议的群体个数。在ClusteringResults中,我们能够看到下述的可用构成要素:cluster,centers, totss, withinss, tot.withinss, betweenss, size, iter, ifault
下面是对这些要素在我们的案例中所代表的含义的简要描述:
• cluster – 是整数矢量。在我们的例子中,上述的聚类生成了下面的矢量:
> ClusteringResults$cluster
[1] 2 3 3 3 3 3 3 3 1 3 3 2 3 3 3 3 2 3 3 2 3 3 3 3 3 33
这就意味着元素总数是27;第一个元素属于聚类2,第二个元素属于聚类3,而第九个元素属于聚类1。类1只有一个元素。聚类2有4个元素,以此类推。
• centers – 是一组中心点的矩阵。上述例子中,中心点如下所示:
图 8:聚类中每一属性空间的中心点
中心点是按照聚类算法而计算的。
• totss – 平方总和
> ClusteringResults$totss
[1] 7.472679e+12
• withinss –矢量,识别聚类中平方总和
> ClusteringResults$withinss
[1] 0 31174032 5696360435
注意:0说明第一个聚类中只包含一个元素。
利用聚类平方和,我们能更好地通过计算其总和以及划分图示中的数据来识别一系列聚类。
在这种情况下,我们需要寻找一个独特的曲线,以指出数据框架中最有可能的聚类。
图 9:屏幕划分的平方误差之和
看似,我们需要分析2种或至多3种聚类。
• tot.withinss – 聚类中的平方总和
• betweenss – 聚类间的平方总和
• size – 每一聚类中的点数
>ClusterResults$size
[1] 1 4 22
• iter - 外迭代的数量
• fault – 表示算法问题的整数
我们可利用R语言可用clusplot()功能将聚类可视化,它能在现有的图形设备中画出二维聚类。
图 10 :基于Ursnif家族文件属性的聚类划分
由上面的例子可见,文件属性能够为聚类提供坚实的基础。正如前面我们所注意到的一样,文件的几何形状很容易受到各种文件压缩器、压缩包以及自解压文件夹的影响。当我们准备待处理的文件集时,都应该将这些因素考虑在内。我们增加了属性的数量,来看看它是如何影响组别划分的。
增加4个不同的属性后,例如SizeOfInitializedData、CheckSum、SizeOfStackReserve和SizeOfHeapReserve,就会显示更多的可用聚类。单独的曲线将自身延伸到聚类中心点。
图11:预测的聚类数量
在4个聚类中心点运行K均值分区算法,生成了更加细粒度的集群,也使我们更深入地了解了样本的恶意软件家族分裂。例如,图10中的聚类3(红色阴影的椭圆区域)的分区被分成了2个子群,详见图12。这些结果说明,属性的数量和质量对于聚类的结果至关重要。
图12:基于Ursnif病毒家族扩展的属性集的聚类划分
两个恶意软件家族的文件对比实例
基于实例中的两个恶意软件家族——Ursnif和Gamarue,我们来探讨K-mean文件集聚类。平方误差划分的总和展示了约10个聚类中的独特曲线。
图13:基于误差平方和预测的Gamarue与Ursnif的聚类
在这10个聚类中运行聚类算法展示了聚类间的隔离。请看图14。
图14:两大恶意软件家族Gamarue和 Ursnif的聚类划分
聚类尺寸显示,有10个聚类含有目标1、13、2、13、4、2、11、4、2和2。
> ClusterResults$size
[1] 1 13 2 13 4 2 11 4 2 2
我们来看看不同的恶意软件家族是如何在创建的聚类中下跌的。首先,我们创建一个表格,其中待分析的恶意软件家族名称与每一个文件代表的属性相联系。然后,我们将该信息应用于之前创建的聚类中。
> table(data_cluster$Name, clus_results$cluster)
表 1: Gamarue和Ursnif聚类
由上表可见,我们列出10个聚类,其中Gamarue家族文件在聚类4和7之间分布良好。大多数Ursnif文件位于聚类2、5和8中,并与Gamarue家族相分离。Ursnif家族所占据的聚类之多可能意味着恶意软件所代表的文件集受到其几何形状的严重影响并包含了不同的变种。另一方面,Gamarue家族同文件集和聚类形成紧密耦合。
这些结果又一次突出了文件属性选择的问题。其中显示,仅依赖文件的几何实体是不足够的,人们需要对恶意软件特点挖掘的更深。
干净文件对比实例
现在,我们将Windows系统中的一些干净文件混入其中。运行的误差划分平方和显示出,在聚类12和13之间有一个特别的曲线。
图 15: Ursnif、Gamarue以及干净文件集的误差平方和划分
在12个中心点运行的K均值聚类算法为我们提供了一个相对密集的群体分布。
图 16 :Ursnif、 Gamarue以及干净文件的混合聚类划分
从中可见,Gamarue家族与Ursnif家族隔离甚远。然而,干净文件集--虽然与Ursnif相分离--与Gamarue重叠较多。
表 2:Gamarue、Ursnif以及干净文件聚类
结论
我们在这份研究报告中想要展示的是,利用可视化技术和在线免费工具,一种交互式的恶意软件分析方法能够为机械学习算法和自动文件处理的文件属性甄选提供大大的帮助。我们向大家展示了,只要充分考虑文件属性空间,K均值无监督学习聚类算法就能够应用于文件分组。我们发现,甄选的属性足以将两个恶意软件家族分离成聚类,但当引入一个干净文件集时,属性就会减少。干净文件集与Gamarue恶意软件家族相互重叠,但却与Ursnif家族聚类分隔开来--这可能是因为Ursnif文件几何形状特殊并且在干净文件中不常见。它也表明,在对比Gamarue和Ursnif文件属性的平行坐标图时(参见图5和图7),Gamarue属性与选定文件集的耦合度不高,并且覆盖了大部分的数值空间,这种情况也出现在了干净文件中。这表明,文件几何学自身不足以产生精确的组别分类,还需要考虑和发掘其他属性集。这种属性可能是如下这些结果:静态和代码行为分析、分区分均信息量、导入和导出的API以及上述各项的组合。但是,这里所提供的方法可能对恶意软件家族的文件属性聚类的选择、测试及评估有所帮助。
延伸阅读
Microsoft PEand COFF Specification
Peering Insidethe PE: A Tour of the Win32 Portable Executable File Format
An In-DepthLook into the Win32 Portable Executable File Format
欲了解更多信息,请访问hp.com/go/hpsr。