文献阅读 DeepReflect: Discovering Malicious Functionality through Binary Reconstruction

2023-05-16

其他可参考链接:

DeepReflect:通过二进制重构标识具体恶意行为 - 知乎

[论文阅读] (20)USENIXSec21 DeepReflect:通过二进制重构发现恶意行为(恶意代码ROI分析经典)_Eastmount的博客-CSDN博客_deepreflect

https://www.csdn.net/tags/MtjaAgzsNDA1MDMtYmxvZwO0O0OO0O0O.html

DeepReflect: Discovering Malicious Functionality

through Binary Reconstruction

DeepReflect: 通过二进制重构发现恶意功能

一、摘要

深度学习已在恶意软件分类任务中表现出良好的结果。然而:

  1. 人工分析效率低:对于未知恶意软件的binary,分析人员仍要花大量时间来利用静态分析工具逆向整个binary,从而识别关键的恶意行为;
  2. 监督学习开销大:尽管机器学习可用来帮助识别二进制的重要部分,但由于获取足够大的标记数据集开销很大,因此监督学习方法是不切实际的。

为了提高静态(或手动)逆向工程的生产力,我们提出了DeepReflect:一种用于定位(localize)和识别(identify)恶意二进制文件中恶意软件组件的工具。

  1. 为了定位恶意软件组件,我们以一种新型(novel)方式,即首先使用一个无监督的深度神经网络l来定位恶意软件中恶意组件(函数)的位置;
  2. 其次,通过半监督聚类分析对恶意组件进行分类,根据恶意行为分类确定恶意函数的行为,其中分析人员在他们的日常工作流程中逐步提供标签;
  3. 该工具是实用的,因为它不需要数据标记(require no data labeling)来训练定位模型,也不需要最小/非侵入性标记来增量地训练分类器。

方案对比

  • 企业界对比:CAPA

我们通过5个恶意软件分析人员对超过26k个恶意软件样本进行评估。实验发现,DeepReflect让每个分析人员需要逆向工程的函数数量平均减少了85%。本文方法还可以检测到80%的恶意软件组件,而当使用基于签名的工具CAPA时,该值仅为43%。

  • 学术界对比:Shap

此外,DeepReflect提出的自动编码器(autoencoder)比Shap(一种人工智能解释工具)表现得更好。这一点很重要,因为Shap是一种最先进(state-of-the-art)的方法,需要一个标记的数据集,而我们的自动编码器不需要。

 

二、引言

1.背景引出挑战

静态逆向工程恶意软件可能是一个手动且乏味的过程。 公司每周最多可以收到 500 万个可移植可执行 (PE) 样本。 虽然大多数组织提前对这些样本进行分类以减少要分析的恶意软件数量(即,检查 VirusTotal以获取防病毒 (AV) 引擎结果、在受控沙箱中执行样本、提取静态和动态签名等) ,最终仍然会有需要静态逆向工程的恶意软件样本。这是因为总是会有新的恶意软件样本,之前没有防病毒公司分析过,或者没有精心设计的签名来识别这些新样本。最后,样本可能会拒绝在分析师的动态沙盒中执行。

目前的解决方案存在于恶意软件样本的创建签名、分类和聚类的形式。然而,这些解决方案只预测样本的类别(例如,良性vs.恶意,或一个特定的恶意软件家族)。他们无法定位或解释恶意软件样本本身内部的行为(定位恶意函数位置、解释恶意函数行为),而分析师需要执行(perform)这些行为来生成报告并改进他们公司的恶意软件检测产品。事实上,由于工作量过大,该领域已经有过倦怠的报道。

为了确定他们的需求,我们咨询了四位逆向工程师恶意软件分析师。我们发现,如果恶意软件分析师有一种工具可以(1)识别恶意软件中恶意功能的位置(2)标记这些恶意函数的行为。那么他们的工作效率就会更高。

开发这样一个工具的挑战是:(1)人们需要能够区分什么是良性的(benign),什么是恶意的(malicious) (2)理解已识别的恶意行为的语义。

