详细解读Google论文:Google在Malware Hunting领域的新成果

引入

最近仔细通读了Google最新的paper,《Spotlight: Malware Lead Generation at Scale》,这是Google在2020年12月份发表在Annual Computer Security Applications Conference (ACSAC) 会议上的论文。

ACSAC是计算机安全领域的很好的会议,看到有的分析说是计算机安全排第二梯队的顶会。这是个比较有个性的会议,它上面的论文和学术界的其他会议区别很大。这里论文都是以应用为主的,文章内容注重实践性、工程性、经验性,文章中纯算法的比重很低,也花了大量篇幅写框架设计、性能优化等工程问题的解法,对工程师的参考价值非常高。

这篇论文首先抛出了一个痛点

  • malware hunting,就是从海量样本中找出值得关注的
  • 这种malware hunting的工作,一般是Researcher来进行的(借助于一些信息做关联分析、手工分析样本)
  • malware hunting的工作,做起来非常耗时间

Google为了解决这个痛点,就设计了Spotlight这个系统,结合了深度学习分类器,无监督聚类,动态静态分析,规则式判断。

下面对论文各个部分进行解读,大家可以参考原文(见博客最后参考中的文献1)来做更好的对照理解。

Abstract解读

这里首先抛出痛点(具体见上节),介绍了Google的Spotlight系统能解决这个痛点,并在六千七百万的数据集上进行测试,准确率能达到99%

在KEYWORDS部分,我们可以看到,这篇论文想解决的是Malware hunting的问题,用什么方法解决呢?用Malware classification(恶意软件分类), Malware clustering(恶意软件聚类), Malware prioritization(恶意软件优先级划定)这些方法来解决。

Spotlight大致的工作流程为:

  • Input:大量malware样本
  • 移除大量已知family的样本
  • Output:少量未知family的样本(人工从中找到新threat)
  • 每个样本都有score:根据打分来判断malware对business的影响程度,从而得到人工分析的样本优先级

1. INTRODUCTION解读

这部分首先提出问题:恶意软件数量逐年升高,且由于混淆、加壳、变形等代码混淆技术,恶意软件越来越难以被检测。

然后引入做malware hunting痛点:每天产生的大量malware样本,researcher该先看哪个?

这个痛点是比较难解决的,一方面需要大量人工检查,另一方面是不同公司对做malware hunting的关注点不同:比如(1)银行只关注banker;(2)广告公司关注广告欺诈。

所以设计了Spotlight系统:对未知的样本设定优先级,从而最大化researcher的投资回报。

系统的大致工作流程

  • 第1步:用ML来筛选出已知family的样本,留下未知family的样本
  • 第2步:未知family的样本,根据语义相似度来得到各个cluster
  • 第3步:对各个cluster打分

每个公司对malware的关注点不同,本文Spotlight主要关注ad afraud(广告欺诈)。他们动态运行样本来收集ad fraud的证据。

他们给出的样本数量67M(六千七百万)的样本数据集是目前用于malware family分类的最大的数据集。

系统最终有那么几个成果:

  • 他们给出的malware family classification的准确率很高,在99%左右
  • 用本文的方式,他们找出了3个ad fraud botnet,其中1个是目前virusTotal没能识别出来的

2. MOTIVATION解读

malware hunting是时效性很强的。crawdstrike提供了hunting平台做2B的服务。

Google在2020年做了一个问卷调查,对TOP-100公司的37个malware hunting的专家。得出了这些结论:

  • 每个team都只focus在一种特定的的threat上
    • browser
    • mobile device
    • ads
    • cloud computing
  • 52%的专家认为做malware hunting是很重要的
  • 大部分专家做malware hunting需要耗费自己日常工作时间的20%~40%

3. SYSTEM OVERVIEW解读

  1. Goal:Spotlight’s goal is to make malware hunting more efficient
    目标是提高效率

  2. 处理流程

系统的整体流程见下图(注意这里比较关键的设计是引入虚线组成反馈):

在这里插入图片描述

(1)把每一个malware样本都转换为一个向量

(2)用深度学习,分为多个类别:已知family,未知的family

(3)unknown的样本,会被聚类算法聚类(使用分类器生成的embedding vector,是32个浮点数,本文称之为compact embedding)

(4)最后,人工查看top-priority的聚类结果。人工检查得出的经验,也可以反馈到feature vector中,比如增加新的动态分析bitmap作为样本特征,或者出一些signature

3.1 Input Features解读

