基于行为依赖特征的恶意代码相似性比较方法

一. 论文总结

1.恶意代码的相似性比较

静态结构相似性比较、动态行为相似性

静态结构相似性

通过静态反汇编程序构建的“程序的控制流程图(CFG)”,根据流程图的结构特征进行相似性比较。
缺点
容易受到加壳等各种代码保护技术的干扰。

动态行为相似性

根据获取的“行为序列”进行相似性判定,多根据行为序列的文字距离、以及系统调用的敏感程度进行。典型代表是“可缩放的代码分析方法”,该方法对代码执行中的数据进行污点传播分析,提取行为序列,根据行为关联数据进行相似性比较。
优点
能够有效地避免加壳等代码保护技术对分析代码结构相似性的干涉。
缺点
该方法只比较相似行为序列的文字距离或者加权文字距离,没有充分利用程序行为内部的逻辑关系,忽视了程序代码和程序行为之间的依赖关系,故而无法解决攻击者通过在程序代码中加入一些无意义的系统调用等方法导致的“文字距离”改变,进而影响相似性的判断。

新的方法

提出一种基于行为之间的控制依赖和数据依赖的相似性判断方法。
对现有的控制依赖图和数据依赖图进行改造,改造为带有虚拟节点的控制依赖图。
拓展了用数据依赖图来描述恶意行为的方法,从而提高了行为之间依赖关系的表达能力。
具体
通过动态污点传播理论分析目标程序的控制依赖,数据依赖关系→构造带有虚拟节点的控制依赖图、数据依赖图→对依赖图进行垃圾调用删除、循环缩减、行为轮廓构建→基于拓展依赖图的相似性比较方法对依赖图进行相似性比较,确定目标程序之间的相似性。
创新
动态污点传播→不用反汇编→避免加壳干扰;
充分利用行为间的逻辑关系→避免代码重排、垃圾行为干扰;
使用代码行为轮廓进行比较→提高了准确性、降低了比较的复杂度。
实际用途
在获取“恶意代码样本”后完成离线分析,快速划分该恶意代码所属族群,并给出其行为轮廓。方便后续利用该系统以及该系统的结果完成对恶意代码的检测、归类。

二. 方法构建

1.依赖图定义

①定义带有虚拟节点的控制依赖图:

Gcd=
{Ncd, Ecd,VNcd,Entrycd,Exitcd,Typecd,Counttype}
Ncd表示系统调用、
Ecd表示顺序关系、
VNcd表示控制依赖关系、
Entrycd表示控制依赖图的入口、
Exit表示控制依赖图的出口、
Typecd表示系统调用的种类信息、
Counttype表示各种类系统调用的个数。

a.虚拟节点:

引出虚拟节点控制依赖关系VNcd的主要目的是表示一种顺序无关的行为间控制依赖关系。
在进行相似性比较时,先查找虚拟节点VNcd(控制依赖关系),对虚拟节点相连的行为进行无序比较,消除了传统依赖图在调换顺序后前后依赖边发生改变进而导致的对相似性比较造成的干扰。

b.Typecd、Counttype:图的行为轮廓

引入行为统计信息Typecd、Counttype来记录依赖图中各种系统调用的类型统计信息、数量统计信息,通过它们构建出图的行为轮廓,通过首先比较两个依赖图的“行为轮廓”初步判断两个图的相似性。

2.拓展的数据依赖图定义

Gdd={Ndd,Edd,Entrydd,Exitdd,Typedd,Counttype}
各个要素类似控制依赖图定义。值得注意的是数据依赖图,由于节点之间必然存在引用关系,故而没有引入虚拟节点。

3.依赖图的建立

依赖图(控制依赖图、拓展的数据依赖图)的建立主要利用“可回溯的动态污点传播”进行。

a.可回溯的动态污点传播

将感兴趣的数据标记为污点
指定污点传播规则
根据指令计算污点状态的改变→
在相关联的污点状态记录中建立联系以便回溯查找。

b.污点传播规则

数据传递依赖:如果一个指令使用了污点数据,那么这个指令的输出也是污点。
控制传递依赖:如果一个污点数据影响了条件判断的结果,那么控制流可能因此改变导致不同的代码路径被执行。

c.污点状态记录:

污点状态记录以字节为单位描述,分为内存污点寄存器污点
内存污点用来记录污点数据的数据内存的地址范围(数的大小变化和位置变化),寄存器污点用来记录污点在寄存器中的状态。
在构造依赖图时需要考虑当前节点与之前节点的依赖关系 ,故而引入回溯机制。
回溯机制主要是记录污点的传播路径,并允许按照污点传播路径回溯行为。

①带有虚拟节点的控制依赖图的建立

带有虚拟节点的控制依赖图构造过程包括初始节点的产生、实节点的添加、虚拟节点的添加、依赖边的
添加和构造结束的判断。

a.初始节点的产生