对于第一个挑战,区分什么是良性的和什么是恶意的是困难的,因为恶意软件和良性软件的行为经常在很高的程度上重叠。对于第二个挑战,自动标记和验证这些行为是困难的,因为没有发布的单独标记恶意软件功能的数据集(与使用反病毒标签的开放数据集的恶意软件检测和分类系统不同)。

2.如何解决挑战

为了解决这些挑战,开发了DEEPREFLECT,这是一个新颖的工具,它使用:

(1)一个无监督深度学习模型,它可以在二进制文件中定位恶意函数;

(2)一个半监督聚类模型,它使用从分析师的日常工作流程中获得的很少标签对识别的函数进行分类。

为了在二进制文件中定位恶意软件组件,我们使用了自动编码器 (AE)。 AE 是一种基于神经网络的机器学习模型,其任务是将其输入重建为输出。 由于网络内层存在压缩,AE 被迫学习训练分布中的关键概念。 我们的直觉是,如果我们在良性二进制文件上训练 AE,它将难以重建恶意二进制文件(即我们没有对其进行训练的样本)。 自然,AE 将无法重建包含恶意行为(在良性样本中不可见或罕见)的二进制区域。 因此,重构错误可用于识别恶意软件中的恶意组件。 此外,由于 AE 是以无监督的方式训练的,我们不需要数百万个标记样本,公司可以利用他们自己的内部恶意软件二进制数据集。

为了对所定位的恶意软件组件进行分类,我们

(1)对恶意软件样本中所有已识别的功能进行聚类;

(2) 使用分析人员在日常工作流程中所做的注释(即少量人工分析的函数行为标签)来标记聚类结果。

这种方法是半监督的,因为每个集群只需要几个标签(例如,三个)就可以将大多数标签分配给整个集群。随着时间的推移,我们可以通过将AE识别的功能映射到聚类模型来预测它们的类(例如,C&C,特权升级等)。这反过来又节省了分析人员的时间,因为他们不必一次又一次地对相同的代码进行逆向工程。

我们注意到,无监督AE为恶意软件分析人员提供了直接的效用,无需训练或使用半监督聚类模型。这是因为它

(1)将分析人员的注意力吸引到最相关的函数上,通过对它们进行排序(根据它们的重构错误)

(2)过滤掉分析人员可能需要花费数小时甚至数天来解释的函数。

DEEPREFLECT是根据四位恶意软件分析师的反馈进行设计和修改的, 并评估其有效性和实用性。我们评估了DEEPREFLECT的性能,包括五个工作:(1)识别恶意软件中的恶意活动,(2)聚集相关恶意软件组件,(3)将分析师的注意力集中在重要的方面,(4)揭示不同恶意软件家族之间共享行为的洞察力 (5)处理涉及混淆的对抗性攻。

3.创新(Contribution)

我们的贡献如下:

  1. 提出了一个新颖的工具,它可以帮助恶意软件分析师:(1) 在静态恶意软件样本中自动定位和识别恶意行为,(2) 洞察分析不同恶意软件家族之间的功能关系。
  2. 提出一种在静态分析中使用机器学习的新颖实用方法:(1) AE训练是在一种无监督方式下进行的,无需为系统标注任何样本,就可以产生突出显示恶意软件组件的实用程序,(2) 分类是以半监督方式完成,具有最小的干预:分析人员的常规工作流的注释用作标签,群集中的大多数标签用于对相关的恶意软件组件进行分类。
  3. 本文提出了一种解释框架(如我们提出的 AE 或 SHAP)定位恶意软件重要部分的方法,该方法可以映射回原始二进制或控制流图的特征。

三.Scope & Overview

1.Motivation

图1展示了一个典型的恶意软件分析师Molly的工作流程。当给定一个恶意软件样本,Molly的任务是了解该样本在做什么,以便她写一份技术报告并改进公司的检测系统,从而在未来识别该类样本。