用feature来表示一个样本,这是深度学习/机器学习的通用做法。Spotlight的特征来源主要是如下3个方面,
用样本的3方面信息,组成一个vector,作为feature:

  1. 动态分析的输出结果

  2. 静态分析的输出结果

  3. VT上vendors的输出结果(这个Google的优势,可以在VirusTotal获取到50多个杀软厂商的输出)

这样得到的原始特征(raw-feature),做了one-hot encoding后,有212361个特征。维度太高,有做了如下降维处理:

  1. 对于文本类型的特征,做如下处理
  • 分词
  • 转小写
  • 移除分隔符
  • 去除重复字段
  1. 去掉一些特征(去掉出现次数太多,或者太少出现的)
  • 超过20%的样本上特征都一致的特征
  • 过小样本集上才有的特征

最终将特征维度从212361降低到121947。

关于特征的细节,Google没有公开(the features we use come from non-public
analysis platforms, whose implementation details we cannot share)。但给出了一张表,对所用到的特征类型进行了描述

在这里插入图片描述

通过这个表格,我们可以看到,特征的来源主要是个地方

  1. Google自己的动态、静态分析输出的结果,有 1115 个

  2. VirusTotal的输出做成的特征,就是其他杀软动态/静态输出的结果,有 211246 个

特征主要是下面几种类型

  1. 漏洞利用,CVE相关的特征

  2. 样本行为特征

  3. 样本类别特征:挖矿类、勒索类样本特征

  4. 样本文件本身的一些基础特征:比如文件类型、编译器信息

  5. 可疑的但是非恶意的样本行为:比如禁用操作系统的某些功能,沙箱逃逸

本博客博主对这种特征的一些个人看法:

  1. 这种高维度的feature,才适合用deep learning

  2. 特征中最终要的部分,是采用了多家杀毒软件的动态、静态分析引擎的结果综合

  3. 那么高维度的特征,应该是比较稀疏的向量

3.2 Known-Family Classification解读

这部分讲的是,如何用深度学习模型,把一个恶意软件样本,分类到某个具体的类别,或者unknown。

这里用到的深度学习模型,是多层感知器模型,具体如下图

在这里插入图片描述

模型本身比较简单,只有那么几个点值得关注

  1. 模型中用了两个hash-buckets,作用是把对输入维度比较大的稀疏vector做降维

  2. weighted cross-entropy loss,这个loss,对样本不平衡的问题,得到的结果更好。因为这个loss,对样本数相对少的family分类错误,会受到更大的惩罚。

  3. 模型中间层输出的16+16个浮点数,一共32位,作为样本的embedding,这个32位的向量会被抽出来给后续聚类使用

3.3 Unknown Malware Clustering解读

这部分说的是,通过上面部分的分类器,可以得到family unknown的样本。把所有family unknown的样本,都拿去聚类。聚类算法用的是高度并行化的层次聚类算法,并且用欧式距离作为距离准则。

聚类算法有一个参数需要设置:距离阈值(epsilon值)

  • 阈值表示何时停止聚类
  • 阈值是人工选取的
  • 更大的阈值,得到的类簇更小,类簇也更大

论文中这里也提到,作者之前也尝试过直接用input vector做聚类(就是上面提到维度为121947的特征),但因为vector稀疏,且feature有噪声,所以聚类结果不好。所以后来改用compact embedding(32位的向量)来做。

为了加速聚类,做了预聚类。也就是做两次聚类,第一次聚类做粗聚类,第二次再把上一次输出的类簇拿去做更精细的聚类。两次聚类的过程如下:

  1. 先降低compact embedding的精度,把每个浮点数转换为4位十进制表示。即浮点数转换为整数,先损失一点精度
  2. 根据转换为整数后的embedding进行聚类
  3. 聚类结果再进行二次聚类,二次聚类结果才是最终结果

3.4 Prioritization解读

这部分讲的是,如和对聚类得到的类簇,进行打分和排序。

根据各个team的scenario来打分。比如这里选定广告欺诈,就要把样本放到honeypot里跑,来尽量触发它的广告欺诈行为。如果嫌动态分析costly,可以用静态分析,比如在二进制文件里找到可疑的字符串,或者api调用。

本文做了两个打分器:

  1. ad fraud

(1)运行yara signature来扫描。检查可疑的字符串、url、api

  • Yara signature是一种pattern的描述语言,网上有很多用yara写的打CVE和各种不同平台病毒的pattern

