基于深度学习和区块链的JavaScript 恶意代码检测系统①
陈 鹏1, 韩 斌1, 洪华军2
1(江苏科技大学 计算机学院, 镇江 212000)
2
(中国船舶科学研究中心 软件工程技术中心, 无锡 214082)通讯作者: 陈 鹏, E-mail: *****************
摘 要: 目前基于深度学习的恶意代码检测技术是恶意代码检测领域的研究热点, 然而大多数研究集中于如何改进算法来提高恶意代码检测的准确率, 忽略了恶意代码数据集样本标签的不足导致无法训练出高质量的模型. 本文利用区块链技术来解决恶意代码检测数据样本孤岛和数据可信任的问题; 同时在代码特征提取上, 使用马尔可夫图算法提取特征; 基于分布式深度学习的训练融合区块链去中心化, 可溯源不可篡改的优势, 将不同算力贡献者采用同步训练更新模型参数. 通过仿真实验和理论分析验证了该方法的可行性和巨大的潜力.关键词: 恶意代码检测; 深度学习; 区块链; 数据孤岛; 数据可信任
引用格式: 陈鹏,韩斌,洪华军.基于深度学习和区块链的JavaScript 恶意代码检测系统.计算机系统应用,2021,30(5):99–106. /1003-3254/7908.html
JavaScript Malicious Code Detection System Based on Deep Learning and Blockchain
CHEN Peng 1, HAN Bin 1, HONG Hua-Jun 2
1(School of Computer Science, Jiangsu University of Science and Technology, Zhenjiang 212000, China)2
(Software Engineering Technology Center, China Ship Science Research Center, Wuxi 214082, China)
Abstract : At the moment, the detection technology of malicious code based on deep learning is a research hotspot in the field of malicious code detection. However, most researches focus on how to improve the algorithm to enhance the detection accuracy of malicious code, but ignore the lack of sample tags in the data set of malicious code, failling to train high-quality models. In this study, the problem of detecting isolated islands of data samples and data trustworthiness of malicious code is solved by Blockchain technology, and code features are extracted with the Markov graph algorithm. The training fusion block chain based on distributed deep learning has the advantages of decentralization, traceability and non-tampering, and the contributors of different computing power adopt synchronous training to update model parameters.The feasibility and great potential of this method are verified by simulation experiments and theoretical analysis.Key words : malicious code detection; deep learning; Blockchain; data islands; trusted data
1 引言
如今Web 已经深刻融入我们的生活中, 为日常生活带来了诸多便利, 我们随时可以通过手机或者电脑来访问各种网站, 但同时这也给网络攻击者提供了大量的攻击机会. 网络攻击者为了达到其目的, 会将一些
恶意的代码嵌入到网页中, 造成了正常的互联网用户的个人信息的泄露和个人财产的损失等问题.
针对Web 安全问题, 研究者们提出了不同的解决方法. 恶意代码检测目前主要分为两大类, 一种是基于代码文本及结构的静态检测方法, 另一种是基于运行
计算机系统应用 ISSN 1003-3254, CODEN CSAOBN
E-mail: ************ Computer Systems & Applications,2021,30(5):99−106 [doi: 10.15888/jki.csa.007908] ©中国科学院软件研究所版权所有.
Tel: +86-10-62661041
① 收稿时间: 2020-09-14; 修改时间: 2020-10-13; 采用时间: 2020-10-21; csa 在线出版时间: 2021-04-28
结果的分析的动态检测方法[1]. 毛蔚等[2]在分析进程访问行为异常度和相似度后, 引入了恶意代码检测估计风险, 并提出一种最小化估计风险实现主动学习的恶意代码检测方法; 吴迪[3]针对Android平台的恶意代码检测只关注应用的单方面的特征, 提出了基于多类特征的Android恶意代码检测技术; 罗世奇等[4]提出使用恶意代码纹理指特征纹融合33类恶意代码活动向量空间特征, 利用栈式自编码(SAE)模型来完成恶意代码的分类; 邓兆琨等[5]提出了一种动静结合的网络数据检测方法, 在传统静态分析的基础上优化了检测算法, 同时引入了动态模拟运行的检测方式; 黄琨茗等[6]提出一种最长频繁序列挖掘算法, 该
方法提取样本文件的动态API序列, 并挖掘最长频繁序列集合构造词袋模型, 将API序列转化为向量, 使用随机森林算法来识别恶意代码.
深度学习技术在恶意代码识别领域已经取得了较好的效果, 但是仍然存在以下方面的问题: (1) 单个机构的恶意代码样本是有限的, 模型泛化能力需要高质量多样性的数据集; (2) 在大数据时代, 有效处理海量的数据是恶意代码检测效率提升的必要条件; (3) 如今数据已成为一项宝贵的资源, 数据的隐私和安全性越来越受到人们的关注. 恶意代码样本这类特殊性质的数据集, 如果被网络攻击者获取, 对于网络安全的威胁是巨大的.
区块链自2008年比特币白皮书[7]提出以来, 因为其去中心化透明可信、防篡改可追溯、隐私安全保障等特点越来越受到人们的关注. 如杨雪梅[8]探索了将区块链技术中的去中心化的思想与深度学习相结合并尝试运用于语音识别的可行性, 提出了一种适用于处理大规模的声学数据的融合分布式的深度学习算法模型. Gu等[9]提出了一种Java层的移动终端恶意软件检测方法, 并结合了区块链技术, 达到了多机构的共享的目的. 本文基于区块链技术, 结合卷积神经网络(Convolutional Neural Network, CNN)进行了深度融合,提出了一种基于区块链+深度学习的JavaScript恶意代码检测系统设计方案, 利用区块链去中心化特点进行模型的分布式训练和同步更新.
2 相关理论
2.1 区块链
区块链被定义为一种按时间顺序来组织数据区块,不同区块之间按序形成链条状连接的数据结构, 借助这种数据结构来构建数字账本[10], 是一种可信的, 去中心化防篡改的数据存储技术, 区块链的数据结构如图1所示.
图1 区块链数据结构示意图
区块链中的基本数据单元是块. 在每个块中存储了所有交易相关的数据信息, 主要包括了区块头和区块体两部分信息. 区块头中主要由父区块的哈希值(previous hash)、当前的时间戳(time stamp)以及默克尔树根(Merkle tree root)等构成. 在区块体中一般包括若干个交易列表. 每个块与上一个块都是通过哈希值来进行连接的. 对于区块链网络中的节点, 在收到其余节点发送的数据以后, 并不是立即保存, 而是需要通过“共识机制”对当前的数据进行验证, 如果验证通过则保存到区块链中[11]. 为了加速区块的验证, 区块体中的所有的交易信息都按照默克尔树的形式保存下来, 并用默克尔树的根连接区块头和区块体[12]. 区块链中的每个节点都有自己一对公私钥, 利用非对称加密技术来保证信息的加密传输, 从而保护
了交易者的隐私. 2.2 卷积神经网络
卷积神经网络是一种专门用来处理具有类似网格结构的数据的神经网络, 是深度学习的代表算法之一[13,14]. 经典卷积神经网络包括卷积层、池化层和全连接层. 卷积神经网络的卷积核参数共享机制使得能够以较低的运算来提取特征, 给定一张特征矩阵图, 通过不同的组合, 经过全连接达到分类的目的.
(1) 卷积层
P i,j(0≤i≤W,0≤j<H)
卷积层的作用在于提取输入数据的特征. 通过卷积核与对应位置的数据相乘来获取图的特征,
接着使用非线性激活函数完成特征的映射. 定义输入图片
, 大小为W×H, 则卷积运算的公式为:
计算机系统应用2021 年 第 30 卷 第 5 期
ωm ,n (0≤m ,n ≤K )式中, 表示大小为K ×K 的卷积过滤器的卷积运算的权值.
P i ,j ,c (0≤i ≤W ,0≤j ≤H ,0≤c ≤C )更一般地, 在卷积运算的过程中, 通常会有多个通道, 这些通道上的过滤器同时进行特征提取. 定义输入的图片为, 表示大小为W ×H , 通道数为C 的图片, 卷积运算公式为:
b i ,j ,l ωm ,
n ,c ,l 式中, 表示卷积运算的偏置, 表示卷积神经网络的权值.
(2) 池化层
在卷积运算之后通常需要添加一层池化层, 来对卷积运算得到的特征减少映射的表示, 即降维操作. 池化操作具体指的是对局部特征范围内, 提取最大值或
js代码加密软件者平均值. 通常使用最大值池化和平均池化. 最大池化和平均池化的计算公式为:
(3) 全连接层
y 1,y 2,···,y n 全连接层通常放置在最后几层用作分类器, 根据卷积操作提取得到的特征进行分类. 在全连接层之后,对应分类上的概率分布通过softmax 或者logsoftmax
来计算. 定义原始的神经网络输出为, 则计算公式为:
2.3 分布式深度学习
在深度学习训练过程中, 为了提高模型的训练速度, 可以通过一些参数设置来加速GPU 的计算, 由于单个的GPU 的加速的效率没有办法满足某些重量型深度学习模型算力要求, 由此出现了深度学习模型的并行方式. 分布式深度学习系统由多个共享模型和一个中央控制代理组成, 如图2所示. 其中贡献者可以
贡献自己的模型、数据和算力, 训练完成后发送给中央服务器, 中央处理器负责融合和共享深度学习模
型. 整个模型的训练都由一个中央服务器集中代理完成
, 所以, 融合模型的过程中可能会遭受单点失效的影响[15,16].
图2 分布式深度学习示意图
2.4 协作分布式深度学习
与分布式深度学习不同, 系统中划分为了3个角应用程序发起者、若干个算力贡献者和验证贡献者.其系统架构如图3所示.
图3 协作分布式深度学习示意图
在这个设计框架中, 每个单元都能够独立进行决策, 程序发起者负责定义训练模型的任务. 算力贡献者负责调用自己的算力资源进行构建训练任务并训练深度学习模型, 算力贡献者拥有充分的自主权, 可以根据程序发起者的不同任务选择本机的模型或者数据, 在训练完成后将其发送给验证者. 验证者在收到算力贡献者提交的参数后, 负责验证并评估模型的性能指标,
2021 年 第 30 卷 第 5 期
计算机系统应用
把结果发送给程序发起者. 发起者可以选择保留或者
丢弃部分数据[17,18].
3 JavaScript 恶意代码检测系统设计
3.1 特征提取
Ni 等[19]提出了一个恶意代码检测算法MCSC,首先将代码文件转化为基于simhash 的灰度图, 然后使用卷积神经网络完成恶意代码家族的分类. 通过灰度图结合深度学习的方法均需要将图像转化为固定大小,因此在图像转化的过程中会造成一部分的信息丢失.本文使用基于马尔可夫图算法
[20]
避免了上述的问题.
将JavaScript 代码转化为8位的无符号整数向量, 整个代码就可以看做是一个字节流, 字节流表达了一个
随机的过程:
Byte i 式中, N 代表JsavaScript 代码的字节长度. 对于每一个变量, 有256种不同的状态值
, 可以表示为:
由于恶意脚本都衍生自已知的恶意代码, 所以新的恶意脚本只有小部分的改动. 例如文献
[21
]将某恶
意代码家族不同样本可视化为灰度图, 如图4所示, 可以发现相同恶意代码家族在字节分布上也会存在相似的特征.
图4 Fakeraean 木马家族图像实例[21]
Byte i −1Byte i Byte i −1Byte i Byte i Byte i −1Byte i 基于上述恶意代码家族字节可视化图相似性的特
点, 考虑相邻的两项和, 状态空间中状态
到状态转换过程是随机的, 具备“无记忆的”
性质, 且每个状态相互转换的概率是相同的. 所以在代码字节提取特征上, 为了简化问题, 这里假设只与
有关联, 则随机的变量可视为一个马尔可
夫链:
马尔可夫转移概率矩阵的构建是基于每一个状
P x ,y 态迁移的概率. 如果用记作是x 的下一个字节为y 的状态转移概率, 那么对于任意的字节序列计算公式为:
f (x ,y )x ,y ∈{0,1,···,
255}式中, 表示x 后面是y 的频率, 且. 以此类推考虑整个文件的字节的状态转移概率
M , 计算公式为:
P x ,y 基于式
(11)生成马尔可夫图像, 图像中的每一个点对应于马尔可夫转移概率矩阵中的不同位置上的转移概率. 将JavaScript 代码转化为马尔可夫图的示意图如图5所示.
图5 JavaScript 代码转化为马尔可夫图
3.2 系统架构设计
基于协作式分布深度学习[17]的角划分, 并结合机器学习模型训练的3要素: 数据、算法、算力. 本文
将系统中用户角划分为3种: 任务发起人、若干个算力贡献者和若干个模型验证者. JavaScript 恶意代码检测系统的用户对象关系示意图如图6所示. 系统角
划分其数量和对应关系如表1所示.
3.3 模型训练算法
某项任务的发起人负责定义任务的内容, 比如输入数据的属性、模型的预期输出、测试数据集、模型的准确度要求; 算力贡献者通过下载任务数据或者自己本地数据, 针对给定的任务进行模型的训练任务; 验证贡献者将算力贡献者训练好的模型进行融合, 然后再加密的测试数据集合上验证. 下文详细描述了流程,其中所使用的符号定义如表2所示.
计算机系统应用
2021 年 第 30 卷 第 5 期
图6 JavaScript 恶意代码检测系统用户对象关系
表1 系统角划分对应关系表
角数量对应要素任务发起人1个算法, 数据算力贡献者≥1个算力, 数据模型验证者
≥1个
算力
表2 符号对应意义
符号意义N i
第i 个节点O ri i 第
i 个任务发起人C p i 第i 个算力贡献者Ver i
第i 个验证贡献者PK i S K i Cert i
, , 第i 个公钥, 私钥和证书
i →j i 发送消息给j D PK i (m )使用公钥解密m E S K i (m )使用私钥加密m D S K i (m )使用私钥对m 解密Hash
(m )
对m 求散列timestamp
时间戳
Ori C p Ver 对于集合N , , ,
满足如下条件:
模型训练算法如下:
Ori i (1) 发起交易, 发起人发布一笔计算任务交易,Data 内容包括深度学习模型以及融合模型、深度学习任务、模型参数、融合数据和决策接口记作. 由于模型训练的数据集比较庞大, 会存放在IPFS (Inter Planetary File System)中[22], 将对应的哈希值地址存放在交易中,其余节点通过访问IPFS 来获取节点数据信息, 上述过程可以表达如下:
C p i Ver i f check (Pac ,PK Ori i )(2) 参数初始化, 所有节点完成参数初始化的同步,每个算力贡献者和验证者需要对消息进行校验,确定消息的发送身份以及数据的完整性, 校验函数记作, 运算结果中1代表验证通过, 0代表丢弃该消息, 过程如下所示:
C p Ori i =
{C p Ori i ,1,C p Ori i ,2,···,C p Ori i ,d },d <|N |(3) 训练参数, 训练中算力贡献者表示为:, 在每一轮的训练
k 中, 都会分别完成自己的前向和后向运算, 同时计算
2021 年 第 30 卷 第 5 期
计算机系统应用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论