【恶意代码系列】基于操作码序列检测恶意代码

admin 2023年7月4日19:20:18评论11 views字数 3834阅读12分46秒阅读模式


 0


1

简介

使用操作码序列检测恶意代码属于静态检测病毒的一种方式。



0


2

什么是操作码序列

使用操作码序列检测恶意代码属于静态检测病毒的一种方式,所谓操作码是指程序运行时。

汇编程序是由一条条指令组成的。在x86 汇编语言里,一条汇编指令由一个助记符(操作码)0或多个操作数组成。操作码表示指令要执行的操作,例如 mov 表示移动数据。操作数表示指令使用的信息,比如寄存器或数据。操作数的类型有立即数、寄存器、内存地址三种。

【恶意代码系列】基于操作码序列检测恶意代码

Intel x86体系指令结构

具体的OPCODE各个指令含义在此不赘述,有很多文章讲;


Android病毒检测的操作码:

移动端Android的病毒中的dex部分,同样也能转化为操作码指令,解包.apk文件并反编译.dex文件,得到包含应用字节码的所有.smali文件,每一个.smali文件是一个类的源码文件。每一条Dalvik指令包含指令操作、指令操作数以及类型信息,在转换过程中,舍弃指令的操作数以及类型信息,然后在转换表中查找指令对应的序号,依次得到指令所对应的序列。


0


3

N-gram算法的主要思想

N-gram被首先用来进行文本训练处理病毒的操作码序列,进行样本判断分类。N-gram 算法是处理是自然语言处理领域的概念,是大词汇连续语音识别中常用的一种语言模型。

N-gram算法主要思想在于:第 n 个出现的词只与之前出现的词相关。这对于受限玻尔兹曼机重构训练中 t 时刻状态只与 t-1 时刻状态相关类似,并且善于分析序列问题。该模型基于这样一种假设,第 N 个词的出现只与前面 N-1 个词相关,而与其他任何词都不相关,整句的概率就是各个词出现概率的乘积。

早期的语音识别技术和统计语言模型与它密不可分。其切分算法的基本思想是将文本按字节流从第一个字符开始从左向右移动,每次移动一个字符单位,窗口中出现的 N 个字符即为一个 N-gram 单元。如果 N=1,就是以一个汉字做为一个语言单元 N=2,即为双汉字单元。例如,当 N=2 时,对于句子我们去北京看奥运会 N-gram切分结果为 “我们们去去北 ”北京京看看奥奥运运会”8 个语言单元。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到,常用的是二元的 Bi-Gram 和三元的 Tri-Gram

将一串数据转化为 N-gram,可以将该数据表示为向量形式,从而能更好地与其他数据串进行比较。另外,还可以将两组数据串的 N-gram 分布进行比较,从而判断这两组数据的相似度。对于一段二进制程序 P,它可以被表示为由 w 个字节 b 组成的一段序列,即 P=( b1,b2,b3,…,bw-1,bw),一段字节 N-gram 序列 g 被定义为一个可执行文件中一小段连续字节并且 g=( b1,b2, b3,…,bN-1,bN),其中 N 即为字节 N-gram 的长度。程序 P 可用 N-gram 表示为P=( g1,g2,g3,…,g w-N,g w-N+1)。类似于上面的中文语句,某个代码段的控制指令 P=('ADC','LDR','LDR', 'ADC', 'LDR', 'MOV','ADC', 'LDR', 'MOV') 可以产生的 3-gram 序列有如下个:g1=('ADC','LDR','LDR')g2=('LDR','LDR',ADC')g3 =('LDR', 'ADC', 'LDR')g4=('ADC', 'LDR', 'MOV')g5=('LDR', 'MOV','ADC')g6=('MOV','ADC', 'LDR')g7=('ADC', 'LDR', 'MOV')


0


4

使用N-gram算法检测病毒

该算法应用于恶意代码识别的想法最早源于ASSALEH等人提出的一种基于 ByteCode 的检测方法。2008 年,MOSKOVITCH等人提出利用 OpCode 代替ByteCode 的检测方法,更加科学且检测效果更好。


4.1  检测PE病毒

使用常用的 Bi-Gram对恶意代码的样本进行处理,将样本代码处理成一个个连续的单词{word1.word2 ,word3,word4, word5),经过BiGram处理后,变成特征值{[wordlword2][word2word3][word3,word4]word4,word5]].对所有样本处理后,获取所有的特征值,并对每个样本的出现的特征值数量进行统计,然后组成训练集,训练分类。

