恶意软件检测之安卓反病毒引擎

介绍

反病毒引擎通常是指厂商提供的、能够快速判断一个APK是否恶意的模型。为了轻量化,这些模型通常通过静态分析、签名匹配、规则匹配等开销相对较小的方法对一个APK进行解析判断。而它们依赖的签名与规则往往来源于专家知识,给出的判定结果就形成了所谓的”恶意家族“与”恶意行为倾向“。(毕竟一个恶意家族叫什么名字,就是这些专家根据特征定义的)

使用——恶意软件判断

反病毒引擎是个好东西,安卓恶意软件检测领域的很多文章都用它们来做恶意软件benchmark,然而直接用这些引擎给出的结果会有两个问题:

正常/恶意不一致

首先,不同厂商提供的反病毒引擎提供的结果可能是南辕北辙的,这是因为一些引擎可能没有在名单上加入某恶意家族的特征,导致识别失败。这就造成一个恶意应用可能被大部分引擎报毒而少部分引擎认为其正常。

学术界针对该问题的解决方法是:提供一个阈值(threshold)。比如某个工作一共采用了50个反病毒引擎,那么可以设定一个应用如果被15个以上引擎报毒,其就是恶意应用。根据这个阈值,目前有很多论文筛选提供了自己的恶意Benchmark。

现在学术界比较常用的工具是VirusTotal (VT)[3],给一个hash,它可以反馈63个反病毒引擎的报毒情况,下图是一个正常应用的报毒反馈。

image-20230419193753088

有意思的是,虽然大家都在用VT,但这个阈值究竟多少比较合理是很有争议的,big four与一些A类期刊的文章都有自己的阈值(也没给出解释,就是凭感觉选的),比如Drebin[6](很多安卓恶意软件检测文章里用作benchmark,引用数都2000+了)设置2个以上引擎报毒为恶意软件,AndroCT[5]设置10个级以上的引擎报毒就是恶意软件,APIGraph[7]设置15个为阈值。甚至有专门的工作做过相关研究[4]。

具体行为不一致

其次,即使不同的反病毒引擎提供了相同的报毒结果(善恶意判断),它们给出的报毒格式也是千奇百怪,比如下面选的一个来自Koodous的恶意软件

image-20230419200228650

可以看到有10个引擎报毒,但是有的引擎告诉我它是一个Trojan(Cyren、Yandex),有的引擎告诉我它是一个PUA(Ikarus),还有的告诉我它是Adware(K7GW),并且都各自带有奇奇怪怪的token(比如Adware ( 005321b21 ),这后面的是个啥?)

针对这个问题有两个解决方法,一个是VT自己提供的Popular threat label(如果用VT的API的话,在response的suggested_threat_label里),VT会直接推荐一个比较好的label;另一个是学术界给出的AV精炼(AVClass[1]),它的工作流程如下:

image-20230419201325950

可以将不同AV引擎的报毒结果精炼为比较合理的label。

进阶使用

一些工作关注到AV提供了丰富的报毒信息,并试图用其提供多标签,这里罗列两个[1] [2],它们就是通过前面提到的AV报毒结果精炼,然后再人工归纳总结出一些类别。第一篇是直接对给出的token进行归类

image-20230419202346152

第二篇认为之前工作的类别太杂了,于是只取里面的behavior-related和operation-related(但其实还是很杂)

image-20230419202301021

限制

好了,介绍完AV引擎的应用,接下来讲讲我认为目前还有其他什么问题。

目前的局限性聚焦于给恶意软件提供multi-label,像我之前一篇博客提到的,AV引擎给的信息太杂,并不适合作为多分类标签。我认为AV标签给出的信息和恶意家族是一个级别的,而且在一些情况下,AV给出的标签其实就是恶意家族标签,这是比多分类要细粒度的标签。这里举一个多分类的分类标准例子

image-20230419203237571

可以看到,这个六分类的标准是比较统一的,而且相互之间的重叠度不高,而AV给出的结果涵盖从下载方式、应用内容、攻击方式,相互之间的重叠度很高,我很疑惑如何只将一个恶意应用分类到这四十多个label中的一个。而反过来说,如果自己去定义multi-label标准的话,又很难做到覆盖度很高的同时重叠度又很低。如何给出一个大家公认合理的多分类标准,是值得思考的问题。

参考

[1] Sebastián M, Rivera R, Kotzias P, et al. Avclass: A tool for massive malware labeling[C]//Research in Attacks, Intrusions, and Defenses: 19th International Symposium, RAID 2016, Paris, France, September 19-21, 2016, Proceedings 19. Springer International Publishing, 2016: 230-253.

[2] García-Teodoro P, Gómez-Hernández J A, Abellán-Galera A. Multi-labeling of complex, multi-behavioral malware samples[J]. Computers & Security, 2022, 121: 102845.

[3] https://www.virustotal.com/

[4] Mohaisen A, Alrawi O. Av-meter: An evaluation of antivirus scans and labels[C]//Detection of Intrusions and Malware, and Vulnerability Assessment: 11th International Conference, DIMVA 2014, Egham, UK, July 10-11, 2014. Proceedings 11. Springer International Publishing, 2014: 112-131.

[5] Li W, Fu X, Cai H. Androct: ten years of app call traces in android[C]//2021 IEEE/ACM 18th International Conference on Mining Software Repositories (MSR). IEEE, 2021: 570-574.

[6] Arp D, Spreitzenbarth M, Hubner M, et al. Drebin: Effective and explainable detection of android malware in your pocket[C]//Ndss. 2014, 14: 23-26.

[7] Zhang X, Zhang Y, Zhong M, et al. Enhancing state-of-the-art classifiers with api semantics to detect evolved android malware[C]//Proceedings of the 2020 ACM SIGSAC conference on computer and communications security. 2020: 757-770.