(1) 首先查询VT(virtotul)和其他组织,以确定他们以前是否见过这个特定的样本,然而并没有

(2) 在一个自定义的沙箱中执行样本以了解其动态行为,然而没有显示任何恶意行为或拒绝执行;运行一些内部工具,诱使恶意软件执行其隐藏的行为,但仍无效时

(3) 尝试脱壳(unpacking)和静态逆向分析恶意样本,以了解其潜在行为

(4) 在反汇编程序(IDA Pro 或 BinaryNinja)中打开脱壳后的样本,被数千个函数淹没,接着运行各种静态签名检测工具来识别恶意软件的某些特定恶意组件,但仍无效

(5) 逐个查看每个函数(可能通过 API 调用和字符串过滤)以尝试了解它们的行为

(6) 在分析样本的行为后,撰写分析报告(包含基本信息、IOC、静态签名等)

然而,当新的样本出现时,Molly需要重复同样的任务。由于这种重复的体力劳动,这项工作对Molly来说变得单调乏味和耗时。

 

恶意软件分析师的一般工作流程。 当分析人员必须对未知恶意软件样本进行静态逆向工程时,DEEPREFLECT 可为他们提供帮助

DEEPREFLECT旨在减轻恶意分析师的分析工作,能逆向一个未知的恶意软件样本,从而减轻他们繁重的任务,并为相似的函数标注行为标签。

2.Proposed Solution

我们提出了DEEPREFLECT,该工具能:

(1) 定位恶意软件binary中的恶意函数

locates malicious functions within a malware binary

(2) 描述这些函数的行为

describes the behaviors of those functions

虽然分析人员可能首先尝试通过搜索特定的字符串和API调用来静态地识别行为,但这些行为很容易被分析人员混淆或隐藏( obfuscated or hidden)。DEEPREFLECT没有做出这样的假设,并试图通过控制流图(control-flow graph,CFG)特性和API调用(API calls)的组合来识别这些相同的行为。

DEEPREFLECT通过学习正常情况下良性的二进制函数来工作。因此,任何异常都表明这些函数不会出现在良性二进制文件中,而可能被用于恶意行为中。这些异常函数更可能是恶意函数,分析师可以只分析它们,从而缩小工作范围。如图5所示,DEEPREFLECT将分析师必须分析的函数数量平均减少了 85%。此外,实验表明我们的方法优于旨在实现相同目标的基于签名的技术。

 

3.Research Goals

本文有四个主要目标:

  • G1:准确地识别恶意软件样本中的恶意活动
  • G2:帮助分析人员在静态分析恶意软件样本时集中注意力
  • G3:处理新的(不可见的)恶意软件家族
  • G4:深入了解恶意软件家族的关系和趋势

四.模型设计

1.总体框架

DEEPREFLECT的目标是识别恶意软件二进制中的恶意函数。在实践中,它通过定位异常基本块(感兴趣区域 regions of interest,RoI)来识别可能是恶意的函数。然后,分析人员必须确定这些函数是恶意行为还是良性行为。DEEPREFLECT有两个主要步骤,如图2所示:

RoI检测(RoI detection):通过AE(AutoEncoder)来执行的

RoI注释(RoI annotation):通过对每个函数的所有RoI聚类,并将标记聚类结果来执行注释。注意,一个函数可能有多个ROI,用每个函数自己的ROI的均值表示该函数,然后对函数聚类。

 

DEEPREFLECT概述。我们的系统将脱壳的恶意软件样本作为输入,从每个输入(基本块(BB))中提取CFG特征,将它们应用到预训练的自动编码器模型中,以突出RoI(感兴趣的区域)。最后,对这些区域进行聚类和标记。

(1) 术语 Terminology

首先定义恶意行为(malicious behaviors)的含义。我们根据识别恶意软件源代码的核心组件(例如,拒绝服务功能、垃圾邮件功能、键盘记录器功能、命令和控制C&C功能、利用远程服务等)来生成真实情况(ground-truth)。通过MITRE ATT&CK框架描述,如表3所示。

 

