论文阅读——Assessing and Improving Malware Detection Sustainability through App Evolution Studies

论文链接:https://dl.acm.org/doi/pdf/10.1145/3371924

Motivation

在Android恶意软件检测方面,目前有相当多研究工作都在通过机器学习训练分类器等方法实现。然而Android平台和app演化速度很快,一个训练好的分类器能否有效检测新演化的恶意样本成了值得思考的问题。一种直观做法是更新数据集然后重训练,但显然开销很大而且没有根本性解决问题。作者认为一个实用性高的恶意软件检测器不仅应具备准确率,还应该对演化的恶意样本同样具有检测能力。

Contribution

  • 研究了基于机器学习的恶意软件检测器的可持续检测能力(sustainability),并定义两个评估指标:可重用性(reusability)和稳定性(stability)来评估模型的可持续检测能力。
  • 对5个最先进的静态/动态Android检测器评估可持续检测能力,由此揭露了现有工作这方面的不足。
  • 设计了一个检测器DroidSpan,此检测器就是常规的二元分类器,是通过选取的特征增强模型的可持续检测能力。
  • DroidSpan与5个已有工作一起评估,证明其优越的性能表现。
  • DroidSpan开源。

the Sustainability problem

定义

“how long and well can a classifier sustain its performance with and without retraining on newer samples?”

一个模型在重训练和未重训练两个状态下,对新样本的检测能力以及这种检测能力能保持多长时间。

评估指标

  • with retraining
    • Reusability:利用新样本集重训练后,对同年份的测试集进行检测,取平均情况下的准确率$e^r$。
  • without retraining
    • stability:模型不经过重训练和参数修改,对之后年份样本的检测准确率$<e^s,n>​$。即当训练集来自x年,则第$x+n(n≥1)​$年的平均情况下准确率为$e^s​$.

DroidSpan

本质

DroidSpan是基于随机森林算法的监督学习训练的常规二元分类检测器。依靠所选取的特征来解决检测演化恶意样本的问题。作者称这些特征在能有效区分benign和malicious,并且证明在软件演化过程中这些特征依旧有效。

特征(重点)

SAD(Sensitive Access Distribution) Profile

作者用SAD profile描述app的行为模式,刻画app访问(invoke sources)和操作(invoke sinks)敏感数据的运行时间。SAD profile由52个特征组成。总的来看,52个特征主要关注的是source/sink的调用范围和频率。主要分为3类:(百分比表示)

1.敏感访问的范围

2.被访问的敏感数据和操作的类别 (选择依据:来自作者之前的研究工作)

  • 5类敏感数据:Account, Calendar, Location, Network info, and System con gurations

  • 6类敏感操作:Account setting, File operation, Logging, Network access, Messaging, and System setting

3.vulnerable的方法级控制流

因为app的正常行为也可能调用source和sink,所以source/sink调用只算敏感(sensitive),不能算威胁(vulnerable)

  • vulnerable source :至少达到一个sink点的source是vulnerable

  • vulnerable sink:至少有一个被调用的source会到达的sink

是否可达:是否方法级的控制流来看,即动态调用路径

两种特征视角

1.callsite view:调用点视图

2.instance view:与调用点视图对应的实例视图,计数实例

![SAD profile features](/Users/reed/blog/source/_posts/论文阅读/img/SAD profile features.png)

构建SAD Profile

![SAD Profile Construction](/Users/reed/blog/source/_posts/论文阅读/img/SAD Profile Construction.png)

  • Instrumentation:通过SUSI获取Source/Sink 列表并进行人工精细化,然后对所有调用(包括异常处理、通过反射的调用)都进行插桩,在traces中再根据列表去辨别是否为source/sink。
  • App execution:5分钟的Monkey测试,获取trace。
  • Trace analysis:提取特征。
    • Timestamped dynamic call graph(TDCG):每一个app的trace都会生成一个TDCG用于计算特征。TDCG是一个method-level的动态调用图,包含时间戳和调用频率信息,时间戳由全局计数器计算,调用频率由向量维度反映。一个source到sink是否可达,就看能否找到一条”时间戳从小到大排列“的可达路径。
特征示例

DTCG

说明

左图是trace里的调用实例,右图是对应的TDCG。其中f1、f2为用户自定义方法,src为获取账户信息的调用,sink1调用有关logging敏感操作,sink2调用有关messaging敏感操作。一共5个调用点,10个调用实例。

获取特征如下

feature value remark
total source/sink callsites(2) (1/5,2/5)
total source/sink call instances (2) (1/10,2/10)
sensitive callsite distribution (11) (1/1,0,0,0,0,0,0,1/2,0,1/2,0) 前5个为source,后6个为sink
distribution of sensitive call instances(11) (1/1,0,0,0,0,0,0,1/2,0,1/2,0)
vulnerable source/sink callsites(2) (1/5,1/5)
vulnerable source/sink instances(2) (1/10,1/10)
vulnerable callsite distribution(11) (1/1,0,0,0,0,0,0,1/2,0,0,0)
distribution of vulnerable call instances(11) (1/1,0,0,0,0,0,0,1/2,0,0,0)

Study Dataset

数据集构造

  • 目的:研究演化软件对敏感信息的访问。
  • 数据集来源:2010年-2017年样本
    • B17:google play
    • M13-M16:Virus Share
    • B10-B16、M10-M12、M17:AndroZoo

datasaet

  • 数据集大小:(六个检测模型中只要有一个不能成功提取样本特征,则丢弃样本)

    • 总收集量(samples):15008 benign &14451 malicious

    • 实际使用(used):13627benign & 12755 malicious,包含917个恶意家族

  • 测试环境:Nexus One 仿真器,SDK 6.0(API 23)

SAD的演化研究

**source/sink 的范围演化**

![SAD dataset validation](/Users/reed/blog/source/_posts/论文阅读/img/SAD dataset validation.png)

  • benign样本的source/sink调用范围较广,malicious样本对特定source/sink调用更频繁在
  • 样本演变过程中,这些特征仍有效。

调用的source/sink的种类演化

  • 在正负样例中,调用的敏感信息主要是网络信息(network information),敏感操作主要是账户设置(account setting)。
  • 2010年-2017年的样本中,基于source/sink的种类的特征可以有效区分正负样例。

一点思考

上述利用2010-2017的数据集研究source/sink特征的区分能力的实验中,Benign2010-2016来自AndroZoo,2017来自google play。虽然实验显示特征在这8年中一直能有效区分正负例(表现为曲线无交叉),但可以观察到2017年处benign的走势和之前差异较大,由此猜想实验结果是否受数据集影响,如果换其他数据集有无可能出现曲线交叉情况。(受论文”Dos and Don’ts of Machine Learning In Computer Security”中Sampling Bias启发而得)