(2)如果有1个yara signature能打到样本,则运行这个样本,并监测它的网络行为,以此来找到广告欺诈的证据

对每个样本都运行打分器后,取平均分作为类簇的最终得分。

  1. botnet-size:直接根据类簇中样本数量来打分,越多样本,得分越高

3.5 Investigation and Feedback解读

最后一个步骤,人工检查打分后的top-cluster。人工检查的结果可以有两个产出:

  1. create pattern
  2. add label
    人工检查的结果又能给将来的过程提供支持,形成闭环。

4 EVALUATION解读

这部分主要讲数据集,评估模型的方式,以及最终结果。

4.1 Data sets解读

数据集1:11.8M,都是windows平台下的恶意软件。

  • 有label:1.8M(1800000个恶意软件样本),26个family
  • 无label:10M,unknown family
  • 80%训练,20%测试

数据集2:67M

数据集中,各个类别的样本占比是不同的,有的family的样本很多(比如Pony这个family的样本数量占总数的28.5%),有的很少(比如Slave这个family的样本数量占总数的0.001%)。

4.2 Performance Metrics解读

这部分讲用什么指标来衡量聚类结果的好坏。当然这个衡量只能是在有label的样本上进行。

本文使用了3个指标:

  • 同质性(homogeneity):分的准不准
  • 完整性(completeness):分的散不散
  • v-measure:上两个指标的调和平均值

关于h,c,v这三个指标的细节公式及说明,可以参考博客最后列出的文献2。

4.3 Pipeline Performance解读

这部分给出了具体的测试结果数据。

在这里插入图片描述

图3讲的是,不同family数量,不同epsilon值(3.3部分讲到这个值的具体作用),对聚类同质性(准确率)的影响。

从图中可以看到

  1. epsilon的值越小,同质性结果越好,也就是准确率越高

  2. epsilon的值在0.13~3.0之间,对结果影响不大,所以这个值的选取是不需要特别精确的

  3. known family的数量增加,对聚类准确率影响不大,所以family数量是可以根据实际情况动态增加的

图4讲的是,不同epsilon值(3.3部分讲到这个值的具体作用),对聚类v-measure的影响。

从图中可以看到

  1. epsilon的值越小,v-measure结果越低,也就是聚类结果越散

completeness值太低也不行,最极端的情况就是每个样本作为一个cluster,这样同质性是最高的,但没有意义。
本文认为completeness的值在0.5~1之间都是可以接受的

综合这两个图,可以得出结论:

  • 蓝色那条线,同质性非常好,但v值很低,说明其完整性不好,聚类的结果太散了

  • epsilon的不同值对最终结果影响区别不大,所以这个值的设置可以不用特别精确

(中间有一块讲如何评估系统对人工效率提升的部分,没太看懂,这里就跳过了)

最终,Family分类的准确率:

  • precision=0.997(对family数量大于18来说)
  • unknown family分类的准确率是0.99
  • 作者的结论
    • precision=0.996
    • recall=0.99

Family分类的准确率
(1)precision=0.997(对family数量大于18来说)
(2)unknown family分类的准确率是0.99
(3)作者的结论

  • precision=0.996
  • recall=0.99

4.4 Efficiency at Scale解读

这部分讲系统性能:Spotlight处理六千七百万的新样本,花了34分钟,硬件配置是7核的CPU,12G的内存。

对性能影响,最大的是层次聚类。层次聚类有一个最大的问题,worst-case run time会很大,所以用了两种方法来避免这个问题,从而提高效率:

  1. 用32个浮点数组成的embedding向量来进行聚类

  2. 通过预聚类,将67M样本数降低到2.8M个类簇,再对每个类簇进行二次聚类

个人总结

博主读完论文后的收获如下:

  1. 不是全库样本聚类,而是只对malware中的未知family样本聚类

  2. 用深度学习做多分类,过滤掉已知family的样本

  3. VT各个vendors的输出可以作为样本的特征

  4. pre-cluster结合二次聚类,可以提高性能

  5. 动态行为分析输出的结果可以用来对未知cluster的样本打分

  6. cluster结果好坏的评价,用同质性和完整性

  7. 训练DNN时, weighted cross-entropy loss可以改善样本不平衡问题

  8. paper第7部分提到的用于做Malware family classification的paper值得参考

参考

    1. 原文论文,https://research.google/pubs/pub49626/
    1. 同质性、完整性、v-measure的公式,https://www.jianshu.com/p/b9528df2f57a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值