原文:微信安全内参 注意:本文仅从原文中摘录部分内容

工作来源

RAID 2016

工作简介

恶意软件的标记对恶意软件数据集的构建与评估非常重要,本文为恶意样本家族信息提取解决了三个挑战:

  • 标准化
  • 删除通用标记
  • 别名检测

最终对 890 万个样本的 10 个数据集进行了 AVCLASS 评估。

工作背景

将恶意软件标记为已知家族的变种是很重要的,例如识别新型威胁、归因恶意软件家族等。但杀软的主要目标是检测而不是分类,研究发现想要实现高精度的家族归类要比实现检测需要的杀软引擎数量多。某些杀软引擎可能长于标记某些家族,对其他家族的标记较差。
有些工作研究了阈值判断的数量,阈值的增加会迅速减少恶意样本的数量。已有工作发现杀软引擎之间彼此相关。而使用多数投票机制时,会使得评估偏向易于分辨家族的样本
Mohaisen 提出了评估杀软引擎检测的指标,发现了多个杀软引擎在检测方面是如何互补的,且检测率较高的杀软不一定给出准确的标签。
1991 年提出的 CARO 是一项开创性的工作,但是除了微软好像没有杀软引擎严格遵守该命名方式。近年,CME 提供了唯一标识符,用于在不同名称中标识相同的恶意软件。
从杀软标签中自动提取标签是对大量样本进行分类和索引的有效方法。此前的 AVClass 和 Euphony 等工作已经能够从杀软标签中提取家族名称。而杀软标签包含有价值的信息不止是家族,还有类别(例如勒索软件、下载器、广告软件)和行为(例如垃圾邮件、DDoS、信息窃取)等。
恶意软件属性枚举和表征(MAEC)等标准定义了一种用于共享恶意软件分析结果的语言。然而,由于使用严格的受控词汇表(即预定义标签),这些词汇表可能并不总是符合分析师的需求,需要频繁更新,并且必然是不完整的,因此它们的采用率很低,例如,MAEC 中就不包括恶意软件家族。
杀软引擎有一些通用标签,标明恶意软件的类别、家族、文件属性和动态行为。也有一个通用标签(malicious, application)和特定杀软引擎(deepscan, cloud)才有的,或者是恶意软件家族变种(aghr, bcx)标签。

工作设计

AVClass2 的目标是分辨提供有用信息的 Token,识别不同杀软引擎 Token 之间的关系,最后转换成分类法的标签。
AVClass2 是一个自动恶意软件标记工具,可为样本提取一组干净的标签。AVClass2 附带一个默认的开放分类法,可将杀软标签的名词分类到不同的类别,捕获标签之间关系的默认标记规则和扩展规则。AVClass2 有一个更新模块,使用标签共现来识别标签之间的关系,以在杀软厂商引入新标签时保持工具更新。
AVCalss2 基于 AVClass 进行了最少必要更改,继承了 AVClass 的主要特点:可扩展性好、杀软引擎独立性好、平台无关性好、不需要样本文件、开源。
基本架构如下所示:
image.png
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 类。

整体流程如下所示:
640.webp

杀软引擎选择(可选)

VirusTotal 的报告中提及了 99 种不同的杀软引擎,有些被 VirusTotal 只使用了几天,有些被 ViursTotal 连续使用了近十年
image.png

删除重复

相同的杀软厂商可能有多个引擎,比如 McAffee 和 McAffee-GW-Edition 或 TrendMicro 和 TrendMicro-HouseCall。当发现两个引擎输出的结果完全一致时,会被删除掉。唯一的特例是 Emsisoft 会在标签后增加后缀(B)。对与 Emsisoft 先删除后缀,再匹配是否完全一致。

删除后缀

杀软标签在家族之后的部分,杀软厂商在后缀中加入编码信息,例如规则编号或者十六进制字符串。大家的后缀规则不统一,但仍然有三条简单的规则来判断无用的后缀

  1. 对于 17 个杀软引擎,可以在最后一个点后截断标签
  2. 对于 AVG,如果后缀仅包含数字或者大写字母,在最后一个点后截断标签
  3. 对于 Agnitum 在最后叹号字符后截断

    Token化

    将标签切分成连续的非字母数字字符序列

    Token过滤

    每个 Token 都要经过五个步骤的处理:
  • 转换为小写
  • 删除 Token 末尾的数字
  • 如果少于 4 个字符即删除 Token
  • 删除通用 Token 列表
  • 如果 Token 是样本哈希的前缀即删除

    别名替换

    不同的杀软厂商可能为同一家族使用不同的名字

    Token排名

    通过包含 Token 的引擎数量对 Token 进行排名,只出现在一个引擎中的名字会被删除。

    家族选择

    AVCLASS会选择排名最高的家族名,同时给出其他排名的家族名称。

    通用Token检测

    image.png
    出现在已知属于不同家族的样本标签中的 Token 不属于某个特定家族,即为通用 Token。
    恶意软件类别拥有 53 个 Token,下载行为有 29 个 Token,潜在有害程序有 29 个 Token

    别名检测

    如果两个家族名是别名,将会始终出现在相同样本的标签中。
    image.png

    分类法

    分类法定义了标记规则使用的标签之间的父子关系。AVClass2 的分类法被构造为树型结构,默认包含四个类型(行为 BEH、类型 CLASS、文件属性 FILE、家族 FAM)。
    640.webp
    标签是自上而下进行描述的,例如 CLASS:grayware:adware。
    自带的默认分类法如下所示:
    640.webp

  • 行为:例如 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。
    640 (1).webp

    工作准备

    使用 11 个数据集进行评估,数据集之间存在重复(例如 Drebin 是 MalGenome 的超集)但并未去重,为了便于单独映射结果。
    640.webp

    工作评估

    通过在 4200 万恶意样本中评估 AVClass2,并且与 AVClass 和 Euphony 进行了比较,测试其效果。

    标记覆盖

    标签覆盖率如下所示:
    640.webp

  • 选择至少四个杀软引擎标记为恶意的样本,最近的研究表明 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 的标签如下所示:
640.webp

  • 超过 10% 的样本对应了四个类别的标签。例如 CLASS:grayware:adware:multiplug 是通过浏览器插件进行广告推广的软件。
  • Trojan 如果不是通用Token被剔除的话,会被分配给 86% 的样本。
  • 最多的家族是 vobfus,占到了总数的十分一。
  • 除了恶意软件外,grayware 也是常见家族的大赢家(loadmoney、softpulse、installererex、domaiq、firseria)。

    知识更新

    使用 Andropup 数据集举例说明 update 模块的用法。首次测试观察到 65% 的样本包含一个未知标签,执行 update 模块后会下降到 16%。
    640.webp
    共现关系共计 30107 个,有归属于 11 类的 968 个强关联。96% 的强关联涉及未知 Token,从中自动识别出了 486 个新类别实体、216 个新标记规则、461 个扩展规则。处理完成后只剩下 3 个强关联不能自动更新,需要手动处理。
    手动检查了更新的内容,1163 个更新中只有 11 个(0.9%)是需要调整的、3 个是需要手动检查的。

    执行速度

    640.webp

  • 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++ 的解决方法是否很优则见仁见智,但仍不失为一个极佳的参考。

    工作讨论

  • AVCLASS 无法对 19% 只有通用 Token 的样本进行标记

  • AVCLASS 的恶意软件聚类精度为 87.2%-95.3%
  • 删除无法标记的样本会引入选择偏见
  • 假设公开数据集的标签是完全准确的