# GNN+ASM2VEC_PLUS论文框架 检测准确率=ACC 精确度=PRE 恶意软件=malware 汇编代码=汇编指令 二进制软件=PE可执行程序 恶意软件=PE恶意软件 节点=basicblock 控制流程图=CFG 图神经网络=GNN 使用图神经网络分类良性、恶意软件的控制流程图 基于汇编指令的检测技术 ## 摘要 ## 文献引用 1. https://www.sonicwall.com/resources/white-papers/2022-sonicwall-cyber-threat-report/ 2. https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-110a 3. *The rise of machine learning for detection and classifification of malware:Research developments, trends and challenges 4. Konopisky, D., 10 2018. Malware Detection in Application Based on Presence of Computer Generated Strings. 5. Lee, J., Im, C., Jeong, H., 2011. A study of malware detection and classifification by comparing extracted strings. ICUIMC 11. In: Proceedings of the 5th International Conference on Ubiquitous Information Management and Communication. ACM,New York, NY, USA, p. 75, https://doi.org/10.1145/1968613.1968704. 175:4. 6. Ye, Y., Chen, L., Wang, D., Li, T., Jiang, Q., Zhao, M., Nov 2008a. Sbmds: an interpretable string based malware detection system using svm ensemble with bagging. J. Comput. Virol. 5 (4), 283, https://doi.org/10.1007/s11416-_008-_0108-_y. 7. Sami, A., Yadegari, B., Rahimi, H., Peiravian, N., Hashemi, S., Hamze, A., 2010.Malware detection based on mining api calls. In: Proceedings of the 2010 ACMSymposium on Applied Computing. SAC 10. ACM, New York, NY, USA, pp.1020–1025, https://doi.org/10.1145/1774088.1774303. 8. Ding, Y., Yuan, X., Tang, K., Xiao, X., Zhang, Y., 2013. A fast malware detection algorithm based on objective-oriented association mining. Comput. Secur. 39,315–324. http://www.sciencedirect.com/science/article/pii/S0167404813001259. 9. Ahmadi, M., Ulyanov, D., Semenov, S., Trofifimov, M., Giacinto, G., 2016. Novel feature extraction, selection and fusion for effffective malware family classifification. CODASPY 16. In: Proceedings of the Sixth ACM Conference on Data and Application Security and Privacy. ACM, New York, NY, USA, pp. 183–194, https://doi.org/10.1145/2857705.2857713. 10. Lyda, R., Hamrock, J., March 2007. Using entropy analysis to fifind encrypted and packed malware. IEEE Security Privacy 5 (2), 40–45. 11. Sorokin, I., Jun 2011. Comparing fifiles using structural entropy. J. Comput. Virol. 7 (4), 259, https://doi.org/10.1007/s11416-_011-_0153-_9. 12. Baysa, D., Low, R.M., Stamp, M., Nov 2013. Structural entropy and metamorphic malware. Journal of Computer Virology and Hacking Techniques 9 (4), 179–192, https://doi.org/10.1007/s11416-_013-_0185-_4. 13. Wojnowicz, M., Chisholm, G., Wolffff, M., Zhao, X., 2016. Wavelet decomposition of software entropy reveals symptoms of malicious code. Journal of Innovation in Digital Ecosystems. 3 (2), 130–140. http://www.sciencedirect.com/science/article/ pii/S2352664516300220. 14. Nataraj, L., Karthikeyan, S., Jacob, G., Manjunath, B.S., 2011. Malware images: visualization and automatic classifification. VizSec 11. In: Proceedings of the 8th International Symposium on Visualization for Cyber Security. ACM, New York, NY,USA, https://doi.org/10.1145/2016904.2016908. pp. 4:14:7. 15. Kancherla, K., Mukkamala, S., April 2013. Image visualization based malware detection. In: 2013 IEEE Symposium on Computational Intelligence in Cyber Security (CICS),pp. 40–44. 16. Raffff, E., Barker, J., Sylvester, J., Brandon, R., Catanzaro, B., Nicholas, C.K., 2018a.Malware detection by eating a whole EXE. In: The Workshops of the theThirty-Second AAAI Conference on Artifificial Intelligence, New Orleans, Louisiana,USA, February 2-7, 2018, pp. 268–276. https://aaai.org/ocs/index.php/WS/AAAIW18/paper/view/16422. 17. Classifying Sequences of Extreme Length with Constant Memory Applied to Malware Detection (a.k.a., MalConv2) 18. 19. **Learning to Evade Static PE Machine Learning Malware Models via Reinforcement Learning**. 20. Black-Box Attacks against RNN based Malware Detection Algorithms 21. MAB-Malware: A Reinforcement Learning Framework for Blackbox Generation of Adversarial Malware 22. **Semantic-preserving Reinforcement Learning Attack Against Graph Neural Networks for Malware Detection**. *Lan Zhang, Peng Liu, Yoon-Ho Choi*.TDSC 2022. 23. **Functionality-preserving Black-box Optimization of Adversarial Windows Malware**. 24. Adversarial Deep Learning for Robust Detection of Binary Encoded Malware 25. *N-gram MalGAN: Evading machine learning detection via feature n-gram 26. Binary Black-box Evasion Attacks Against Deep Learning-based Static Malware Detectors with Adversarial Byte-Level Language Model 27. Santos, I., Brezo, F., Ugarte-Pedrero, X., Bringas, P.G., 2013. Opcode sequences as representation of executables for data-mining-based unknown malware detection. Inf. Sci. 231, 64–82 data Mining for Information Security, http://www.sciencedirect.com/science/article/pii/S0020025511004336. 28. Shabtai, A., Moskovitch, R., Feher, C., Dolev, S., Elovici, Y., Feb, 2012. Detecting unknown malicious code by applying classifification techniques on opcode patterns. Security Informatics 1 (1), 1, https://doi.org/10.1186/2190-_8532-_1-_1. 29. Hu, X., Shin, K.G., Bhatkar, S., Griffiffiffin, K., 2013. Mutantx-s: scalable malware clustering based on static features. In: Presented as Part of the 2013 USENIX Annual Technical Conference (USENIX ATC 13). USENIX, San Jose, CA, pp. 187–198. https://www.usenix.org/conference/atc13/technical-_sessions/presentation/hu. 30. Yuxin, D., Siyi, Z., Feb 2019. Malware detection based on deep learning algorithm.Neural Comput. Appl. 31 (2), 461–472, https://doi.org/10.1007/s00521-_017-_3077-_6. 31. Kinable, J., Kostakis, O., Nov 2011. Malware classifification based on call graph clustering. J. Comput. Virol. 7 (4), 233–245, https://doi.org/10.1007/s11416-_011-_0151-_y. 32. Hassen, M., Chan, P.K., 2017. Scalable function call graph-based malware classifification.CODASPY 17. In: Proceedings of the Seventh ACM on Conference on Data and Application Security and Privacy. ACM, New York, NY, USA, pp. 239–248, https://doi.org/10.1145/3029806.3029824. 33. Eskandari, M., Hashemi, S., 2011. Metamorphic malware detection using control flflow graph mining. 06 International Journal of Computer Science and Network Security 11 (12). 34. Faruki, P., Laxmi, V., Gaur, M.S., Vinod, P., 2012. Mining control flflow graph as api call-grams to detect portable executable malware. SIN 12. In: Proceedings of the Fifth International Conference on Security of Information and Networks. ACM, New York, NY, USA, pp. 130–137, https://doi.org/10.1145/2388576.2388594. 35. Ding S H H, Fung B C M, Charland P. Asm2vec: Boosting static representation robustness for binary clone search against code obfuscation and compiler optimization[C]//2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019: 472-489. 36. Semantics-preserving Reinforcement Learning Attack Against Graph Neural Networks for Malware Detection ## 1.Introduction ### ① 背景: (我们要解决的是PE软件的恶意软件检测技术) ​ 当前社会,恶意软件数量日益增加,根据美国著名安全公司SonicWall提供的报告【1】显示,2022年全球恶意软件检测量同比增长2%,达到55亿次,其中从未见过的变种激增5%。 ​ 2021年,美国网络安全与基础设施安全局(cisa)发布了一项警报【2】,称在被利用的 Pulse Secure 设备上发现了十多个恶意软件样本,这些样本经过修改与伪装,已能绕过常见的商业恶意软件检测器防御,因此对于恶意软件检测技术仍然是学术界比较热门的话题。 ​ 恶意软件检测技术以是否实际执行程序为界限,学术界通常将其分为动态检测与静态检测。动态检测技术通常需要构建沙盒来运行目标软件,并记录其动态运行行为,这要花费大量的时间和计算成本。然而,静态检测技术只检测目标软件的静态特征,花费的时间更少,效率更高。【3】因此,静态检测技术仍然是当前反病毒技术的一个重要主题。 ​ 在静态检测技术中,根据是否分析软件的代码部分,可以分为基于汇编指令的检测器与非汇编指令的检测器。在针对非汇编指令类型的检测任务中,往往不需要反汇编程序的代码段部分,而是对程序的属性、结构做分析与判断。该类型主流的检测技术包括基于规则的匹配【4-6】、API function calls可执行文件引用链接库【7-9】、壳加密检测【10-13】、 *Malware representation as a gray scale image*转化为灰度图的检测【9,14,15】、整体RAW BYTES检测【16、17】等。这些类型的检测针对性强,但不分析可执行程序的执行流程逻辑, 难以获得程序执行时的细节逻辑信息。然而,研究【18】中总结了可执行程序不同部分与结构对恶意软件检测任务的重要程度,由于在软件的源码被编译为可执行程序后,汇编指令序列是实际运行逻辑的载体,因此是最重要的恶意性判断依据。 ​ 此外,由于可执行程序自身的复杂性,为了确保程序功能完整性,现有的大量对抗性软件生成技术【19-26】很难对代码段做出有效的改变,基于汇编指令的检测技术受对抗技术影响较小,所以这类检测技术仍然是当前恶意软件检测领域的重中之重。【27-34】等都是较为经典的相关工作,由于机器学习可以有效的处理大量的数据,随着机器学习的发展,使用机器学习和深度学习来分析汇编指令并进行检测是当前的热点话题。 ​ 若要使用机器学习技术对目标可执行程序的汇编指令序列做检测,形成有效的汇编指令表征技术是先决条件。【27-30、35】等工作已经做出了相关的尝试工作,引入NLP领域的相关编码与embedding到汇编指令层面,并且取得了不错的效果。其中研究【27-30】使用N-gram的方法将汇编指令映射至离散的空间,研究ASM2VEC【35】提出了一种能将汇编指令映射至连续空间的方法,完成了从离散空间至连续空间的跨越。然而在这些工作中仍然存在着表征不准确、训练效率低、检测精确度低等主要缺陷。在我们的工作中试图提供一种新型的ASM2VEC方法,取名为ASM2VEC_PLUS,解决传统ASM2VEC方法不能准确表征常数部分的缺陷,将汇编指令映射至连续空间,并且使得任意汇编指令都只存在唯一的映射。 ​ 此外,在我们提出的检测方法中,我们实际运用到的检测目标为从软件样本中提取的表示程序控制流程的控制流程图,并使用图神经网络来分类良性与恶意软件的控制流程图来完成检测任务。在以往的工作中【33、34、36】已经证实了。我们使用工具提取了恶意样本与良性样本的控制流程图,在载入到图神经网络中进行训练与分类过程中,我们将使用ASM2VEC_PLUS方法更准确的表征图结点basicblock。实验表明,在连续空间中,我们的方法能够在确保较高检测精确度的情况下以更低维的输入进行模型训练,以节省训练时间与成本,满足实际网络空间中工业界检测器实时更新升级的需求。 ### ② 遵循前提: ​ 在本工作中,我们的检测目标为Windows下的32位的PE恶意软件,我们的实验验证了对该类型可执行软件的恶意软件检测任务的可行性。我们同时很有信心我们的方法具有可移植性,在面对其他类型的可执行软件时也能有同样的效果。 ### ③ 解决问题: ​ 总而言之,我们提出了一种训练效率更高、检测精确度的恶意软件检测方法,我们做出的贡献可以归纳为: ### ④ 贡献: * 提出了一种新的ASM2VEC方案,将汇编指令映射至连续空间。Steven等人【】提出的ASM2VEC技术难以准确表达汇编指令的常数部分信息,我们提出的ASM2VEC_PLUS方案解决了传统方法不能准确表示常数部分的缺点,**将任意汇编指令映射至连续空间,并且这种映射是唯一映射**。 - 提供了一个更高检测精确度的基于控制流程图的恶意软件检测方法。我们将ASM2VEC_PLUS应用到了恶意软件检测任务中,我们使用了图神经网络来分类PE可执行程序的控制流程图,并将节点信息使用ASM2VEC_PLUS来进行表征,映射至连续空间。实验显示,我们的GCN+ASM2VEC_PLUS检测组合在大部分情况下检测acc与泛化性优于其他检测组合。 - 新提供的恶意软件检测方法可降低训练成本。实验中我们发现,GCN+ASM2VEC_PLUS的组合在较低维的输入下仍然能保持较高的检测精确度,这可以降低模型复杂度,并节省大规模样本的训练时间与训练成本。 ## 2.PRELIMINARY 本文中的重要符号和符号。 | 符号 | 描述 | | --------------- | ------------------------------------------------------------ | | e | PE类型可执行程序 | | $G$ | 表示整张图 | | $V_i$ | 表示第$i$个节点 。 | | $X_i$ | 表示第 $i$个节点的特征向量。 | | $h_i^{(l)}$ | 表示第 $i$个节点在网络第 $l$ 层的表示。 | | $N_i$ | 表示节点 $i$ 的邻居节点集合。 | | V | 节点集合, | | $h_{N_i}^{(l)}$ | 表示节点 $i$ 的邻居节点在第 $l$ 层的表示。 | | $W^{(l)}$ | 表示第 $l$ 层的权重矩阵。 | | $b^{(l)}$ | 表示第 $l$ 层的偏置向量。 | | $\sigma$ | 表示激活函数,常见的包括 ReLU、sigmoid 和 tanh 等。 | | $f$ | 表示节点表征函数,用于将节点的特征向量和邻居节点的表示合并成一个新的节点表示。 | | | | | h_g | 整图表征 | | ye | 原始标签 | | hat{y}e∈[0*,*1] | PE可执行软件e的预测值 | | A_I | Instruction level Assembly code dataset | | A_F | function level Assembly code dataset | ①问题定义:我们的任务是在接触不到源码的情况下,针对PE类型可执行文件的黑盒检测。具体而言,给定样本集D={e1,e2,....,eL},提取控制流程图集合G={ed1,ed2,...}。使用表征方法f将G的节点basicblock映射至离散或连续的向量空间,并训练GNN以完成对控制流程图G的二分类任务,其中预测分数是介于[0,1]之间的连续值,以0.5为阈值区分恶意/良性样本,分数越靠近0良性程度越高,分数越靠近1恶意程度越高。我们期望使用我们的表征方法ASM2VEC_PLUS结合GNN技术能实现一个高训练效率和高acc率的检测器。 ②控制流程图:`(改)控制流图(CFG)是一个有向图,其中节点表示基本块,边表示控制流路径。基本块是具有入口点(执行的第一指令)和退出点(执行的最后一条指令)的程序指令的线性序列。CFG是在程序执行过程中可以遍历的所有路径的表示,值得注意的是CFG的每个节点是程序的basicblock,在basicblock中没有任何其他逻辑分支,只在最后一条指令中执行跳转任务。`单个控制流程图可用g={N,E}来表示。 下图中即为提取的某个真实样本的控制流程图。 ``` 插入图 ``` ③GNN:在近年来的深度学习研究中,图神经网络(Graph Neural Networks, GNN)已经成为热门的研究方向,被广泛应用于图像分类、节点分类、图像生成、图像分割等各种任务,当然也适用于针对控制流程图做二分类任务。在GNN的发展历程中,GCN、GAT和DGCNN等模型是比较经典和常用的模型。以GCN为例,在做二分类任务时,其具体步骤为: $$ h_i^{(l+1)} = σ(∑_{j∈N_i} (1/c_{ij}) * h_j^{(l)} * W^{(l)}) \tag{1} $$ 步骤1:通过公式1计算节点的第 $l$ 层表征的更新过程,其中,$\sigma$ 表示激活函数,通常使用 ReLU 或者 tanh 等函数。 步骤2:通过公式2计算整图的表征。这里的 $L$ 表示网络的最后一层,"POOL" 表示整个图的池化操作,用于将所有节点的表征向量进行汇聚得到整张图的表征向量。 步骤3:结果预测。在使用公式(1)与公式(2)得到整图表征向量后,将整图表征输入到一个全连接层中进行最后的二进制结果预测,并使用softmax函数将预测结果范围控制在[0,1]。 $$ h_G = POOL({h_1^{(L)}, h_2^{(L)}, ..., h_N^{(L)}})\tag{2} $$ $$ \\y_e = \text{softmax}(\mathbf{W} \mathbf{h}_G^{(L)} + \mathbf{b})\tag{3} $$ GAT通过注意力机制来加权聚合邻居节点信息,可以灵活地捕捉节点之间的非线性关系和局部结构信息。相比传统的图卷积网络,GAT在处理复杂的图结构数据时具有更强的建模能力。DGCNN则是通过基于k-NN图的动态邻接矩阵来建模点云数据的局部结构信息,可以灵活地捕捉点云数据的非线性关系和局部结构信息。 ## 3.RELATED WORK 为更好的理解本文提出的创新技术,以下内容作为预备知识是需要最先了解的。 ### ① 离散空间汇编指令表征技术 汇编指令的表征技术是基于汇编指令的人工智能检测技术的基础,只有汇编指令的语义被合理的映射至一个向量表示作为人工智能分类模型的输入,才能开始下一步训练工作。与NLP的发展历程相似,在发展初期,研究者们通常将汇编指令映射至一个离散的空间。下面将介绍几个典型的汇编指令的表征方法: 研究【27-30】已经使用到了N-GRAM方法来完成基于opcode的恶意软件检测工作。 - opcode frequency/1-gram:XX等人提出的【】是基于恶意软件代码段汇编指令的检测技术中使用到的对汇编指令的表征技术。其表征方法过程是,步骤1:只考虑汇编指令的操作符而不考虑操作数。在样本库中提取大量样本汇编指令序列的操作符集合,所有不同的操作符将被组成为一份指令字典。例如现有指令序列“push ebp”,"mov eax,0x1",“ret”,则此时的生成的字典为“push、mov、ret”,步骤2:根据字典信息,使用one-hot编码来表征汇编指令,例如汇编指令“push ebp”的one-hot编码即为[1,0,0]。 最后在把已经编码好的one-hot序列序列输入到设计好的模型中进行训练。 - n-gram:Fuyong等人提出的基于n-gram的检测方法也是基于恶意软件代码段汇编指令的检测技术中使用到的对汇编指令的表征技术。该方法在word_frequency的基础上进行改进,以2-gram为例,其表征方法过程是,步骤1:在样本库中提取大量样本汇编指令序列的操作符序列,操作符序列中,前后相连的两个操作符组成一个组合,所有不同的组合生成字典。例如现有指令序列“push ebp”,"mov eax,0x1",“sub eax,0x1”,“ret”,则此时生成的字典为“push mov、mov sub、sub ret”。步骤2:根据字典信息,使用one-hot编码来表征汇编指令,例如汇编指令序列“push ebp“,”mov eax,0x1”的one-hot编码即为[1,0,0]。最后在把已经编码好的one-hot序列序列输入到设计好的模型中进行训练。 - malconv Edward Raff【16】等人提出的MALCONV技术旨在用最少的预处理工作去检测PE恶意软件。对于被变异好的可执行程序,其是由大量的字节构成的,而每个字节处在的范围是0~0xFF,也就是十进制的0~255,因此研究者使用长度为256的one-hot向量来表示样本每个字节的编码作为输入。malconv技术的优点是不需要提取可执行程序样本的其他任何诸如特定属性、代码段、数据段等的信息,其只需将整个程序的字节序列喂入设计好的模型中进行训练。此外,由于汇编指令本质上也是由字节构成的,因此malconv也可以表征代码段的汇编指令,我们也将malconv当做一组对照实验。 显而易见的是,离散空间汇编指令表征技术在探索汇编指令的抽象表示方面仍然停留在较为基础的阶段。 ### ② 连续空间汇编指令表征技术:ASM2VEC技术 ​ 据我们所知,Steven等人提出的ASM2VEC技术【35】,是最著名的完整搭建将汇编指令映射至连续空间体系的研究方法。ASM2VEC技术基于WORD2VEC技术,在映射步骤上学习了WORD2VEC的主要思想。ASM2VEC技术的主要流程可以归纳为: 步骤1:ASM2VEC的样本输入即是真实二进制软件代码段中提取出的汇编指令序列,在预处理中,也需生成一份汇编指令的字典。字典生成方法大致为——将汇编指令序列中的每一条指令的操作符与操作数部分进行分解,假设操作数只有一个,则分解结束,假设操作数有两个成员组成,则需要进一步分解操作数的两部分,而如果该条指令只有操作符部分,则不需要分解。分解出来的这几个部分被称为token,所有不同的tokens组成了字典称之为token字典。值得注意的是,由于常数项的可能性太多,因此在ASM2VEC中将所有常数项被替换为"CONST"。举个例子,假设现有汇编指令序列 “push ebp”,"mov eax,0x1","ret",则此时提取到的token为“push、ebp、mov、eax、CONST、ret”。 步骤2:在得到tokens字典后,即可对汇编指令进行编码。每条指令的编码有操作数和操作符两部分组成。第一部分是操作符部分,由操作符在字典中的位置生成的one-hot向量。第二部分是操作数部分,操作数为空时,则用与操作符向量同等长度的0向量表示,当操作数只有一个成员的情况下,则该部分的向量即为该操作数在字典中的one-hot向量表示,当操作数有两个成员的情况下,则该部分的向量为两个成员对应的one-hot向量的和的平均数表示,见图X。指令最后的向量表示为操作符部分向量与操作数部分向量相连接而成,为一个定长向量。 步骤3:此时生成的向量还只是停留在离散空间的向量。在这一步与word2vec类似,将已经编码好的汇编指令初始向量序列输入到CBOW模型或PVDM模型进行训练,训练结束时,可以得到模型中的embedding层,使用embedding层即可将汇编指令映射至连续空间。 ​ 即使ASM2VEC技术提出了将汇编指令映射至连续空间的可行方案,但ASM2VEC在映射过程中,带有常数项的指令是不可反向映射的。这是由于在生成tokens字典时,如果完整记录常数项会使得字典长度过于庞大,导致训练效率降低,因此所有的常数项都由“CONST”代替。举个例子ASM2VEC在对指令“mov eax,0x1”与“mov eax,0x4213141”进行映射时,他们在连续空间中的映射结果是一样的,因为他们都被当做"mov eax,CONST"处理,初始向量是一样的,因此embedding向量也是一样的。这将导致在检测过程中,对常数项的指令不能合理理解的情况,毕竟有些时候,“mov eax,0x1”与“mov eax,0x4213141”所代表的含义是很不一样的。这项缺陷也是受到word2vec思想的限制,没有能够处理数量庞大的CONST tokens。我们提出的ASM2VEC_Plus方法有效的解决了这个问题,具体过程在章节4 METHOD中提供。 由于汇编指令承载的语义特殊,现有表征技术只停留在汇编指令的字符串层面,设计一个较为简单的对字符串的编码机制,至今没有工作返回汇编指令的二进制表示,从底层汇编指令的组成规则来设计一套特定的编码方法。ASM2VEC已经做到了准确表征大部分汇编指令的目的,但是对于存在大量常数项的汇编指令来说,仍然有改进的空间。 ### ③ GNN+节点表征检测技术 为什么不使用函数掉用图? 在针对恶意软件的检测任务中,当检测目标是可执行文件的控制流程图时,GNN就发挥了作用。 图神经网络(GNN),可对控制流程图执行分类任务。我们可以把图中的每一个节点 V 当作个体对象,而每一条边 E 当作个体与个体间的某种联系,所有节点组成的关系网就是最后的图 U。 * GCN:GCN即图卷积神经网络 【Semi-Supervised Classification with Graph Convolutional Networks(ICLR2017)】 * GAT: 【Graph Attention Networks】 * DGCNN【】: 【36】等工作中,已经使用到了图神经网络检测技术来检测目标软件的控制流程图CFG,以此来判断软件恶意性,并且取得了良好的检测效果。与其他直接使用代码段汇编指令序列的检测不同,控制流程图注重程序的内在逻辑,因此对程序执行的动态逻辑的判断要比其他方法更加准确。【看看有没有论文依据】 ### ④ 挑战 我们在回顾一下传统方法存在的问题 ① ② ③ 我们的解决方法 ## 4.METHOD 我们的创新方法主要分为两个部分 ① ASM2VEC_PLUS与 ② GNN + ASM2VEC_PLUS 《补充ASM2VEC_PLUS图》 ### ① ASM2VEC_PLUS ​ asm2vec完成了将汇编代码映射至连续空间的目的。然而其仍然存在无法表示任意汇编代码,特别是含有常数项汇编指令的问题。我们的ASM2VEC_PLUS方法解决了这一方法,使得任意一个汇编代码都有唯一的向量映射。我们将以32位程序为例对ASM2VEC_PLUS进行描述。 具体过程如下: 1.初始编码:任意32位汇编指令由prefix、opcode、ModRM、SIB、displacement、immediate六个部分组成,长度为1-16个字节。其中opcode是必选项,其他是可选项。每个部分的初始向量编码由各部分的逻辑原理单独设计,其中opcode、prefix、ModRM、SIB是离散的,且数据量小,因此使用类似于one-hot的编码方式来生成。displacement、immediate两个部分是整型数据,但数据量较大,因此使用二进制分割方式生成向量来进行表征。 我们使用向量o、p、m、s、d、i分别代表六个部分的向量,下面介绍具体规则,我们将聚焦于汇编指令的结构组成: prefix—prefix为汇编指令的前缀部分,由4个字节组成,每个字节分别代表Lock prefix、ES segment register、oprand-size override、Address-size override四个离散部分。其中Lock prefix只有F0H与none两种情况,ES segment register有2EH、36H、3EH、26H、64H、65H和none7种情况,oprand-size override只有66H与none两种情况,Address-size override只有67H与none两种情况。因此lock prefix可用一位长度的向量[0]与[1]表示两种情况,oprand-size override和Address-size override同理。ES segment register由6位组成,使用[1,0,0,0,0,0]、[0,1,0,0,0,0]、[0,0,1,0,0,0]、[0,0,0,1,0,0]、[0,0,0,0,1,0]、[0,0,0,0,0,1]、[0,0,0,0,0,0]来分别表示出现的7种情况。最后将四部分生成的初始向量相连接,生成长度为9的p向量。 opcode—32位的opcode由单字节表示,拥有256种可能的。因此可以使用256位的one-hot向量来表示opcode。例如指令ret的opcode为0xC3,十进制数是195,则ret的初始向量表示是将这个256位长度的向量下标为194的位置置1,其他置0。 ModRM与SIB—ModRM与SIB的构造是一致的,都分别由一个8bit的字节构成,并且这个8bit被分成了2bit、3bit、3bit三个部分,每个部分存在3、8、8种的不同可能,因此可以分别用长度为3、8、8的one-hot向量来表示这三个部分的所有情况,最终将三个部分向量首尾相连,生成长度为19的向量。 displacement与immediate—displacement与immediate是整形数据,使用二进制分割方式生成向量来进行表征,例如十进制4的二进制为“100”,则其表征即为[1,0,0]。由于32位汇编指令的常数项最长长度为32位即四字节,因此可以用两个32位长度的向量来进行表示。 此外,我们还需要有一个部分来传递各部分是否出现在指令当中的信息,prefix、ModRM、SIB、displacement、immed$$372iate为可选项,因此需要一个长度为5的向量来表示这些成员的使用情况。 最后,我们把长度为5位的可选信息向量、长度为9位的prefix初始向量、长度为256位的opcode初始向量、长度为19的ModRM初始向量、长度为19的SIB初始向量、长度为32位的displacement初始向量与长度为32位的immediate初始向量首尾相连,得到最终长度为5+9+256+19+19+32+32=372的初始向量来表示单条汇编指令。 以实际的汇编代码“**lock add dword ptr es:[eax+ecx\*8+0x11223344], 0x12345678**”为例,该汇编指令的16进制表示为“26 66 67 F0 81 84 C8 44 33 22 11 78 56 34 12 ”。其中,“26 66 67 F0”这 4 个字节是 prefix,分别表示 ES segment register、 operand-size override、 address-size override、Lock prefix,生成向量【】。"C7"表示opcode,生成向量【】。”84“表示modRM,生成向量【】。”C8“表示SIB,生成向量【】。”44 33 22 11“表示displacement,生成向量【】。 ”78 56 32 112 “表示immediate, 生成向量【】。 其在经过 编码后, 得到初始向量【】 > 插入图(汇编代码组成) 在生成初始编码的过程中,与asm2vec不同的是,我们的方法是基于特定规则进行转化的,不需要生成字典,省略了额外的准备步骤和存储字典的空间。此外,带有常数项的汇编指令也能对应生成唯一的初始向量,在映射到连续空间时,任意汇编指令都能拥有唯一的连续空间向量。 2.映射至连续空间:在得到初始向量之后,使用PVDM模型进行预测中心词任务的训练,以得到embedding网络模型。 ​ 在该过程中,与NLP类似,我们提取了真实样本中的XXX个函数,共10000条汇编指令作为语料库,此时单条汇编指令相当于NLP中的word,函数相当于NLP中的段。使用初始编码方法将这些指令通过规则转化为定长(长度为367)的初始向量。确定窗口大小为1,将语料库中的指令的初始向量按照运行顺序输入到PVDM中进行训练。由于PVDM中在训练过程中还需要一个段向量,我们将每条指令所在函数的所有指令向量平均和作为这个段向量输入到网络中。在训练结束后,可得到单条指令的embedding层,作为汇编指令embedding模型,还有一个针对函数的embedding层,作为汇编函数的embedding模型。他们分别可以将单条指令和函数映射至连续空间。研究【】中已验证了PVDM在asm2vec工作上的可行性。 > PVDM的插图 ### ② GNN + ASM2VEC_PLUS ​ 章节2.PRELIMINARY中已介绍了图神经网络在恶意软件检测任务上的应用。我们的主要创新点集中在对GNN节点的表征上,我们期望使用更加精确的表征方式来表征GNN中每个节点的真实含义。我们知道,在基于控制流程图进行恶意软件检测任务时,GNN的节点即为basicblock,由一组只有末尾是跳转指令的指令序列组成,也可以被认为是只有一个跳转指令的函数。此时我们使用步骤①当中生成的汇编函数的embedding模型来对GNN的所有basicblock节点做表征,本质上其实就是basicblock中每条汇编指令embedding向量的平均值。 ​ 经过节点表征后的图就可以输入到GNN模型中进行训练。我们选用了常见的GNN模型,如GCN、GAT和DGCNN,我们期望验证ASM2VEC_PLUS表征方法在GNN检测模型任务上的普遍高效性。 > 《补充GCN + ASM2VEC_PLUS图》 > > 《补充算法流程图》 ### ## 5.EVALUATION ### 数据集准备: ​ 在数据集准备工作方面,我们从开源网站virusshare/virustotal【】上收集了XXX个恶意样本与XXX个良性样本。我们对数据集做了以下预处理: - 样本清洗:不少研究中【】都发现加过壳的可执行程序样本会对恶意软件检测任务产生负面影响,因此我们剔除了样本中被检测到的加壳程序,lief【】可以协助读取可执行程序结构属性信息,协助判断壳加密信息。 - 汇编函数提取:为了顺利训练ASM2VEC模型,需要提取大量的真实汇编函数样本,函数可作为汇编指令的“段”,完成PVDM的相关训练任务。在实际过程中,我们使用radar2工具来提取xxxxxx个真实汇编函数。 - 控制流程图提取:我们使用专业的工具angr【】来提取程序的控制流程图,此外在提取过程中,我们将使用ASM2VEC、ASM2VEC_PLUS、Malconv、N-gram等表征方法来表征,并保存为.gexf格式。此外,为了保证训练效率并剔除一些无效样本,我们清洗节点数量大于10000或小于15的控制流程图,以确保训练效果。 - 反汇编信息获取:capston工具【】可以对二进制表示下的汇编指令进行反汇编任务,以获取反汇编指令文本。 ​ 我们设计了共四项实验,实验①与实验②用于验证GNN+ASM2VEC_PLUS在检测精确度上相比较其他检测方法和其他GNN+表征方法上具有优势。实验③用于验证GNN+ASM2VEC_PLUS在较低维的向量输入下仍然能保持较高的精确度。实验④用于验证ASM2VEC_PLUS表征方法的训练效率要优于ASM2VEC,并且ASM2VEC_PLUS也能较好的将多个语义相似的汇编函数聚类在一起。 评估标准: 训练集: 准确率acc:旨在知道总样本中预测对的概率。ACC=(TP+TN)/(TP+TN+FN+FP) 精确率pre:精确率又叫查准率,旨在预测为正的样本中实际为正的有多少。P=TP/(TP+FP) 召回率rec:召回率也叫查全率,旨在找到实际为正的样本中多少被预测为正。 R=TP/(TP+FN) F-Score:F1是为了既能体现精确率又能体现召回率的一个评价指标。F1=2xPxR/(P+R) 训练时间: 测试集: 准确率acc:旨在知道总样本中预测对的概率。ACC=(TP+TN)/(TP+TN+FN+FP) 精确率:精确率又叫查准率,旨在预测为正的样本中实际为正的有多少。P=TP/(TP+FP) 召回率rec:召回率也叫查全率,旨在找到实际为正的样本中多少被预测为正。 R=TP/(TP+FN) F-Score:F1是为了既能体现精确率又能体现召回率的一个评价指标。F1=2xPxR/(P+R) 训练时间: ### ① 实验:各类表征方法+输入维度的对比实验。 在本实验中,我们使用GNN+各种不同的汇编指令表征方法(1-GRAM、2-GRAM、MALCONV)来表征节点basicblock,此外我们将各类表征方法分为五组输入维度(16、32、64、128、256)分别进行训练与检测实验。我们对每个组合的模型都训练100个epochs, 实验结果显示, 设计该实验的目的是为了验证GNN+ASM2VEC_PLUS能在总体表现上优于GNN+其他表征的检测结果,其次我们通过不同的维度输入实验的对比,来验证验证GNN+ASM2VEC_PLUS在较低维的向量输入下仍然能保持较高的精确度。 ### ② 实验:GCN+ASM2VEC_PLUS+128对比其他各种检测方法的实验。(学术界、商业界) 在本实验中,我们使用GCN+ASM2VEC_PLUS+256的输入来与学术界中,近几年几个较出名的检测方法Malconv、n-gram【】等做比较。除此之外,我们还对比了几个著名的工业检测器【ClamAV、Comodo、360、Microsoft、Goggle】的检测效果。在学术界检测方法中,我们使用XXX个恶意样本。在工业界检测器中,我们使用virustotal提供的API产生批量结果,由于访问限制,我们使用200个恶意样本进行实验。 实验结果显示, 设计该实验的目的是验证我们的方法较其他基于非控制流程图的检测器也具有一定的检测准确度优势。 ### ③ 实验:ASM2VEC_BASE+ASM2VEC_PLUS的训练效率实验。 证明:ASM2VEC_PLUS的训练效率优于ASM2VEC_BASE的训练效率。 ### ④ 实验:ASM2VEC_PLUS聚类实验 在本实验中,我们将提取的XXXX个真实函数样本与对应的xxxx汇编指令序列分别输入到ASM2VEC_PLUS模型与ASM2VEC中进行训练实验。 该实验用于验证ASM2VEC_PLUS表征方法的训练效率、精确度要优于ASM2VEC,并且ASM2VEC_PLUS也能较好的将多个语义相似的汇编函数聚类在一起。 证明:ASM2VEC_PLUS的训练效率优于ASM2VEC_BASE的训练效率。 ## 6.Related work ## 7.Conclusion ​ 我们的检测方法率先在GCN检测恶意软件任务中将节点basicblock映射至连续空间 , 为GCN提供了更准确的节点语义表征,也得到了较好的检测效果。在实际网络空间中,随着恶意软件数量与类型的不断攀升,基于人工智能与深度学习的商业检测器往往要实时更新自己的检测模型以保证检测的时效性。由于我们的方法是在连续空间中进行的,因此我们的方法在更低维的输入、更简单的网络模型下也能保证较高的检测精确度,这将使得训练时间与成本大大下降,满足真实网络空间中的恶意软件检测任务。我们认为我们提供的新型恶意软件检测方法不仅具有实用性,其表征方法ASM2VEC_PLUS的出现将有助于促进其他恶意软件检测、对抗任务的研究。 ​ 在未来的研究中,我们不仅要借此继续优化相关的恶意软件检测任务,我们也期望我们的研究对对抗性软件生成技术具有一些超前的帮助。例如,使用ASM2VEC_PLUS能将汇编指令映射至连续空间与任意汇编指令拥有唯一映射的特性,将生成方法映射至连续空间、智能化生成对抗性汇编指令序列等。