USENIX
DeepReflect: Discovering Malicious Functionality through Binary Reconstruction
https://www.usenix.org/system/files/sec21fall-downing.pdf
源代码:https://github.com/evandowning/deepreflect
第一章
1.作者提出如果恶意软件分析工具能够识别恶意软件中的恶意功能,并且标记这些功能,那么分析人员的工作效率会大大提高
2. 作者研发的识别软件可以通过自动查找和识别静态恶意软件样本中的恶意行为来帮助恶意软件分析员进行分析,使用机器学习对恶意软件进行静态分析
第二章
1.作者提到在分析恶意软件时,恶意软件会具有大量的功能和函数,会极大的消耗分析人员的精力和注意力
2.作者提出了通过控制流图CFG和API调用来检测软件中的恶意行为
第三章
1.作者提出通过定位软件中的异常区块(roi,regions of interest)来定位恶意功能
2.对恶意功的定义来自MITRE框架(MITRE介绍https://www.cnblogs.com/beautiful-code/p/13705911.html)roi检测的目标是恶意软件中的恶意区域,之后标注roi区域中的函数和行为
3.神经网络中包含了一个编码器,En(x)表示对x进行编码,De(x)表示对x进行解码,通过
De(En(x))=x来对神经网络进行训练,目的是让神经网络学习总结x的分布,该神经网络在良性样本上进行训练后可以识别恶意软件,因为恶意软件中的调用与良性软件不同,所以只在良性样本上训练过的神经网络无法对恶意软件的行为进行解码。作者举了一个例子,输入为x,经过神经网络编码解码后重建的结果为xˆ(M(x)= xˆ),之后通过计算均方差MSE来判断是否为恶意软件,其公式为
其中xi为x的第i个特征
作者的设想是恶意软件和良性软件有一定的相似性,但是恶意软件会有一些独特的恶意行为,因此计算恶意软件中不同区域的LMSE进行比对
如果某块区域的均方差过大那么该区域就是可疑区域ROI,
作者提到这个方法和SHAP有相似性(SHAP介绍:https://zhuanlan.zhihu.com/p/83412330)
4.虽然恶意软件可以提取很多特征,但是作者使用的编码解码这一方式要求提取的特征必须能一一映射回原来的输入,作者使用了一个m*c的矩阵,即前m个区域中有c个特征来概括这m个区域中的行为,作者提到了根据恶意软件分析系统的区别,m和c的值可以不同。作者的设置为m为20k,c为18,因为95%的数据集有少于20k个基本块。作者提取的结构特征是每个块之后的数量和之间的数量,因为这个特征能体现网络通讯和控制加密的控制流图。作者提取了4类特征,算术特征,结构特征,指令传输特征以及API调用特征。作者提取的算术特征是基本运算,位运算,逻辑运算这三种运算方式出现的次数,运算次数可以作为行为识别的依据(比如加密运算里会有许多异或运算),作者提取的指令传输特征是每个指令中的堆栈操作、寄存器操作和端口操作指令的出现的次数。这些特征用于描述如何向函数输入参数以及接受返回值。作者提取的API调用特征是"filesystem", “registry”, “network”, “DLL”, “object”, “process”, “service”, “synchronization”, “system information”, and “time” 在每个基本块中出现的次数,这样可以更好地描述软件进行网络通讯和操作文件的行为。作者提出这样提取特征的理由有三,不受字符串扰乱影响,具有更高的精细度,且包含了API调用。
5.模型方面,使用unet(介绍https://blog.csdn.net/weixin_45074568/article/details/114901600),好处是神经网络M能跳过编码En和解码De之间的链接,跳过一部分特征的压缩让得到的x有更高的保真度,训练的目标是尽可能地让x接近原本的x
6.标注方面,只对软件样本的其中一部分进行标注。设x是从恶意软件中提取的特征,F是使用BinaryNinja从中提取的函数,对于每个函数fi,标注其中的可疑区域ROI记为qi,对于每个函数fi的可疑行为可以通过
来概括为集合D。作者指出实验结果表明这种算法具有最好的分类效果
7.为了兼容不同的函数,作者将提取的特征从18降为5,降维通过PCA实现,之后通过HDBSCAN(https://blog.csdn.net/zhixiting5325/article/details/90021024)将集合D聚类为集合C。其优点为可以识别非凸聚类且自动选择最佳的超参数
8.具体操作流程为如下,解包软件,提取静态特征,在良性样本上训练自编码器M,提取每个恶意软件的ROIS记为Rx,通过这些ROIS(qi)生成集合D,之后通过降为和聚类算法生成集合C,之后对经过聚类的集合C进行检测分析并进行标注即可。
9.数据来源于CNET,包含PE文件和MSI安装包,通过Uinpacker处理样本,通过SHA256来删除重复的样本,其中良性样本的定义是在virustotal上少于3个引擎报毒