【恶意代码系列】基于操作码序列检测恶意代码

N-gram算法进行恶意代码分类的基本方法

相关研究成果

在操作码序列上不同学者提出了不同的方法,参考文献1提出使用文本分类方法对恶意代码分类,使用 Ngrams 方法并结合文档频率 (DF)  Fisher 得分进行特征选择,结合人工神经网络和支持向量机等算法训练分类模型。S参考文献2提出基于操作码 N-grams 特征的恶意代码检测框架,并在此基础上确定特征表示形式以及最佳的 N 值、特征选择算法以及机器学习算法。参考文献3提出通过静态提取勒索病毒样本的操作码序列,使用 N-grams 算法并结合 TF-IDF 进行特征选择,使用五种机器学习算法分类器进行分类,其中随机森林最佳,准确性达到 91.43 %。参考文献4提出通过IDA Pro 静态反汇编提取操作码序列,使用Ngrams 处理序列,而后输入到自关注卷积神经网络 SA-CNN,将输出串联接入双向自关注网络进行分类,平均准确率为 87.5%,平均召回率为 87.6%。参考文献5提出使用深度信念网络 (DBN) 作为自动编码器降低特征向量维数,使用 DBN 最后一个隐藏层输出N-grams 向量编码作为后续输入,实验结果表明其分类精度优于最近邻、支持向量机和决策树算法。

针对网页中被混淆过恶意代码:混淆是在恶意代码中常出现的技术。被混淆的恶意代码无法简单的使用 N-Gram 来提取特征。使用 V8 引擎将 JavaScript 代码编译成本地机器码(V8简介:Google Chrome 浏览器内置的 JavaScript脚本引擎,设计之初以高效地执行大型的 javascript 应用程序为目的。V8 的性能提升主要来自三个关键部分:快速属性访问、动态机器码生成和高效的垃圾收集。V8 引擎通过就是编译的方式将 JavaScript 代码编译成机器码,不会产生中间码,对编译后的机器码用 N-Gram 来提取特征可以有效地避免混淆的干扰。)


4.2  检测Android病毒

【恶意代码系列】基于操作码序列检测恶意代码

检测Android病毒同样也是将dex文件反汇编,进行分类学习,同时可以结合AndroidManifest.xml中的权限对个亿病毒进行分类。权限存在的方式是 01,因此处理该特征时仍然使用未收进的 N-gram 算法。由于敏感权限不会在一个APK 中反复申请,并不需要使用高纬度的滑动窗口,可以考虑使用滑动窗口N1建立 gram序列。


0


5

总结

虽然在操作码上使用 N-grams 方法取得了一定的效果,但是由于这种方法需要穷举所有的 N-grams,当特征数量大于样本数量时容易造成维度诅咒,需要结合特征选择方法使用;且鲁棒性和泛化能力不强,对新样本的分类效果较差,容易导致过拟合现象。


[1] Moskovitch R, Feher C, Tzachar N, et al. Unknown malcode detection using opcode representation [C]//European conference on intelligence and security informatics. Springer, Berlin, Heidelberg, 2008: 204-215.
[2] Shabtai A, Moskovitch R, Feher C, et al. Detecting unknown malicious code by applying classification techniques on opcode patterns[J]. Security Informatics, 2012, 1(1): 1-22.
[3] Zhang H, Xiao X, Mercaldo F, et al. Classification of ransomware families with machine learning based on N-gram of opcodes[J]. Future Generation Computer Systems, 2019, 90: 211-221.
[4] Xiao W , Zhang B , Xiao X , et al. Ransomware classification using patch-based CNN and self-attention network on embedded N-grams of opcodes[J]. Future Generation Computer Systems, 2019, 110(4).
[5] Yuxin D, Siyi Z. Malware detection based on deep learning algorithm[J]. Neural Computing and Applications, 2019, 31(2): 461-472.
       

原文始发于微信公众号(山石网科安全技术研究院):【恶意代码系列】基于操作码序列检测恶意代码

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月4日19:20:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【恶意代码系列】基于操作码序列检测恶意代码http://cn-sec.com/archives/1853130.html

发表评论

匿名网友 填写信息