一种基于api调用和网络行为的僵尸软件检测方法
技术领域
1.本发明涉及计算机科学技术领域,具体是一种基于api调用和网络行为的僵尸软件检测方法。
背景技术:2.随着深度学习的应用,端到端的基于自然语言处理的文本分类技术和学习模型也被应用于恶意代码检测中。x.xiao等将二进制代码当作最底层的特征,二进制代码类似深度学习其他应用中的图片像素或者流量的前若干字节,然后通过cnn、rnn或lstm,自编码器等挖掘代码结构或时序上的特征,通过多层隐藏层学习到更高级的特征。m.yeo则首先提取出特征,输入神经网络进行训练和分类,因为僵尸软件等恶意代码发送的流量往往具有不同的特征,用以完成扫描,拒绝攻击等行为,通过对恶意软件相关的网络流量进行分析来识别恶意代码。类似地,针对恶意代码的通信行为,进行特征工程之后,通过筛选出的35个网络流特征,输入cnn、svm,随机森林等深度学习和机器学习模型,证明了分析与恶意代码相关网络流,对恶意代码的识别起到了很好的效果。x.jin等将代码样本编译成二进制文件之后,通过设计算法将其转换为等大的图片,输入自动编码器,通过重构误差来判断是否是恶意代码。端到端学习模型减少了人工特征工程带来的不稳定性,能够学习到一些有用的上下文信息。但是,端到端的模型的缺点之一是可解释性,难以解释模型的分类结果,不足于解释一次攻击的ttp,难以将攻击知识更新到知识库中并进行二次利用和联合分析。
3.除了原始二进制数据,还能针对系统调用和指令操作码序列进行恶意代码检测,检测中主要关注一些与敏感操作相关的api,因为在对文件,注册表,代码段或者内存的属性进行操作的时候等,都需要通过一些系统调用来进行。为了进一步提高检测效率,通过系统调用图来分类样本的方法出现了,基于随机游走,基于路径或者更小粒度的基于n-gram的方法都被进行了探索,基于n-gram的方法以固定长度的api调用子序列作为研究对象或者特征模式,能够以功能或者行为为单位,能够更好地解释恶意代码完成了什么操作。s.g
ü
lmez等通过提取提取代码样本的二进制指令操作码,生成图用以表示各种操作码,如add、or、jmp、or、sub之间的顺序关系和次数,作为机器学习模型的输入。
4.因此,目前大部分的研究都只关注主机行为或者网络行为的其中一方面,而结合两方面进行分析来识别恶意代码的研究较少。
技术实现要素:5.本发明的目的在于提供一种基于api调用和网络行为的僵尸软件检测方法,该方法基于lstm表示学习和weisfeiler lenhan图嵌入的方法,同时对代码的api调用行为和网络通信行为进行分析,实现僵尸软件检测;改进现有方法单独考虑恶意代码行为或流量特征的问题,使恶意代码检测更加准确。
6.实现本发明目的的技术方案是:一种基于api调用和网络行为的僵尸软件检测方法,包括主机行为模式提取层模
块、网络行为模式提取层模块和聚合训练模块;其中:1)主机行为模式提取层模块,包括文件解析识别子模块、静态fcg提取子模块、样本分发子模块和调用上下文提取子模块,具体如下:1-1)样本文件的解析和识别:文件解析识别子模块利用各类文件的签名数据库识别可执行程序的类型,对待分析样本使用特定的文件格式进行解析,得到其文件元信息、导入表和符号表;并通过熵值分析、特征码匹配的方法判断样本文件是否加密或加壳,若样本文件存在加密或加壳,则经过解密或脱壳后将样本文件送入样本分发子模块中,若样本文件未加密或加壳,则将样本文件直接送入样本分发子模块中;1-2)样本分发:样本分发子模块将步骤1)得到解析和识别结果,将不同平台的样本分发至不同环境的沙箱虚拟机中进行动态分析,并将样本文件分发至静态fcg提取子模块中进行静态分析;1-3)样本的静态分析和动态分析,具体如下:1-3-1)原始fcg调用图提取:对于所有类型的样本文件,静态fcg提取子模块从样本文件的入口地址开始,通过静态反汇编模块递归反汇编代码,结合步骤1-1)获得的导入表和符号表,生成调用图fcg,并基于n-gram生成fcg压缩图,对节点进行重标签;具体是:首先将调用的api以连续的三个调用为单位,用图中的一个节点来描述,然后对节点进行重标签,即对每个节点赋予一个新的整数标签,则基于n-gram的图中每个节点代表一个功能或一个功能的一部分;1-3-2)函数调用上下文的获取:根据步骤2)中样本分发子模块将可行性文件分发至对应的环境中执行,则调用上下文提取子模块进行动态获取函数调用的上下文,并对window中的api以及linux中的库函数进行hook或插桩,在样本运行时,由于注入了自定义的hook和插桩代码,则在待分析样本调用相关函数的时,记录调用现场的上下文环境;1-4)fcg调用图压缩以及节点重标签:将步骤1-3-1)和步骤1-3-2)得到的样本调用链和函数调用的上下文信息进行融合,得到样本的主机层行为模式,则基于m步长n-gram对fcg进行压缩和节点重标签,然后利用weisfeiler lehman算法进行模式图的图嵌入,即图的嵌入向量,记为vi,将其由大到小排序并截取前k个分量,k为超参数,通过交叉验证网格搜索方法进行调优,得到v_sort_ki,再将其转化为分布的形式di作为图向量;weisfeiler lehman算法将图中节点邻居的信息聚合到对应的节点,迭代的次数为超参数;2)网络行为模式提取层模块,包括网络行为监控和数据预处理子模块、lstm表示学习子模块,具体如下:网络行为收集、数据预处理,以及基于lstm的网络行为模式表示学习:根据样本分发子模块分发到不同环境的样本,在不同环境中运行样本,在运行样本的同时,网络行为监控和数据处理子模块先通过tshark或wireshark记录恶意代码的网络流量,通过cicflowmeter生成连接记录,并对得到的连接记录进行数据预处理,预处理步骤如下:2-1)将包含缺失值。异常值、编码错误的连接记录删除,然后将连接记录的属性离散化,对于连接记录中本身离散的属性进行类别化,对于连续的属性基于等宽、等频、1r、卡方检验方法划分区间进行离散化;2-2)对未处理的连接记录进行均值化聚合,得到聚合向量v,聚合向量v经过线性变换扩充维度为原来的两倍,该线性变换对应的矩阵是可训练的,变换后的向量为v’,分别
将前半部分和后半部分作为lstm的初始化h0和c0;2-3)对连接记录序列进行截断,只利用前n分钟的连接记录作为lstm神经网络的输入,将上述的初始化隐藏层和处理后的连接记录输入lstm神经网络,lstm网络部分的参数为:batch_size设置为128,epoch设置为3000,droupout设置为0.5.使用relu激活函数;3)聚合训练模块:利用主机行为模式提取层模块和网络行为模式提取层模块的输出数据进行聚合训练,根据步骤2)中的网络行为模式提取层模块对样本网络行为的属性和时序信息进行嵌入,学习到样本网络行为的表示;根据主机行为模式提取层模块通过样本api调用序列的向量表示样本行为;将主机行为模式提取层模块和网络行为模式提取层模块的输出进行拼接,结合api调用行为和网络通信行为得到样本的模式,将其作为全连接网络的输入,最后经过relu激活函数、softmax层,进一步引入非线性,并将输出转换为概率的形式,用于量化样本属于正常样本和恶意样本的可能性;4)将步骤3)得到的全连接分类网络,在模型应用时,将待测样本输入主机行为模式提取层模块和网络行为模式提取层模块中,并将两个模块的输出作为全连接分类网络的输入,最后得到分类结果。
7.本发明提供的一种基于api调用和网络行为的僵尸软件检测方法,该方法对于恶意代码的操作,结合网络通信行为和api调用,可以更加准确地捕捉恶意代码的异常,并对攻击者的攻击链提供更加完整的解释;基于n-gram的api行为表示,能够以代码的功能为单位,分析代码的行为,对代码的操作提供更好的解释,同时能够减小图的大小,提升模型效率;结合图和深度学习,能够充分利用图对结构信息的捕捉和深度学习强大的学习能力,提升模型的准确率。
附图说明
8.图1为本发明一种基于api调用和网络行为的僵尸软件检测方法的流程图;图2为一阶weisfeiler lehman算法的示意图。
具体实施方式
9.下面结合附图和实施例对本发明内容做进一步阐述,但不是对本发明的限定。
10.实施例:如图1所示,一种基于api调用和网络行为的僵尸软件检测方法,包括如下步骤:一种基于api调用和网络行为的僵尸软件检测方法,包括主机行为模式提取层模块、网络行为模式提取层模块和聚合训练模块;其中:1)主机行为模式提取层模块,包括文件解析识别子模块、静态fcg提取子模块、样本分发子模块和调用上下文提取子模块,具体如下:1-1)样本文件的解析和识别:文件解析识别子模块利用各类文件的签名数据库识别可执行程序的类型,对待分析样本使用特定的文件格式进行解析,得到其文件元信息、导入表和符号表;并通过熵值分析、特征码匹配的方法判断样本文件是否加密或加壳,若样本文件存在加密或加壳,则经过解密或脱壳后将样本文件送入样本分发子模块中,若样本文件未加密或加壳,则将样本文件直接送入样本分发子模块中;1-2)样本分发:样本分发子模块将步骤1)得到解析和识别结果,将不同平台的样
本分发至不同环境的沙箱虚拟机中进行动态分析,并将样本文件分发至静态fcg提取子模块中进行静态分析;1-3)样本的静态分析和动态分析,具体如下:1-3-1)原始fcg调用图提取:对于所有类型的样本文件,静态fcg提取子模块从样本文件的入口地址开始,通过静态反汇编模块递归反汇编代码,结合步骤1-1)获得的导入表和符号表,生成调用图fcg,并基于n-gram生成fcg压缩图,对节点进行重标签;具体是:首先将调用的api以连续的三个调用为单位,用图中的一个节点来描述,可重叠,例如f1, f2, f3, f4, f5为五个连续的调用,则f1f2f3,f2f3f4,f3f4f5分别对应一个节点,然后对节点进行重标签,即对每个节点赋予一个新的整数标签,例如,f1f2f3-》1,f2f3f4-》2,f3f4f5-》3,则基于n-gram的图中每个节点代表一个功能或一个功能的一部分,可以使用其他长度的序列,这里仅对方案进行描述,以长度为3的api序列为例。优点:与常用的以单个api调用作为节点进行图表示不同,以n-gram例如3-gram为单位进行节点表示,能够以功能为单位,更能解释代码进行了什么操作。例如,在windows中,regopenkey(),regsetkeyvalue(),regclosekey()这个序列对应了一次写注册表的操作。
11.1-3-2)函数调用上下文的获取:根据步骤2)中样本分发子模块将可行性文件分发至对应的环境中执行,则调用上下文提取子模块进行动态获取函数调用的上下文,并对window中的api以及linux中的库函数进行hook或插桩,在样本运行时,由于注入了自定义的hook和插桩代码,则在待分析样本调用相关函数的时,记录调用现场的上下文环境,例如参数、次数等;1-4)fcg调用图压缩以及节点重标签:将步骤1-3-1)和步骤1-3-2)得到的样本调用链和函数调用的上下文信息进行融合,得到样本的主机层行为模式,则基于m步长n-gram对fcg进行压缩和节点重标签,然后利用weisfeiler lehman算法进行模式图的图嵌入,即图的嵌入向量,记为vi,将其由大到小排序并截取前k个分量,k为超参数,通过交叉验证网格搜索方法进行调优,得到v_sort_ki,再将其转化为分布的形式di作为图向量;weisfeiler lehman算法将图中节点邻居的信息聚合到对应的节点,迭代的次数为超参数,迭代的次数越多,考虑的结构信息的范围就越大,一阶的weisfeiler lehman算法如图1所示;在本步骤中,首先对api调用链加入调用现场的信息,例如样本i第一次调用了一个函数f1,其参数为1和2,则其表示为f1_1_2,第二次调用函数f1时,其参数是1和3,则其表示变为f1_1_3,此时,该api在图中对应两个节点,分别对应两次调用。需要注意的是,有一些api的参数是操作完成的字节数,例如读写文件、拷贝内存、发送数据时使用的api,此时如果每次参数不同都产生一个新的结点的话,调用图会变得非常冗余,另外,也会导致过拟合的情况,此时需要对该参数类别化,例如字节数参数在为0、大于0、小于0时,分别对应一种情况。加入函数调用现场的信息之后,需要进一步将api调用链转化为n-gram的形式进行压缩,即将相邻的n个调用用一个节点来表示。本实例采用步长为1的3-gram方式,例如,f1、f2、 f3、f4、f5、f6为连续的6个调用,压缩后从6个节点变为4个节点,分别为f1f2f3、f2f3f4、f3f4f5、f4f5f6,实际应用中,可以采用其他n-gram形式,例如步长为2的4-gram形式,上面的调用序列压缩后就变成f1f2f3f4、f3f4f5f6这2个节点,本实例以前者为例。对图压缩完成之后,应用weisfeiler lehman算法,对图进行嵌入,得到主机层行为模式图的向量表示,用于后续的训练。
12.2)网络行为模式提取层模块,包括网络行为监控和数据预处理子模块、lstm表示学习子模块,具体如下:网络行为收集、数据预处理,以及基于lstm的网络行为模式表示学习:根据样本分发子模块分发到不同环境的样本,在不同环境中运行样本,在运行样本的同时,网络行为监控和数据处理子模块先通过tshark或wireshark记录恶意代码的网络流量,通过cicflowmeter生成连接记录,并对得到的连接记录进行数据预处理,预处理步骤如下:2-1)将包含缺失值。异常值、编码错误的连接记录删除,然后将连接记录的属性离散化,对于连接记录中本身离散的属性进行类别化,对于连续的属性基于等宽、等频、1r、卡方检验方法划分区间进行离散化;2-2)对未处理的连接记录进行均值化聚合,得到聚合向量v,聚合向量v经过线性变换扩充维度为原来的两倍,该线性变换对应的矩阵是可训练的,变换后的向量为v’,分别将前半部分和后半部分作为lstm的初始化h0和c0;2-3)对连接记录序列进行截断,只利用前n分钟的连接记录作为lstm神经网络的输入,将上述的初始化隐藏层和处理后的连接记录输入lstm神经网络,lstm网络部分的参数为:batch_size设置为128,epoch设置为3000,droupout设置为0.5.使用relu激活函数;3)聚合训练模块:利用主机行为模式提取层模块和网络行为模式提取层模块的输出数据进行聚合训练,根据步骤2)中的网络行为模式提取层模块对样本网络行为的属性和时序信息进行嵌入,学习到样本网络行为的表示;根据主机行为模式提取层模块通过样本api调用序列的向量表示样本行为;将主机行为模式提取层模块和网络行为模式提取层模块的输出进行拼接,结合api调用行为和网络通信行为得到样本的模式,将其作为全连接网络的输入,最后经过relu激活函数、softmax层,进一步引入非线性,并将输出转换为概率的形式,用于量化样本属于正常样本和恶意样本的可能性;具体是:经过relu激活后,输入softmax层,得到样本的预测分类之后,基于样本的真实样本的标签计算模型的交叉熵loss(二分类),其中relu激活函数、softmax层运算、交叉熵损失函数的数学形式分别如公式(1)、公式(2)、公式(3)所示,并且通过反向传播更新网络参数,这些参数包括三个部分:全连接层的参数、lstm结构的参数、以及用于聚合变量到初始化隐藏层向量的线性变换权重矩阵。
13.在训练过程中,需要注意一些特殊情况,如果一些样本在短于所设定的时间窗口n的很短的时间内完成运行,那么这种情况不需要进行步骤2)中的连接记录序列截断,直接分析其全生命周期的网络行为即可,对于没有网络活动的恶意代码,在对主机层行为模式的向量表示和网络层行为模式的向量表示进行拼接时,可以用零向量代替主机层行为模式的向量表示与调用图的嵌入向量进行拼接,进行后续的训练。
14.4)将步骤3)得到的全连接分类网络,在模型应用时,将待测样本输入主机行为模
式提取层模块和网络行为模式提取层模块中,并将两个模块的输出作为全连接分类网络的输入,最后得到分类结果。具体是:主机行为模式提取(包括解析文件格式和文件元信息、判断加密与解密、静态递归反汇编生成函数调用图、动态插桩获取调用现场信息、在调用图中加入调用现场信息、基于m步长n-gram压缩调用图并重标签节点、基于weisfeiler lehman算法的调用图嵌入);网络行为模式提取(包括连接记录获取,数据清洗、离散化、聚合向量生成,然后使用训练好的lstm对连接记录的时序信息进行嵌入),得到主机行为模式和网络行为模式的表示向量并拼接之后,输入训练好的全连接网络,进行前向运算输出分类结果。
技术特征:1.一种基于api调用和网络行为的僵尸软件检测方法,其特征在于,包括主机行为模式提取层模块、网络行为模式提取层模块和聚合训练模块;其中:1)主机行为模式提取层模块,包括文件解析识别子模块、静态fcg提取子模块、样本分发子模块和调用上下文提取子模块,具体如下:1-1)样本文件的解析和识别:文件解析识别子模块利用各类文件的签名数据库识别可执行程序的类型,对待分析样本使用特定的文件格式进行解析,得到其文件元信息、导入表和符号表;并通过熵值分析、特征码匹配的方法判断样本文件是否加密或加壳,若样本文件存在加密或加壳,则经过解密或脱壳后将样本文件送入样本分发子模块中,若样本文件未加密或加壳,则将样本文件直接送入样本分发子模块中;1-2)样本分发:样本分发子模块将步骤1)得到解析和识别结果,将不同平台的样本分发至不同环境的沙箱虚拟机中进行动态分析,并将样本文件分发至静态fcg提取子模块中进行静态分析;1-3)样本的静态分析和动态分析,具体如下:1-3-1)原始fcg调用图提取:对于所有类型的样本文件,静态fcg提取子模块从样本文件的入口地址开始,通过静态反汇编模块递归反汇编代码,结合步骤1-1)获得的导入表和符号表,生成调用图fcg,并基于n-gram生成fcg压缩图,对节点进行重标签;具体是:首先将调用的api以连续的三个调用为单位,用图中的一个节点来描述,然后对节点进行重标签,即对每个节点赋予一个新的整数标签,则基于n-gram的图中每个节点代表一个功能或一个功能的一部分;1-3-2)函数调用上下文的获取:根据步骤2)中样本分发子模块将可行性文件分发至对应的环境中执行,则调用上下文提取子模块进行动态获取函数调用的上下文,并对window中的api以及linux中的库函数进行hook或插桩,在样本运行时,由于注入了自定义的hook和插桩代码,则在待分析样本调用相关函数的时,记录调用现场的上下文环境;1-4)fcg调用图压缩以及节点重标签:将步骤1-3-1)和步骤1-3-2)得到的样本调用链和函数调用的上下文信息进行融合,得到样本的主机层行为模式,则基于m步长n-gram对fcg进行压缩和节点重标签,然后利用weisfeiler lehman算法进行模式图的图嵌入,即图的嵌入向量,记为v
i
,将其由大到小排序并截取前k个分量,k为超参数,通过交叉验证网格搜索方法进行调优,得到v_sort_k
i
,再将其转化为分布的形式d
i
作为图向量;weisfeiler lehman算法将图中节点邻居的信息聚合到对应的节点,迭代的次数为超参数;2)网络行为模式提取层模块,包括网络行为监控和数据预处理子模块、lstm表示学习子模块,具体如下:网络行为收集、数据预处理,以及基于lstm的网络行为模式表示学习:根据样本分发子模块分发到不同环境的样本,在不同环境中运行样本,在运行样本的同时,网络行为监控和数据处理子模块先通过tshark或wireshark记录恶意代码的网络流量,通过cicflowmeter生成连接记录,并对得到的连接记录进行数据预处理,预处理步骤如下:2-1)将包含缺失值异常值、编码错误的连接记录删除,然后将连接记录的属性离散化,对于连接记录中本身离散的属性进行类别化,对于连续的属性基于等宽、等频、1r、卡方检验方法划分区间进行离散化;2-2)对未处理的连接记录进行均值化聚合,得到聚合向量v,聚合向量v经过线性变换
扩充维度为原来的两倍,该线性变换对应的矩阵是可训练的,变换后的向量为v’,分别将前半部分和后半部分作为lstm的初始化h0和c0;2-3)对连接记录序列进行截断,只利用前n分钟的连接记录作为lstm神经网络的输入,将上述的初始化隐藏层和处理后的连接记录输入lstm神经网络,lstm网络部分的参数为:batch_size设置为128,epoch设置为3000,droupout设置为0.5.使用relu激活函数;3)聚合训练模块:利用主机行为模式提取层模块和网络行为模式提取层模块的输出数据进行聚合训练,根据步骤2)中的网络行为模式提取层模块对样本网络行为的属性和时序信息进行嵌入,学习到样本网络行为的表示;根据主机行为模式提取层模块通过样本api调用序列的向量表示样本行为;将主机行为模式提取层模块和网络行为模式提取层模块的输出进行拼接,结合api调用行为和网络通信行为得到样本的模式,将其作为全连接网络的输入,最后经过relu激活函数、softmax层,进一步引入非线性,并将输出转换为概率的形式,用于量化样本属于正常样本和恶意样本的可能性;4)将步骤3)得到的全连接分类网络,在模型应用时,将待测样本输入主机行为模式提取层模块和网络行为模式提取层模块中,并将两个模块的输出作为全连接分类网络的输入,最后得到分类结果。
技术总结本发明公开了一种基于API调用和网络行为的僵尸软件检测方法,该方法包括主机行为模式提取层模块、网络行为模式提取层模块和聚合训练模块;其中主机行为模式提取层模块包括文件解析识别子模块、静态FCG提取子模块、样本分发子模块和调用上下文提取子模块,依次进行样本文件的解析和识别、样本分发、样本的静态分析和动态分析、FCG调用图压缩以及节点重标签;网络行为模式提前层模块包括网络行为监控和数据预处理子模块、LSTM表示学习子模块,进行网络行为收集和数据预处理,训练LSTM表示学习子模块;聚合训练模块将主机行为模式提取层模块、网络行为模式提取层模块的输出数据进行聚合训练,输入全连接分类网络中,最后得到分类结果。结果。结果。
技术研发人员:黄永忠 罗勇成 秦韬
受保护的技术使用者:桂林电子科技大学
技术研发日:2022.05.16
技术公布日:2022/7/5