DeepReflect: Discovering Malicious Functionality through Binary Reconstruction论文解读

DeepReflect: Discovering Malicious Functionality through Binary Reconstruction论文解读

Abstract

对于恶意代码检测和分类,目前已经走得很前面了。然而为了确定恶意软件的行为,工作人员需要静态分析二进制文件。即使机器学习在这方面做得比较好,但同样的监督学习也需要大量标签数据。为了提高效率,定位关键组件,作者使用了一个无监督的神经网络,并通过半监督的聚类分析对组件进行分类,半监督的标签来自于工作人员的日常工作中

1. Introduction

经过很多已有技术对恶意软件处理后,还剩下一些需要人工处理。如今的技术还不能对恶意软件的表现进行定位和标记。这会给分析员造成很大的负担。
如果有一个工具,并且能解决这些问题,那么这个工具需要识别出恶意软件中的恶意函数并且打上标签。实现这两个功能需要面对两个挑战,1是工具需要甄别哪些是恶意的,哪些是善意的;2是理解识别出的恶意表现的语义。对于第一个挑战,区分什么是善意的和什么是恶意的是很困难的,因为恶意软件和善意软件的行为往往在很大程度上是重叠的。对于第二个挑战,自动标记和验证这些行为是困难的,因为没有公开的单独标记的恶意软件功能的数据集(不像恶意软件检测和分类系统使用开放的数据集,如antivirus)。
作者的工具使用了无监督深度学习和半监督聚类模型对识别的函数进行标签,这只需要很少的标签数据。
定位恶意软件组件使用自编码器(AE),利用思路为如果作者在善意的二进制文件上训练AE,它将难以重建恶意的二进制文件(即使没有训练它的样本)。能够重建的就是善意组件,不能重建的就是恶意滴(将损失函数作为查看标准)。之后使用聚类器将识别出的部分进行聚类,然后只需要分析人员给少数的类进行标签。
作者在五个方面进行了评估:

  • 在一个恶意软件中对恶意表现的鉴别
  • 对有关系的恶意软件组件进行分类
  • 将分析人员的注意放在重要的地方
  • 探索不同恶意软件家族的相同特征
  • 解决一些对抗性特征,包括混淆等
    contribution
  • 静态地定位和识别恶意行为,探索不同恶意软件家族的函数联系
  • 用无监督和半监督作为主要算法
  • 通过使用可映射回原始二进制或控制流图的本地化特征,用解释框架(如我们提出的AE或SHAP)对恶意软件的重要部分进行本地化。

2. Scope & Overview

2.1 Motivation

略略略略略略

2.2 Proposed Solution

虽然分析人员可能首先试图通过搜索特定的字符串和API调用来静态识别行为[69],但这些行为很容易被混淆或隐藏起来,不被分析人员发现。DEEPREFLECT不做这样的假设,而是通过控制流图(CFG)特征和API调用的组合来识别这些相同的行为。
DEEPREFLECT的工作原理是学习善意二进制功能的正常样子。因此,任何异常情况都表明这些功能不会出现在善意二进制文件中,而是可能被用来促使恶意行为。这使得我们的工具能够在分析员打开或扫描二进制文件之前缩小他们的搜索空间。

2.3 Threat Model

假设给系统的恶意软件是无包装的,可以准确地反汇编

2.4 Research Goals

  • 准确识别恶意软件中的恶意活动
  • 在对恶意软件样本进行静态分析时,集中分析人员的注意力
  • 处理新的(未见过的)恶意软件家族
  • 深入了解恶意软件家族的关系和趋势。

3. Design

工具的主要流水线为:1.得到感兴趣的区域(RoI) 2.对于RoI进行标签

3.1 Overview

首先,作者把 "恶意行为 "表示为可由MITRE框架描述的功能。
RoI Detection 检测的目的是自动识别恶意软件二进制中的恶意区域。比如希望检测C&C逻辑的位置,而不是检测该逻辑的具体组件(例如,网络API调用connect()、send()和recv())。RoI检测的优点是,分析人员可以快速地被指向负责启动和操作其恶意行为的特定代码区域。首要的工作只专注于创建特殊的签名,仅根据API调用就能将二进制文件识别为恶意软件或某些能力。这对分析员扩大工作规模特别有帮助(即不单单依靠人工逆向工程和领域专业知识)。
RoI Annotation. 注释的目的是自动标注包含RoI的函数的行为。换句话说,我们管道的这一部分可以识别这个恶意的功能在做什么。使这种标记不影响分析员的工作流程并可扩展是至关重要的。分析师为标记集群所做的初始工作是一个长尾分布。也就是说,前期的工作相对较多,但随着他们继续给每个集群贴标签,工作会越来越少。这个过程的好处很简单:它给分析员提供了一个自动生成报告和对未见过的样本的见解的方法。例如,如果一个恶意软件样本的变体包含与之前的恶意软件样本类似的逻辑(但对分析师来说,看起来有足够的不同,以至于不熟悉),我们的工具给了他们一种方法来更快地实现这一点。

