工业落地-AVClass2-自动恶意软件标记工具
如何利用多杀软结果提取恶意软件标签
- secrss.com/articles/33242
- 通过多杀软结果挖掘得到更多关于样本的上下文信息是一个经久不衰的研究点
从杀软标签中自动提取标签是对大量样本进行分类和索引的有效方法。此前的 AVClass 和 Euphony 等工作已经能够从杀软标签中提取家族名称。而杀软标签包含有价值的信息不止是家族,还有类别(例如勒索软件、下载器、广告软件)和行为(例如垃圾邮件、DDoS、信息窃取)等。
恶意软件属性枚举和表征(MAEC)等标准定义了一种用于共享恶意软件分析结果的语言。然而,由于使用严格的受控词汇表(即预定义标签),这些词汇表可能并不总是符合分析师的需求,需要频繁更新,并且必然是不完整的,因此它们的采用率很低,例如,MAEC 中就不包括恶意软件家族。
杀软引擎有一些通用标签,标明恶意软件的类别、家族、文件属性和动态行为。也有一个通用标签(malicious, application)和特定杀软引擎(deepscan, cloud)才有的,或者是恶意软件家族变种(aghr, bcx)标签。
工作设计
AVClass2 的目标是分辨提供有用信息的 Token,识别不同杀软引擎 Token 之间的关系,最后转换成分类法的标签。
AVClass2 是一个自动恶意软件标记工具,可为样本提取一组干净的标签。AVClass2 附带一个默认的开放分类法,可将杀软标签的名词分类到不同的类别,捕获标签之间关系的默认标记规则和扩展规则。AVClass2 有一个更新模块,使用标签共现来识别标签之间的关系,以在杀软厂商引入新标签时保持工具更新。
AVCalss2 基于 AVClass 进行了最少必要更改,继承了 AVClass 的主要特点:可扩展性好、杀软引擎独立性好、平台无关性好、不需要样本文件、开源。
基本架构如下所示:
主要是两大模块:Labeling 模块和 Update 模块。
- Labeling 模块将多个杀软的标签结果作为输入,同时可以提供使用的杀软引擎列表,如果不提供默认使用所有杀软引擎的标签结果。给出一组标记规则、一个可选扩展规则以及可将标签分类合并的分类法。
- Update 模块将共现统计、标记规则、扩展规则和分类法作为输入。识别标签之间的强关联,生成新的标记规则、扩展规则和分类法。
标签
Labeling 模块分为三部分:标记化(Tokenization)、标记(Tagging)、扩展(Expansion)。
- 标记化(Tokenization)将每个杀软标签拆分为一个 Token 列表。标记化是与厂商无关的,VirusTotal 现在已经支持超过一百个引擎。每个厂商的格式也不完全一致,经常修改。如果尝试为引擎的标签定义格式或者自动推断格式,可能会得到数百个格式模板。不仅选择正确格式进行解析很困难,遇到未知格式的标签还可能出现错误。
- 标记(Tagging)会用分类法中的一组 Tag 替换杀软标签中的 Token,即将杀软标签中的 Token 转换为分类法中概念明确的 Tag。大多数标记规则会映射到单个标记,例如 downldr、dloader 会被映射到 downloader 上;finloski 和 fynloski 会被映射到 darkkomet 上。也存在一对多的关系,比如 ircbot 会映射到 irc 和 bot。
- 扩展(Expansion)用于处理未知的 Token,使用扩展规则定义一个标签隐含一组其他标签。例如有 95% 的标签在带有 virut 的同时也带有 virus,virut 就会是 virus 的扩展规则。扩展规则一共分为两类,一类是类内规则一类是类间规则,处理顺序是先类间规则再类内规则。类内规则由分类法中统一类别的父子关系隐式定义,例如 adware 是 grayware 的子类。类间规则由分类法中不同类别的隐式关系定义,例如 filemodify 行为归属于 virus 类。
整体流程如下所示:
分类法
行为、类型、文件属性和家族
分类法定义了标记规则使用的标签之间的父子关系。AVClass2 的分类法被构造为树型结构,默认包含四个类型(行为 BEH、类型 CLASS、文件属性 FILE、家族 FAM)。
标签是自上而下进行描述的,例如 CLASS:grayware:adware。
自带的默认分类法如下所示:
- 行为:例如 infosteal(信息窃取)、sendssms(发送短信)、spam(垃圾邮件)、mining(挖矿)等
- 类别:例如 worm(蠕虫)、virus(病毒)、ransomware(勒索)、downloader(下载)。Trojan 问题很大,原来特指某类,后来变成了默认类型,故而认为 Trojan 为通用 Token。
- 文件属性:例如文件类型(例如 pdf、flash、msword)、操作系统(android、linux、windows)、壳类型(pecompact、themida、vmprotect)、编程语言(autoit、delphi、java)
- 家族:默认分类家族不包括父子关系
Update
为了新的家族、新的行为都能够通过 AVClass2 自动更新,需要根据共现关系识别数据集中的强关系,迭代更新到规则中。基于 VAMO 引用的杀软标签共现关系,在 AVClass 和 Euphony 中也用于合并家族。(Roberto Perdisci and U. ManChon. 2012. VAMO: Towards a Fully Automated Malware Clustering Validity Analysis. In Annual Computer Security Applications Conference.)。共现的判断需要确定阈值,以AVClass的经验选择 𝑛 = 20 和 𝑇 = 0.94。
工作准备
使用 11 个数据集进行评估,数据集之间存在重复(例如 Drebin 是 MalGenome 的超集)但并未去重,为了便于单独映射结果。
工作评估
通过在 4200 万恶意样本中评估 AVClass2,并且与 AVClass 和 Euphony 进行了比较,测试其效果。
标记覆盖
标签覆盖率如下所示:
选择至少四个杀软引擎标记为恶意的样本,最近的研究表明 2-14 个杀软引擎判定的筛选范围有利于平衡精度和召回率。
Shuofei Zhu, Jianjun Shi, Limin Yang, Boqin Qin, Ziyi Zhang, Linhai Song, and Gang Wang. 2020. Measuring and Modeling the Label Dynamics of Online Anti-Malware Engines
AVClass2 可以为 89% 以上的样本提取至少一个标签,无法提取的基本都是检测结果较少的文件
测试时可识别的 975 个标签已经超过了 VirusTotal 的 335 个标签,VirusTotal 的标签基本都对应于文件属性和样本行为。其中,与 VirusTotal 重合的共有 259 个标签
每个类别 TOP10 的标签如下所示:
- 超过 10% 的样本对应了四个类别的标签。例如 CLASS:grayware:adware:multiplug 是通过浏览器插件进行广告推广的软件。
- Trojan 如果不是通用Token被剔除的话,会被分配给 86% 的样本。
- 最多的家族是 vobfus,占到了总数的十分一。
- 除了恶意软件外,grayware 也是常见家族的大赢家(loadmoney、softpulse、installererex、domaiq、firseria)。
知识更新
使用 Andropup 数据集举例说明 update 模块的用法。首次测试观察到 65% 的样本包含一个未知标签,执行 update 模块后会下降到 16%。
共现关系共计 30107 个,有归属于 11 类的 968 个强关联。96% 的强关联涉及未知 Token,从中自动识别出了 486 个新类别实体、216 个新标记规则、461 个扩展规则。处理完成后只剩下 3 个强关联不能自动更新,需要手动处理。
手动检查了更新的内容,1163 个更新中只有 11 个(0.9%)是需要调整的、3 个是需要手动检查的。
执行速度
- AVClass2 和 AVClass* 在四个数据集中获得了最好的 F1 成绩,而 AVClass 在 Malheur 上排名第一。
- AVClass 最快,AVClass2 其次,Euphony 则比 AVClass 慢 7 到 34 倍。对特大的数据集 Euphony 会很慢或者因内存不足而崩溃。
工作思考
AVClass2 对通过多杀软结果处理实现提取 VirusTotal 类的 Tag 标签很有帮助,实际上没有必要合并成一个完整的分类法的语法树结构。通过多杀软结果挖掘得到更多关于样本的上下文信息是一个经久不衰的研究点,本文作者也在 AVClass 的基础上再进一步做出了 AVClass2,==两个工作分别发表在 RAID 2016 与 ACSAC 2020 都是很不错的成绩。==
像 AVClass++ 指出的那样,AVClass 在杀软引擎结果较少时效果较差,那些新提交到 VirusTotal 的样本会因此效果较差。另外就是杀软结果中也存在随机生成类的结果,这两点实际上都可能是未来在这条路上的研究进展,AVClass++ 的解决方法是否很优则见仁见智,但仍不失为一个极佳的参考。