然而,当静态逆向工程评估恶意软件二进制文件时(即在野恶意软件二进制 in-the-wild malware binaries),我们有时无法肯定地将观察到的低级函数归因于更高级别的描述。例如,恶意软件可能会因为许多不同的原因修改注册表项,但有时确定哪个注册表项因什么原因而被修改是很困难的,因此只能粗略地标记为“防御逃避:修改注册表(Defense Evasion: Modify Registry)”。即使是像CAPA这样的现代工具,也能识别出这些类型的模糊标签。因此,在我们的评估中,我们将“恶意行为”表示为可由MITRE ATT&CK框架描述的函数。

(2) RoI Detection

检测的目标是自动识别恶意软件二进制文件中的恶意区域。例如,我们希望检测C&C逻辑的位置,而不是检测该逻辑的特定组件(例如,网络API调用connect()、send() 和 recv())。RoI检测的优点是分析人员可以快速定位启动和操作恶意行为的特定代码区域。先前的工作只关注于创建临时签名,简单地将二进制文件标识为恶意软件或仅基于API调用的某些函数。这对于分析人员扩大他们的工作特别有用(即不仅仅依赖手动逆向工程和领域专业知识)。

(3) RoI Annotation

注释的目标是自动标记包含RoI的函数的行为,即识别恶意函数在做什么。由于分析人员为标记集群所执行的初始工作是一个长尾分布。也就是说,只需要前期做比较重要的工作,随着时间推移,工作量会减少。这个过程的优点很简单:它为分析人员提供了一种自动生成未知样本的报告及见解的方法。例如,如果恶意软件示例的变体包含与之前的恶意软件示例相似的逻辑(但对于分析人员来说看起来不同以至于不熟悉),我们的工具为他们提供了一种更快实现这一点的方法。

2.RoI Detection

首先介绍了AutoEncode(AE)神经网络。此外,先前的工作已经证明,当自动编码器在良性分布上进行训练时,AE可以检测到恶意(异常)行为。我们的假设是,与良性二进制文件相比,恶意软件二进制文件将包含相似但独特的功能。

 

当使用大量良性样本训练AE后,给定一个随机的样本,可以利用公式(2)计算,超过MSE的即认为是恶意区域,突出显示ROI异常基本块。与先前识别整个样本为恶意区域的工作相比,我们识别了每个样本中的恶意区域。具体而言,我们计算的 localized MSE 定义如下:

 

We denote the mapped set of RoIs identified in sample x as the set

 

(1) Features

我们特征(c)的灵感来自于先前工作中发现的特征,即属性控制流图(attributed control flow graph,ACFG)特征。在这些工作中,ACFG特征被选择来执行二进制相似性,因为它们假设这些特征(由结构和数字CFG特征组成)将在多个平台和编译器上是一致的。