在控制依赖图G集合中创建带有虚拟节点的控制依赖图Gi(Gi不为空)→
将Gi设置为当前控制依赖图→
标记感兴趣的数据为污点,执行恶意代码→
将产生污点的第一个系统调用作为初始节点Entry加入Gi→
依赖图构造开始。

b.实节点、控制依赖边的添加

(由当前系统调用所在的控制依赖范围决定。
由于控制流转移的方向由标志寄存器决定,故而将标志寄存器作为污点。)
若污点影响控制流转移则此时标志寄存器状态改变→
此时计算当前指令后的必经节点的控制依赖范围,将控制来范围内的调用作为实节点加入当前控制依赖图Gi中→
以该控制流转移指令为起点回溯污点传播过程→在刚加入的实节点和回溯中遇到的节点之间添加控制依赖边。
注意:(新添加的实节点存在两种类型:系统调用、恶意代码的子函数。
如果是系统调用的话,继续做就行(当前控制依赖图为Gn)。但如果是恶意代码的子函数,我们将当前节点作为图Gn+1的entry,将当前控制状态图置为Gn+1,根据前面提到的过程田间实节点和依赖边,直到该子函数返回,恢复当前控制状态图为Gn,继续污点传播添加实节点和依赖边。)

c.构造结束的判断

当判定污点传播终止时,完成控制依赖图构建结束的判断。
判定污点传播终止有三个条件:
函数返回(函数内部控制依赖关系构建结束)、
函数内的污点漂白(该污点的控制依赖结束:污点在经过汇聚点之前,经过了某些无害化处理模块,这些模块可以确保数据不具备敏感信息或不会对系统产生威胁。)、
程序执行结束

d.虚拟节点的添加

前提(在添加依赖边时完成):在控制依赖图中添加虚拟节点要记录数据依赖节点之间的数据状态。如果污点从节点A流到节点B的过程中污点状态不变,则标记AB之间的依赖边为Stable,否则标记为Changed。
补充:虚拟节点的添加是构造依赖图的最后一步。虚拟节点表达控制依赖关系中节点间的顺序无关特性。
虚拟节点的添加
(节点的控制依赖关系是当前节点的出边,定义实节点n的控制依赖集为Controln(n为下标,Controln为节点集)。)
对图Gcd,从Entry开始遍历控制依赖图,计算路径上的每个节点n∈N的控制依赖集
每当新节点的控制依赖集n’计算完成,则将该节点与前面已遍历的控制依赖集进行比较。如果存在n,使得n’属于controln,且control n-control n’={n}(control n中去掉control n’后剩余的元素为{n}),可知n与n’的控制依赖范围重叠。
此时根据调用地址,在数据依赖图中查找n和n‘的数据依赖,若两者之间不存在数据依赖或者数据依赖关系为Stable,则认为n和n’之间存在顺序无关的控制依赖关系。
此时,在图中添加一个虚拟节点,并将n和n‘两个节点的控制依赖边都转移到新添加的虚拟节点上。同时,在两个节点和虚拟节点之间也构建一个控制依赖边。
当节点遍历到Exitcd时,虚拟节点的构建结束。

4.依赖图预处理

通过垃圾调用删除、循环缩减、等价行为序列识别、主分派函数识别、行为轮廓构建这些处理过程,来消除混淆手段带来的干扰,并为后续的相似性比较降低了复杂度。

a.垃圾调用删除

垃圾调用是指从代码中移除后不影响整个代码的功能调用,在污点传播过程中表现为产生了污点但没有进行传播、或者传播了但在传播过程中没有引起系统状态改变的调用。
(时间不够了,明天要组会,决定预处理这一部分等组会结束再进行补充。)

5.相似性比较

根据处理过的控制依赖图、数据依赖图、行为轮廓图进行相似性比较。

①.比较方法总论

基于拓展依赖图进行,但由于存在虚拟节点故无法使用传统的图相似比较算法。同时,传统的图相似比较算法忽略了行为轮廓差异、行为间的联系,采用穷举法比较,复杂度较高。
本文提出的基于拓展依赖图的图相似比较算法,利用代码执行轮廓和结构,引导拓展依赖图的比较过程。
比较的过程分为两步
第一步根据分派函数相关信息以及行为轮廓差异大小确定该类依赖图比较的先后次序
第二步,在比较的过程中寻找相同的系统调用作为比较的起点递归比较

②.控制依赖图的比较(递归)

两个样本产生的拓展依赖集合分别为{C1,D1},{C2,D2}。
则首先比较控制依赖图C1,C2:确定依赖图的比较顺序、比较集合中依赖图的相似性。

a.确定依赖图的比较顺序

