论文 MalwareTextDB:A Database for Annotated Malware Articles 解读
摘要
首先,该论文创建了一个注释恶意软件文本的数据库,有意思的是,这是第一个注释恶意软件报告的数据库。注释框架是基于MAEC词汇,MAEC是用来描述恶意软件属性和特征的结构化语言。目前该数据库由39篇APT报告共6819句话组成。其次,作者基于数据库提出了5项任务,需要大家共同来完成这些挑战。数据库下载地址:http://statnlp.org/research/re/.
注释的语句示例如下:
背景
1.APTnotes
论文中的39篇APT报告的出处—APTnotes,github上的一个公开的APT报告源,并且是持续更新的。目前该仓库有507篇APT报告。地址:https://github.com/aptnotes/data 。
2.MAEC
MAEC词汇表由MITRE公司设计,作为描述恶意软件的标准化语言。本文就是使用该词汇作为标签来注释语句。
3.Related Work
与传统的注释任务不同的是,本文只是注释了恶意软件功能相关的tokens,同时还提供了恶意软件功能或是隐含行为的类型。通过构建可以突出显示有关恶意软件功能的关键信息的模型,我们认为与恶意软件相关的文本可以成为更易于访问的信息来源,并提供更丰富的恶意软件表征形式,而不仅仅是检测文件哈希和系统调用。
数据收集
选择数据集时需要考虑的因素,包括提到了最新的恶意软件威胁,作者来源范围,博客文章和技术安全报告,以及演员归因的范围,从几个可疑的州级参与者到较小的APT组。
1.Preprocessing
APT报告是以PDF格式下载的,随后使用PDFMiner tool将PDF转换成纯文本的方式。这个工具是python脚本的,可以下载安装。在注视之前,人工去掉一些不是完整语句的句子。
2.Annotation
作者使用Brat Rapid Annotation Tool来注释报告,这个工具也是可以下载安装。
地址:http://blulab.chpc.utah.edu/content/brat-brat-rapid-annotation-tool
2.1.Stage 1-Tokens Labels
这里注释四种tokens labels:Action(引发的行为),Subject(行为引发者),Object(行为接收者),Modifier(行为阐述说明)。有些标签会有缺省。
2.2.Stage 2-Relation Labels
第二步注释的是关系标签–relation labels。SubAction,ActionObj,ActionMod,ModObj。
单个Action的引发者和接受者以及说明可能存在多个。
2.3.Stage 3-Attribute Labels
总共四类属性签:ActionName,Capability,StrategicObjectives,TacticalObjectives。这四类标签描述了恶意软件不同的属性和能力。
3.Summary
到撰写论文时,数据库总共有6819个句子,其中只有2080个句子获得注释。整个标签的统计如下:
注释器面临的挑战
1.复杂的句子结构
在很多案例中,其实没有明确的方法来标注tokens。例如:
其实上面两种注释方式都在强调Gen 2 sub-family有隐藏DLL的功能。第一个注释突出显示恶意软件用于隐藏库的方法,第二个注释侧重于隐藏库的恶意软件,不包括该方法。当句子中出现复杂名词性短语和分词短语,这种现象是很常见的。
2.大量标签
标注的过程中,属性标签是最多的,有444个属性标签。这样就需要更多的数据来训练模型。
3.需要特定领域知识
最后,此任务需要来自注释器的专业网络安全领域知识以及在自然语言环境中应用此类知识的能力。
例如,给定短语“load DLL into memory”,注释器必须意识到该短语匹配属性标签ActionName:119:ProcessMemorymap_library_into_process。
建议任务
Task1:分类任务----- 句子是否与推断恶意软件操作和功能相关
Task2:预测给定恶意软件相关文本的tokens标签
Task3:预测给定恶意软件相关文本的relations标签
Task4:预测给定恶意软件相关文本的attribute标签
这些任务是逐步递进的,一般是针对原始的训练集进行训练的。因此,任务的难度也是逐步增加的。
实验以及结果
作者针对这些任务使用了一些基本的模型作为baseline。 scikitlearn 库中的SVM、NB模型并做了一个对比。同时使用了CRF++来实现。数据集划分:60%/20%/20%—training/development/test。作者每个实验进行了5次,每次使用随机分组的不同数据集进行试验,最后报告平均分数,关注的主要是F1值。可能是数据集较小,数据较复杂,模型较简单,所以F1值普遍比较低,还有待提高。
Task 1 ----- Classify sentences relevant to malware
我们在MalwareTextDB中使用注释标签来进行监督学习任务,只要它带有注释过的标签,就会认为句子是相关的。我们使用词袋(bag-of-words)模型来表示words,然后使用的是SVM和NB。结果如下:
我们发现有两种主要类型的错误分类句子:
- 描述了恶意软件但是没有暗示其特定行为的句子(由于句子中带有专有名词或是术语)。
- 描述攻击者行为的句子(注释只是注意到恶意软件,没有攻击者。存在攻击者就是一个恶意软件)。
Task 2 ----- Predict token labels
由于注释的句子中object和subject会是同一个词,因此为了简化预测过程我们这里是预测Entity,Action,Modifier。由于预测的短语不止一个单词,我们使用BIO方法来表示。
Approche1:CRF(training on entire set)
Approche2:NB + CRF(training on related sentences in set)
特征提取:单字符和双字符,Stanford POStagger的部分词性标签,布朗聚类(由103篇未注释的APT报告和23篇来自训练集的APT报告,出现4次或更少次数的低频词组合成一个群集,在测试过程中我们将新词分配到此群集中)。结果如下:
我们发现主要有三种类型的错误预测:
1.描述攻击者行为的句子(由于注释只关注恶意软件的行为而不是攻击者的行为,有些攻击者行为的句子需要进一步推断,才会被注释)。如下图:
2.包含由分词短语和/或介词短语组成的名词短语句子。这是一项艰巨的任务,需要识别短语跨度以及决定哪种分解级别合适的能力。如下图:
3.包含由确定词和形容词组成的名词短语句子。句子包含带有确定词和形容词的名词短语,例如“All the requests” ,在这种情况下,模型可能只预测名词短语部分的实体标签。就是下图所示一样,其中模型预先确定“the requests”的实体标签而不是“All the requests”。
因此,我们采取一种较宽松的评分方案,其中预测在tokens级别而不是短语级别上进行评分。松弛分数的目的是在预测标签的跨度与实际标签的跨度相交时给予模型信用,如上图所示。宽松的评分方案所获得的实验结果如下:
Task 3 ----- Predict relation labels
对于这个实验,我们决定使用gold tokens labels作为模型的输入来预测关系标签。因此,我们将任务视为二进制分类任务,通过枚举所有可能的实体对并预测每对实体之间是否存在关系。
从tokens labels中预测relation labels似乎是一项相对简单的任务,因此我们为预测设计了一个简单的基于规则的模型。我们在其中一个文档(AdversaryIntelligenceReport_DeepPanda_0)上调整了基于规则的模型,并在剩余的38个文档上对其进行了测试。实验结果如下:
基于规则的模型的出色表现表明,实体之间的关系存在明确的结构。有可能利用这种固有结构来帮助改进预测令牌标签的结果。
另外,通过预测SubjAction,ActionObj和ActionMod关系,我们同时将不明确的实体标签分类为特定的Subject和Object标签。 例如,规则1预测ModObj关系是修饰符和实体之间的属性类别,暗示实体是Ojbect,而规则3预测实体和动作之间的SubjAction关系,暗示实体是Subject。
Task 4 ----- Predict attribute labels
更确切地说,我们发现许多这些属性标签在注释报告中很少发生, 这导致用于训练模型的严重稀疏数据集。由于缺乏实质性数据,我们决定使用tokens group而不是整个句子来预测属性标签。tokens group是通过关系标签相互链接的tokens group。我们从原始注释数据中提取tokens group,然后构建一个模型,用于预测每个tokens group的属性标签。同样,我们使用bag-of-words模型来表示tokens group,而SVM和NB每个用于构建用于预测属性标签的模型。
实验结果如下(5次训练结果的平均评分):
此任务的主要挑战是稀疏数据和丰富的属性标签。事实上,在444个属性标签中,190个标签没有出现在数据库中。对于数据库中确实发生的其余254个属性标签,92个标签少于五次,50个标签只出现一次。由于稀疏数据可用,特别是稀有属性标签,可能必须设计有效的一次性学习模型来解决这一困难的任务。