原文标题:Jadeite: A novel image-behavior-based approach for Java malware detection using deep learning
原文作者:Obaidat I, Sridhar M, Pham K M, et al.
原文链接:https://www.sciencedirect.com/science/article/pii/S0167404821003710
发表期刊:Computers & Security 2022
笔记作者:zhanS@SecQuan
笔记小编:cherry@SecQuan
其实不难发现,由于Java本身是一门较为安全的语言,所以针对Java安全相关的研究,如:Java漏洞挖掘和Java恶意代码检测,相对来说比较少,通过现有的检测和分析方法就能够达到一个不错的检测效果。
在恶意代码检测领域,将恶意代码转换成图像,配合图像处理技术进行检测是一种常用的手段。然而,如果直接将恶意代码的二进制文件转换成图像,可能导致代码的语义丢失。
本文提出了一种新的基于行为的Java程序转换方法,用于基于深度学习的恶意软件分类。通过基于字节码级别的过程间API调用静态捕获Java程序的行为,将这些行为转换成图像,利用图像处理模型(CNN)实现对恶意代码的检测。为降低模型受代码混淆等技术的影响,作者还从字节码文件中提取了一组额外的特征。
模型已开源:https://github.com/sridhar-research-lab/jadeite。
图1是Jadeite模型的方法框架。Jadeite以JAR形式的Java字节码作为输入,由3个部分组成:(1)字节码转换引擎,(2)特征提取引擎和(3)基于CNN的分类引擎。
(1)字节码转换引擎
目标是将字节码转换成灰度图。
首先,从JAR文件中提取出字节码,然后使用Soot将字节码转换成Jimple中间语言(一种三地址码);接着基于Heros从Jimple构建过程间控制流图(ICFG)。由于生成的JAR文件的过程间控制流图很大,所以需要对其进行裁剪以降低模型受维数灾难和过拟合问题的影响。具体来说,通过删除如变量赋值、变量初始化等琐碎质量,仅保留API调用指令(尽可能保证API指令的调用顺序),降低ICFG的复杂性。
接着,将ICFG用邻接矩阵表示,矩阵中的每个元素的值存在于[0, 255]中。A[i, j]表示API调用指令i与API调用指令j之间存在一条边。如果A[i, j]的值大于255,表示API调用指令i与API调用指令j之间的边数大于255,则说明可能存在循环或者递归的情况,因此需要将该值设置为255。基于ICFG的邻接矩阵,生成灰度图,图的维数为矩阵的维数。
(2)特征提取引擎
特征提取引擎的框架如图2所示,目标是使用Jarhead从输入的字节码中提取一组额外的特征,减低检测模型受代码混淆技术的影响。
Jarhead主要提取两种特征:混淆特征和行为特征。具体来说,Jarhead从字节码的反汇编代码中提取统计信息来表示混淆特征,如:是否存在Java对象的特定实例,字符串长度等;行为特征包括下载和执行外部文件等。Jarhead从Java直接码中总共提取42个特征,而本文模型梯度推进算法(gradient boosting algorithm)从这42个特征中选择出20个特征,如表1所示。本文所用到的特征可以分为两大类:已知存在漏洞的函数(如:MidiSystem.getSoundbank),下载和执行行为(如:java.net.URL)。
(3)基于CNN的分类引擎
基于CNN的分类引擎需要接收字节码转换引擎获得的灰度图和特征提取引擎提取的特征,因此需要对这两种输入进行组合。图3是作者探究的几种不同的输入组合方式。
-
Image Load:仅使用灰度图作为输入;
-
Single Load:同时使用灰度图和特征作为输入,将灰度图展开成1维向量,然后将特征拼接到其后;
-
Double Load:同时使用灰度图和特征作为输入,分别使用不同的网络对二者进行处理,然后将处理的结果进行拼接(这个就类似于推荐系统中的双塔模型)。
实验结果及混淆矩阵分别如图4和5所示。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com
原文始发于微信公众号(安全学术圈):Jadeite:基于行为和深度学习的Java恶意软件检测新方法