(是否含为分派函数、行为轮廓间的差异大小)
若依赖图有分派函数,则先进行比较。
对于无分派函数标记的依赖图,定义符号ABS(Type[G′]−Type[G″])表示两个图中行为类型的差值(差值越小,相似度越高),定义符号ABS(Counttype[G’]-Counttype[G’']表示两个图中同类行为频度的差值)。
对于所有的有 G′∈C1 & G″∈C2 ,计算ABS(Type[G′]−Type[G″]),根据差值从小到大排列比较顺序(当两个图的差值相等时,根据ABS(Counttype[G′]−Counttype[G″])的值从小到大排列)。
在这里插入图片描述

b.比较集合中依赖图的相似性

确定好比较顺序之后,以Entry为起点(由于控制依赖图由相同的污点传播构建出,故而两个图的Entry都是相同的)递归地遍历相连节点比较相似性。

节点的比较:分为实节点和虚拟节点两部分。

当 , Ng1∈G1,Ng2∈G2,并且 Ng1= Ng2 时,如果存在 N′∈G1,N″∈G2,N′和 N″都是实节点且表示相同的系统调用,同时,连接 Ng1 和 N′以及连接 Ng2 和 N″的边同是出边或同是入边,则 N′和 N″等价。
在这里插入图片描述
若其中有一个节点是虚拟节点,假设为 N′,若 N″也是虚拟节点,则比较与两个虚拟节点相连的实节点.
若N’为虚拟节点,而N’‘为实节点,则返回N’‘的上一级Ng2,遍历Ng2的所有控制节点,查找与之相连的虚拟节点→若虚拟节点存在,将其与N’进行比较→若不存在,则将N’相连的所有节点,按照实节点比较方法与N’'进行比较。
在节点比较后,我们将两个节点都标为visited,以当前的等价节点为起点,递归地遍历与其相连的非visited节点,将它们进行比较。
如果与某个节点相连的全部节点都为visited,则该节点的递归计算完成,返回上一节点。
我们设置等价节点计数器Count equ,每当有新的等价节点时,计数器就加一。
控制依赖图相似比较算法的停止条件是,其中一个图的所有节点都被标记为visited;
控制依赖图集合C的比较结束条件是其中一个集合未被比较的控制依赖图数量为0。

③数据依赖图的比较

以代码的分派函数信息、控制依赖图相似性信息、行为轮廓信息为指导,也分为确定比较顺序、确定图的相似性两步。
比较的优先级为:分派函数相关的数据依赖图(通过比较依赖图中的函数地址进行识别)>已匹配控制依赖图的数据依赖图(通过比较依赖图中的函数地址进行识别)>其他数据依赖图。

a.识别

依赖图的构建中记录了依赖图的系统调用地址,我们可以根据控制依赖图中的系统调用地址在数据依赖图中查找对应的节点(认为包含相同系统调用地址的控制依赖图和数据依赖图相对应);若控制依赖图中有分派函数标记,则对应的数据依赖图具有最高的比较优先级;若无标记,则具有次高的优先级。剩余的数据依赖图则根据依赖图之间的行为类型差异、类型频率差异从大到小进行比较。

b.数据依赖图的节点等价判断

相当于控制依赖图中两个节点都为实节点的情况,即数据依赖图节点等价判定。
方法为:当 Ng1∈G1,Ng2∈ G2并且 Ng1 = Ng2 时,如果存在 N′∈G1,N″∈G2,N′和 N″表示相同的系统调用,同时,连接Ng1 和 N′以及连接 Ng2 和 N″的边同是出边或同是入边,则 N′和 N″等价.可将两个节点都标记为 visited,并以这两个节点为起点,递归地比较其所有相连的非visited 节点.
同样,也设置数值依赖图的等价节点计数器Count equ。
数据依赖图的比较完成的条件为:两个图中有一个图的节点都为visited、或者该节点其后的数据依赖图与当前数据依赖图的差异大于数值差异比例(在比较两个不同时间点或状态下的依赖图时,两者之间的差异超出了预先设定的接受范围或阈值)
数据依赖集合比较完成的条件:其中一个集合未比较依赖图个数为 0。

三. 实验整体建构

四.前人研究的创新之处、我们的创新之处

五.我们的结果与不足

作者将之前论文中提出的基于基本块的比较、基于系统调用的比较与自己的基于依赖关系的比较进行评价,证明了基于依赖关系的相似性比较对加壳处理的样本具有更好的检测效果。
在这里插入图片描述
同时通过在另一个现实的数据集Bagle上进行实验,发现自行编写代码替换部分操作系统调用的做法对基于依赖关系的相似性判断方法干扰不大。
在这里插入图片描述
.实验结果表明,该方法可以有效去除由于混淆、加壳等反制手段引起的干扰,具有较高的准确性。
不足之处是本文提出的方法使用动态分析,故而每次只能分析一条路径。故而之后作者打算将尝试使用符号执行方法判断路径可达性,实现路径遍历以更好地进行相似性比较。
在实践层面,作者将尝试根据恶意代码的相似性提取其
依赖特征,以此为基础检测恶意代码变种和未知恶意代码,并尝试使用相似性比较的方式进行未知恶意代码的
检测实时预警。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值