3.2 RoI Detection

主要通过一个自编码进行探索。单位为控制流中的基本块(一坨基本指令),以平方作为错误函数,如果得出的错误值值大于一个阈值,则判断为一个感兴趣的区域

LMSE(x,x^)=(x(i)x^(i))2

Rx={x(i)|(x(i)x^(i))2ϕ}

3.2.1 Features

将每个二进制表示为m&c的矩阵,m为m个基本块,c为每个基本块的c个特征。
特征来自于先前即归属控制流图(ACFG)[23, 75]特征.在这些工作中,ACFG特征被选择来执行二进制相似性,因为他们假设这些特征(由结构和数字CFG特征组成)将在多个平台和编译器中保持一致。虽然可以说我们的目标是相似的(即识别二进制的相似性和差异),但我们专门为研究恶意软件定制了这些特征。特别是,我们为自动编码器选择了我们的特征,以捕捉更高层次的行为。我们的特征包括每个基本块中指令类型的计数(ACFG特征提取的更详细的形式)、CFG的结构特征和API调用的类别(已被用于总结恶意软件程序行为[18])。在本系统中,m为20k,c为18

  • Structural Characteristics 使用的结构特征是每个基本块的子代数和betweenness得分。这些特征可以代表一个控制流结构,通常用于网络通信(如连接、发送、接收)和文件加密(如查找文件、打开、读取、加密、写入、关闭)等操作。
  • Arithmetic Instructions 指令中基本运算的数量("basic math", "logic operation",
    and "bit shifting"),这些特征可以用来表示如何进行更高层次的行为的数学运算。
  • Transfer Instructions 使用的转移指令特征是每个基本块中 "堆栈操作"、"寄存器操作 "和 "端口操作 "指令的数量。这些特征可以用来表示高层行为的转移操作是如何进行的。
  • API Call Categories 使用的API调用特征是每个基本块中与 "文件系统"、"注册表"、"网络"、"DLL"、"对象"、"进程"、"服务"、"同步"、"系统信息 "和 "时间 "有关的API调用数量。这些类别的灵感来自于先前的恶意软件聚类工作[18]。这些特征可用于表示执行恶意活动所需的高级别库操作,如网络通信和文件系统、注册表和进程操作。由于它们直接代表了高层次的行为,因此对于理解一个函数的整体行为至关重要。

3.2.2 Model

自编码器使用U-Net进行训练
使用U-Net的好处是,它在En和De之间有跳过的连接,M可以用它来跳过压缩某些 的特征,以保留更高的保真度。

3.3 RoI Annotation

对仅仅一些函数进行标签,再利用聚类将结果推广到所有函数上

3.3.1 Clustering Features

让x是一个从未打包的恶意软件集合中提取的特征二进制。让F是使用BinaryNinja找到的x中的函数集。对于每个fiF,我们把fi中的RoIs表示为qi,其中qiRx。我们创建一个用于聚类的训练集D,如下所示。给定恶意软件xi,对于每个qi̸=,我们将fi的行为总结为1|qi|qi并将其添加到D中。实验中发现fi的RoIs的这种表示方式最能体现函数在集群质量方面的行为(即使用Silhouette Coefficient & Davies Bouldin Score)。

3.3.2 Clustering Model

使用PCA将18个特征变成5个,再使用HDBSCAN进行聚类,好处有:(1)它可以识别非凸的聚类(不像k-means)和(2)它可以自动选择聚类密度的最佳超参数。(不像经典的 DBSCAN)

3.4 Deployment

熟悉一套流程,为了初始化DEEPREFLECT,Molly 开始解压良性和恶意软件的二进制文件。然后,她把它们传递给DEEPREFLECT,(1)提取静态特征,(2)在良性样本上训练一个自动编码器模型M,(3)从每个恶意软件样本中提取RoIsRx,(4)通过平均RoIs(qi)提取每个函数的行为特征,作为D,以及(5)用PCA减少维度,作为C聚类。她现在可以对一小部分功能进行注释,或者继续进行她的常规工作,同时向D添加注释
到一个新的样本x时,这些行为会被DEEPREFLECT自动可视化、定位,并为她贴上标签,具体如下。(1)使用unipacker[11]对x进行解包,(2)x通过M并获得RoIsRx,(3)使用BinaryNinja识别功能,并通过平均其RoIs将每个功能总结为q,(4)使用PCA模型减少剩余的功能总结,(5)将每个功能与与其最相似的集群相关联,2(6)将多数集群注释分配给功能,将结果映射回Molly的用户界面。

4. Evaluation

5. Discussion

posted @   iridescense  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示