控制流图(Control Flow Graph, CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向, 也能反映一个过程的实时执行过程。

  • Genius

Gemini

为了在二进制样本中定位恶意行为的位置,编码使用的特征必须一对一的映射回原样本。因此,作者将每个二进制文件表示为一个 m×c 的矩阵,该矩阵使用c个静态特征捕获前m个基本块以总结样本的behavior。m设置为20k个基本块,是因为95%的数据集样本具有20k或者更少的基本块, c设置为18个特征。

Our features consist of counts of instruction types within each basic block (a more detailed form of those extracted for ACFG features), structural features of the CFG, and categories of API calls (which have been used to summarize malware program behaviors).

  • Structural Characteristics

结构特征2个,每个基本块的后代(offspring)数量和betweenness score,可以描述不同功能的控制流结构,比如网络通信(connect, send, recv)或文件加密(findfile, open, read, encrypt, write, close)。如图6所示。

 

  • Arithmetic Instructions

算术指令3个,每个基本块基本数学、逻辑运算、位移指令的数量(“basic math”, “logic operation”, and “bit shifting”)。这些算术指令特征可以用来表示如何对更高层次的行为执行数学运算,以及数字如何与函数交互。例如,加密函数可能包含大量的xor指令,混淆函数可能包含逻辑和位移操作的组合等。

 

  • Transfer Instructions

转移指令3个,每个基本块内堆栈操作,寄存器操作和端口操作的数量(“stack operation”, “register operation”, and “port operation”)。这些底层特征可描述更高级别函数的传输操作,比如函数的参数和返回值是如何与函数内其余数据交互的,从而描述更复杂的逻辑和数据操作。例如去混淆、解密函数可能设计更多move-related指令,C&C逻辑设计更多堆栈相关指令。

 

  • API Call Categories

API类别10个, 包括"filesystem", “registry”, “network”, “DLL”,“object”, “process”, “service”, “synchronization”, “system information”, and "time"相关的API调用数量。调用不同类型API可执行不同类型功能,直接的表示了高层的函数行为,是很关键的特征。

 

(2) Model

Autoencoder使用U-Net模型,U-Net的优点是其在编码器和解码器之间有跳过连接(skip connections),对样本x可以跳过某些特征的压缩以在重构的x’中保持更高的保真度。

首先收集大量的良性样本,对每个二进制文件抽取上述18个静态特征用于表示该二进制文件。设有用feature表示的样本x,AE重构后得到x’,训练的目标是最小化重构损失,即输入x和输出x’之间的损失。

 

RoI Detection会在m个基本块中检测出一些异常基本块。这些基本块分别属于不同的函数,使用例如BinaryNinja的工具就可以确定ROI属于哪些函数,即认为这些函数可能是恶意函数,也就完成了恶意函数定位的任务。后续RoI Annotation就是对这些函数聚类,完成恶意函数行为标记(分类)的任务。

3.RoI Annotation

给定一个新样本x,我们希望识别其每个函数的行为(类别),并将其报告给Molly。由于标记所有的函数都是不实用的,所以我们只注释了少量的函数,并使用聚类分析来传播结果。

(1) Clustering Features聚类特性

假设一组脱壳恶意软件,按上述特征提取方式(18种特征)得到每个binary的特征表示,其中一个binary为x。

 

(2) Clustering Model
使用PCA将特征数从18降维至5,然后使用HDBSCAN算法对5维特征聚类。

 

4.Deployment

接下来,我们将描述如何部署和使用它。

(1) Initialization

  1. 首先对良性和恶意binaries脱壳unpack benign and malware binaries
  2. 提取binary静态特征,形成20×18的矩阵
  3. 用良性样本训练AutoEncoder
  4. 使用训练好的AE从恶意样本中提取ROIs,即恶意基本块位置
  5. 计算恶意二进制中恶意函数的行为表示,加入聚类的训练集D
  6. PCA降维并聚类生成C

人工分析恶意软件手动打标,这些label注释到聚类训练集中,从而评估实验结果。换句话说,每个cluster只需要其中几个函数的label,就可确定整个cluster的label,即确定整个cluster中函数的恶意行为。

(2) Execution

当Molly收到一个新的样本x,DeepReflect会自动定位恶意函数并标注恶意行为。

  1. 对样本x执行脱壳(unpack)
  2. 通过AutoEncoder获取ROIs  异常基本块
  3. 使用BinaryNinja以及ROIs确定恶意函数集合,然后计算恶意函数的行为表示 每个函数自己的均值表示该函数
  4. PCA模型降维
  5. 计算每个恶意函数最相近的集群,通过计算和聚类中心的距离实现
  6. 分配大数据集群注释给函数

接下来,Molly分析highlighted functions,从而实现:

  1. obtains a better perspective on what the malware is doing 可以更好地了解恶意软件在做什么
  2. annotates any function labeled “unknown” with the corresponding MITRE category (dynamically updating D) 用相应的MITRE类别注释任何标记为“未知”的函数(动态更新D)
  3. observe shared relationships between other malware samples and families by their shared clusters(共享关系,分析恶意软件家族的相关性)能够通过共享集群观察其他恶意软件样本和家族之间的共享关系。

五.实验评估

1.Dataset

根据CNET爬取PE文件,然后经过脱壳、过滤得到23307个良性样本。根据VirusTotal ,脱壳、过滤,在沙箱中执行获取家族标签。得到36396个恶意样本,4407个家族。

 

特征18个:

 

 百度百科对roc的解释如下:ROC曲线指受试者工作特征曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大(AUC area  under roc curve),诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。

ROC关注两个指标:

true positive rate ( TPR = TP / [TP + FN] ) ------正例分对的概率

false positive rate ( FPR = FP / [FP + TN] ) ------负例错分的概率

直观上,TPR代表能将正例分对的概率,FPR代表将负例错分为正例的概率,FPR 预测的是正例,但是实际上是负例。这部分在负例中占得比例。也就是将负例错分为正例的概率。

auc是什么意思

  auc被定义为ROC曲线下的面积。往往使用auc值作为模型的评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

PE文件的全称是Portable Executable,意为可移植的可执行的文件。

2.Evaluation 1 – Reliability(可靠性)

为了评估DeepReflect自动编码器的定位能力,我们与一般方法和领域特定方法进行比较:

SHAP(分类模型解释工具)

Scott M. Lundberg and Su-In Lee. A unified approach to interpreting model predictions. In Advances in Neural Information Processing Systems, pages 4765–4774, 2017.

CAPA (FireEye公司的一种基于签名的工具,用于识别二进制文件中的恶意行为)

https://github.com/fireeye/capa

FunctionSimSearch(谷歌的函数相似度工具)

https://github.com/googleprojectzero/functionsimsearch.

静态的分析了三个恶意软件的源代码(rbot, pegasus, carbanak),分析了其中恶意组件的位置。结果如Figure 3,横线为80% True Positive Rate。

 

3.Evaluation 2 – Cohesiveness(凝聚)

测试DeepReflect聚类的凝聚性,对恶意函数行为分类的能力。生成了22469个类簇,最大的簇包含6321个函数,最小的簇包含5个,如图10所示。在图10中,我们展示了类簇大小上的分布。图中显示,存在一个长尾分布(这在基于密度的聚类中很常见),其中最多的前10个集群占函数的5%。

 

在聚类质量分析中,89.7%的分析人员手工聚类功能与DeepReflect创建的功能相匹配。

 

4.Evaluation 3 – Focus

DeepReflect缩小需要人工分析的函数的范围的能力。如图5所示,很多样本需要分析的函数数量降低了90%以上。平均降低85%。

 

5.Evaluation 4 – Insight

为了评估DeepReflect是否为恶意软件家族间的关系及其行为提供了有意义的见解,我们探索了集群多样性。图4的左侧绘制了C中每个类簇中不同家族的数量。由图可知,在家族之间有许多共享的恶意软件技术和变体,部分恶意软件家族间分享了相同的函数,新的恶意软件家族的样本也可以被成功的分类。

 

6.Evaluation 5 – Robustness

使用LLVM混淆,继续测试模型的鲁棒性;同时使用对抗样本攻击,将包含本文使用的特征的良性样本的代码插入到恶意样本中,但均未对结果产生显著影响。

六.Conclusion

在本文中,我们介绍了DEEPREFLECT:一种用于本地化和识别恶意软件二进制文件中的恶意组件的工具。该工具是实用的,因为它不需要标记的数据集执行定位和少量的标签分类-从分析师的常规工作流程中逐步收集。我们希望这个工具和发布的代码将帮助世界各地的分析人员识别恶意软件样本中存在的位置和什么恶意功能。

 

 

七、个人总结:
这篇文章确实是恶意代码分析领域的顶级论文,写得非常棒,真心值得我去学习。同时,论文的写作方式及框架、实验都非常棒,工作量也很大,每个部分甚至都需要我们去理解,具体优点如下:

  • 整体方面

DeepReflect是一种新颖的用于定位(localize)和识别(identify)恶意二进制文件中恶意软件组件的工具,能有效提高静态(或手动)逆向工程的生产力。DeepReflect可以帮助分析人员实现:(1) 在静态恶意软件样本中自动定位和识别恶意行为,(2) 洞察分析不同恶意软件家族之间的功能关系。

  • 评估方面

本文对比实验非常详细和充分。一方面,本文同企业界和学术界经典的工具进行了对比实验,包括CAPA、SHAP和FunctionSimSearch,这也是系统安全论文经典的实验比较方式;另一方面,本文涵盖了五个方向(Reliability、Cohesiveness、Focus、Insight、Robustness)的详细实验分析,包括Appendix部分的各种特征案例、恶意家族行为共享分析都非常值得我们学习。

  • 模型方面

本文模型方面主要是AutoEncoder实现半监督学习,能在少样本标注的情况下识别更多的恶意行为或类别,有效减少了分析人员的手工标注压力。同时,采用了HDBSCAN聚类,并利用PCA降维,这些都是很常见的模型。但整个模型的框架非常精彩(图2胜万语),并且融合了RoI detection和RoI annotation描述故事,故事讲得非常棒。ROI区域之前在做APP地图热点开发时经常使用,没想到在二进制领域也有这么好的表达,确实ROI一个词就能准确表示想做的工作。或许,这种跨方向或学科专业词汇值得注意。

  • 特征方面

特征方面本文采用4大类(Structural Characteristics、Arithmetic Instructions、Transfer Instructions、API Call Categories)18个特征(之前论文已提出),并且提出了一种解释框架定位恶意软件重要部分的方法,该方法可以映射回原始二进制或控制流图的特征。就我而言,我们也应该思考,在进行恶意代码分析或系统安全研究时,如何尽可能全地覆盖研究问题来提出特征非常重要,并且结合我们的故事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文献阅读 DeepReflect: Discovering Malicious Functionality through Binary Reconstruction 的相关文章

随机推荐

  • C/C++常见错误汇总

    笔记本 xff1a MacBook Air xff0c 操作系统 xff1a macOS xff0c IDE xff1a CLion xff0c 工具链如下图 xff1a 1 error C 43 43 requires a type sp
  • 如何用Pytorch计算模型参数量Params和计算量Flops查看框架结构等

    公式 公式来源 xff1a 卷积神经网络模型参数量和运算量计算方法 简书 jianshu com 计算模型参数量 1 parameters法 通过遍历模型的parameters获取结构以及参数 xff1a model 61 你自己的模型 x
  • Matlab-基于模型不确定补偿的RBF网络机器人自适应控制仿真

    在众多机器人控制算法中 基于模型的计算力矩控制方法是十分有效的 其操作性能也是相当优秀的 然而 这种控制算法必须面对两大难题 第一 必须实现对机器人动力学模型的快速计算第二 必须事先精确了解机器人的动力学模型 因为计算转矩算法在模型未知的情
  • 超分辨latex论文写作图片排版

    latex排版多张局部放大图 xff0c 需要多行多列并排放置 xff0c 并且最左侧图片需要占用两行位置 xff0c 其他图片依次排列 xff0c 并为每个图片添加小标题 xff0c 研究半天写出来了 xff0c 具体如下 xff1a 只
  • Computers & Graphics(CAG)及Elsevier常见期刊投稿记录

    1 期刊地址 Editorial Manager https www editorialmanager com cag default2 aspx 先进行用户注册 xff0c 登录后进入首页点击Submit New Manuscript开始
  • BasicSR超分辨率框架使用问题记录

    报错 xff1a KeyError 34 No object named 39 BSRN 39 found in 39 arch 39 registry 34 或者 xff1a An object named BSRN was alread
  • JDBC配置教程+总结(sql server/mysql/maven)

    Eclipse配置 一 JDBC配置 百度搜索sql server jdbc下载进入微软下载官网 xff1a https docs microsoft com zh cn sql connect jdbc download microsof
  • 关于module.export的用法

    关于module export的用法 module exports 对象是由模块系统创建的 在我们自己写模块的时候 xff0c 需要在模块最后写好模块接口 xff0c 声明这个模块对外暴露什么内容 xff0c module exports
  • VNC之免交互式设置用户登录密码

    VNC之免交互式设置用户登录密码 由于有几十台机器 xff0c 每台机器需要配置4个VNC账号 xff0c 手动配置太费劲了 xff0c 这里使用免交互式配置密码 xff0c 可以将其改在脚本中 xff0c 减少配置时间 方法一 span
  • iscsi开机自动挂载和认证配置

    iscsi开机挂载和认证配置 iscsi 开机自启 span class token comment xff1a 发现iscsi设备 span span class token punctuation span root 64 localh
  • Linux 修改apt-get为国内镜像源

    查看apt get配置文件 cat etc apt sources list 源文件备份 sudo cp etc apt sources list etc apt sources list bak 清空配置文件 echo 34 34 gt
  • 为什么数组下标是从0开始?可能原因

    也不是所有的高级程序语言都是如此 xff0c 比如Python数组下标就支持负数 原因一 xff1a 历史原因 语言出现顺序从早到晚C Java JavaScript C语言数组下标是从0开始 gt Java也是 gt JavaScript
  • 离线部署docker配置文件

    systemd config cat gt usr lib systemd system docker service lt lt EOF Unit Description 61 Docker Application Container E
  • layui.use里面定义的方法外面怎么调用

    前言 xff1a layui use里面定义的方法外面怎么调用 解决办法 xff1a 方法内部加window 加了window后 可以被外部引用 window uploadData 61 function 源码 xff1a layui us
  • Hadoop(四)HDFS 读写流程

    HDFS 的读写流程 HDFS 将文件切割为默认大小的块 xff08 block xff09 存放在不同的 DataNode上 xff1b 上传文件和读取文件是 HDFS 重要的流程 xff1b HDFS 的写文件流程 图文解释 xff1a
  • cocos2dx3.x中Opacity和visible

    当我们需要场景中的某个精灵不可见时可能会面临两种选择 xff0c 特别地 xff0c 我们可能经常使用Fadein和Fadeout表示淡入淡出的特效 xff0c 而当我调用Fadeout淡出精灵时 xff0c 其实本质上是在对精灵的Opac
  • NLPcc2013-2014微博文本情感分类数据集

    从xml中提取的 xff0c 文件格式为tsv xff0c 和csv差不多 可以转为其他格式 链接 xff1a https pan baidu com s 1lDiuvpbT5qPc uJJs0cPUQ 提取码 xff1a t5i7 spa
  • java面试题2019 自己总结的面试题 javaspring springboot cloud面试题

    java面试题 这些面试题是我搜集的一些和自己之前在面试当中积攒的面试题 有不对的地方 请多指教 讲讲App接口对接 zookeeper 在微服务 xff0c 处于什么角色 xff1f 脏读是什么 xff1f 脏读是读到了别的事务回滚前的脏
  • 解决js、css缓存问题

    对于线上的项目 xff0c 会经常改动 xff0c 并重新发布 xff0c 但是会发现它一些css js并没有实时更新 xff0c 而是使用缓存中的 所以解决方式可以有 xff1a 在引入时 xff0c 给更新频繁的js或css文件加入版本
  • 文献阅读 DeepReflect: Discovering Malicious Functionality through Binary Reconstruction

    其他可参考链接 xff1a DeepReflect xff1a 通过二进制重构标识具体恶意行为 知乎 论文阅读 20 USENIXSec21 DeepReflect xff1a 通过二进制重构发现恶意行为 xff08 恶意代码ROI分析经典