摘 要
科技的发展带来了人们生活的改变,近年来我国网民已突破十亿人口, 而且在后疫 情时代, 经历了疫情时期的一系列线上活动, 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题,黑客们通过在正常的网页中插入 JavaScript 木马,使人们在不知不觉中就受到黑客攻击。机器学习具有准确率高、 预测 效果好等特征, 运用训练机器学习模型的方法检测木马是网络安全界的热门方向。
本次实验通过在互联网上收集正常JavaScript 和木马JavaScript 数据,研究JavaScript 木马的特征, 用 Python 的 Pandas 和 Scikit-learn 库进行数据处理和机器学习训练。 JavaScript 木马识别根本上是二分类问题, 所以算法的选择上本次实验选择了随机森林 分类算法、KNN 分类算法和 SVM 分类算法, 这三种分类算法是二分类问题中常用的方 法。通过机器学习训练后的模型识别木马准确率很高, 可以有效的识别 JavaScript 木马 文件。
关键词: 机器学习;JavaScript ;木马;Python
Design and Implementation of Trojan Detection Model Based on Machine Learning
Abstract
The development of technology has brought about changes in people's lives. In recent years, China's internet population has exceeded one billion, and in the post pandemic era, people have experienced a series of online activities during the epidemic period, and their dependence on the internet is much higher than ever before. Frequent online behavior has also brought a series of security issues, as hackers insert JavaScript trojans into normal webpages, making people unknowingly vulnerable to hacker attacks. Machine learning has the characteristics of high accuracy and good prediction performance, and using the method of training machine learning models to detect trojans is a popular direction in the field of network security.
This experiment collected normal JavaScript and Trojan JavaScript data on the internet to study the characteristics of JavaScript Trojans. Data processing and machine learning training were conducted using Python's Pandas and Scikit learn libraries. JavaScript Trojan horse recognition is basically a binary classification problem, so the selection of algorithms in this experiment chose random forest classification algorithm, KNN classification algorithm and SVM classification algorithm, which are commonly used in binary classification problems. The model trained through machine learning has a high accuracy in identifying trojans and can effectively recognize JavaScript trojan files.
Key Words:Machine Learning;JavaScript;Torjan;Python
目 录
摘 要
Abstract
1 绪论
1.1 研究背景
1.2 国内外研究现状
1.2.1 国外研究状况
1.2.2 国内研究状况
1.3 论文主要工作
2 JavaScript 木马检测的相关理论与技术
2.1 JavaScript 语言概述
2.2 JavaScript 木马概述
2.3 机器学习及其相关算法概述
2.3.1 随机森林算法
2.3.2 SVM 算法
2.3.3 KNN 算法
3 需求与可行性分析
3.1 可行性分析
3.1.1 技术可行性
3.1.2 经济可行性
3.2 需求分析
4 基于机器学习分类模型的 JavaScript 木马检测
4.1 检测的整体流程
4.2 数据集的获取
4.2.1 正常 JavaScript 数据集的获取
4.2.2 含有木马的 JavaScript 数据集的获取
4.3 数据集处理
4.3.1 数据集导入
4.3.2 数据集清洗
4.4 数据集的特征提取
4.5 训练集的划分和模型调参
4.5.1 划分训练集和测试集
4.5.2 模型调参
4.6 实验结果与对比
4.6.1 实验结果
4.6.2 实验结果对比
5 总结与展望
5.1 总结
5.2 展望
参 考 文 献
致 谢
1 绪论
1.1 研究背景
随着互联网和信息技术的高速进步,特别是后疫情时代, 人类活动中随处可见互联 网的痕迹。中国互联网信息中心于 2023 年 03 月 02 日发布的第 51 次《中国互联网络发 展状况统计报告》 [1]中指出, 截至 2022 年 12 月, 中国网民规模已至 10.67 亿,较 2021 年 12 月增长 3549 万人,互联网普及率高达 75.6% 。图 1.1 可以看出自 2020 年 3 月至 2 022 年 12 月我国网民规模和互联网普及率的变化。
图 1.1 中国网民规模与互联网普及率统计
在网民数量急剧增长的状况下, 网络的安全问题也随之而来,瑞星公司在 2023 年 2 月 17 日发布的《2022 年中国网络安全报告》[2]中指出, 2022 年瑞星公司拦截病毒样本 7355 万个, 其中木马病毒新增 4515 万个, 蠕虫病毒新增 1392 万个,其余病毒如后门、 感染型病毒和灰色软件总体数量也有增加。如图 1.2 可以看出, 木马病毒占总体总量的 61.39% ,是目前最主要的威胁。网站挂马是木马传播的主要途径之一[3],黑客一般通过 网站的漏洞去进攻网站, 然后把准备好的木马嵌入 HTML 代码中, 当用户访问网站的 时候, 就会受到木马的攻击,被黑客窃取信息。 这一攻击技术主要使用 JavaScript 语言 实现, 把 JavaScript 作为载体,实现木马病毒从黑客服务器到客户主机的传递[4]。
图 1.2 瑞星 2022 年病毒种类统计
现在针对 JavaScript 木马检测的研究主要以机器学习算法为主[5]。机器学习技术现 在应用于农业、 工业等许多领域, 在自然语言处理方面尤为常用。由于编程语言与自然 语言存在相似,研究员将适用于自然语言处理的模型使用在编程语言之中, 并把机器学 习算法用于木马病毒检测,这是目前来说网络安全领域的一大热门。 由于本人之前参加 过大创项目《农业大数据平台核心技术》,对使用机器学习进行预测的技术有一定的研 究,而且平时对木马病毒比较感兴趣, 故而想用机器学习技术检测 JavaScript 木马作为 毕业设计。
1.2 国内外研究现状
目前, JavaScript 木马检测技术已经成为安全界研究的重点,对于现有的检测方法 都可以归纳为两大类,一类是对代码文本研究的静态检测,另一类是对代码行为研究的 动态检测。 静态检测主要是通过对代码进行分析, 通常与分类技术结合使用, 通过抓取 代码的特征来训练模型, 然后判断网页是否含有 JavaScript 木马。 静态检测对计算机资 源消耗少, 训练完成后的模型检测时间很快, 但是对一些特殊木马检测准确率不高。动 态检测主要会将网页在虚拟机中打开, 观察网页的行为来判断里面有没有隐藏木马。动 态检测通常准确率较好,但是要占用额外的计算机资源, 而且检测时间较长。
1.2.1 国外研究状况
由于国外对于机器学习概念应用较早,已经有许多学者应用机器学习来检测 JavaSc ript 木马,Ndichu S[6]等人提出一种从 JavaScript 的 AST 进行代码结构表示, 并使用 Do
c2vec 神经网络模型进行机器学习训练,最后比较发现, Doc2vec 在识别使用了 AST 的 JavaScript 代码的速度和精准度都高于传统 JavaScript 代码。
Ishida M [7]等人提出一种检测 JavaScript 木马的新方法 MOJI,它是一种静态检测的 方法,不需要对代码进行特征提取,只需要简单的字符编码即可。MOJI 使用了最新的 字符级卷积神经网络模型进行训练,不需要对单词进行拆分,但是对内存的需求比较大。
Fass A[8]等人通过设计一种模块化静态 JavaScript 检测系统,它拥有十个模块五种 不同的代码抽象方式, 并且每个模块都训练了一个随机森林分类器,训练了 270000 余 个样本, 达到 99.4%的预测率。
Morishige S[9]等人提出了一种基于分割 URL 特征的恶意 JavaScript 检测方案,通过 分割恶意 JavaScript 片段以获取特征, 将这些特征存储在字典中, 然后从测试代码中找 到 URL 链接并分割, 用分割后的 URL 片段匹配字典中的特征, 如果能够匹配成功,则 该 URL 是恶意的。 该设计能够很好的检测重定向类型的恶意代码, 但是没有在 URL 上 混入恶意代码的 JavaScript 片段则很难检测出来。
Phung N M[10]等人在进行恶意JavaScript 研究时不仅仅只关注于模型的训练和特征 的搜集, 而是在数据集上做出创新, 提出了更符合现实情况的在不平衡数据集上检测 J avaScript 木马。 一般研究者在进行数据集搭建的过程中会选择恶意代码与正常代码差不 多的数量, 或者选择搭建恶意代码更多的数据集,但是这并不符合现实情况, 现实中往 往恶意数据要远远小于正常数据的,所以构建的数据集一共两万条数据,其中恶意数据 只有几百条。 为了弥补数据集不平衡的弊端, 作者提出了基于 DCGAN 的过采样模型, 这个模型在恶意数据集中使用, 使其“生 ”出新的恶意数据, 并且新生成的数据与源数 据相似但不相同,提高了检测的正确率。
1.2.2 国内研究状况
近几年, 对于国内研究信息安全的学者, 使用机器学习技术检测木马方面的研究是 一大热门方向,四川大学的 Yong Fang[11]等人提出一种基于图神经网络的静态检测模型 JStrong ,为了能够将 JavaScript 代码冗余部分删除,作者团队从对象依赖图 ODG 获得 灵感, 研究出一种新的提取代码属性图,通过修剪原始程序依赖图 PDG,保留数据流依 赖和控制流依赖等最重要信息,最后形成的新 PDG 检测效果较之前有了明显提升, 而 且花费时间也更少。
卢镓[12]使用 CNN 神经网络算法设计模型, 对恶意代码攻击类型进行分析, 采用 8 个输入节点对应八种攻击类型,8 个输出节点对应训练完成的输出值, 较为全面的根据 攻击类型对恶意代码进行分类。最后模型检测率达到 99.4% ,并且设计了一整套完善的 Chrome 插件,部署在 Chrome 浏览器中, 实现了在浏览器中实时检测网站的恶意代码。
孟雨[5]在传统的模型基础上, 使用了较新的融合模型 XGBoost 检测 JavaScript 木马, 获得了更高的准确率和速度。并且在研究过程中应用基于 RabbitMQ 的高并发爬虫技术, 构建了一个代码抓取器, 较为高效的抓取嵌入在网站代码里的 JavaScript 文件。
邱瑶瑶[13]等人提出了基于语义的检测方法, 通过提取 AST 抽象语法树获取词法单 元序列, 然后利用 Google 的 word2vec 词向量特征训练工具得到序列的词向量, 之后将 其输入到 LSTM 检测模型中进行训练。这种方法检测效果与时间都优于同实验对比的两 种模型,但是处理的数据集不能过大。
1.3 论文主要工作
本文主要研究如何运用机器学习模型检测 JavaScript 木马。通过分析 JavaScript 木 马代码的特征,然后使用多种机器学习算法模型对数据进行训练, 最后比较各个算法模 型的时间、准确率,挑选出最佳算法模型。
这次实验主要从下面几个方面进行探究:
(1)从多个途径获取 JavaScript 木马文件, 并且通过软件爬取知名网站获得正常的 JavaScript 文件,将两种类型文件分别以.js 文件的形式存储在主机中。
(2)研究 JavaScript 代码特征, 将数据进行预处理,然后得出可以进行训练的有效 数据,研究数据特征。
(3)运用多种机器学习算法模型对数据训练,并通过调参方法对模型调参, 对比 各个模型的准确率,得出最优解。
2 JavaScript 木马检测的相关理论与技术
2.1 JavaScript 语言概述
JavaScript 语言是面向对象的脚本语言,不用被编译为机器码就能执行。因为其跨 平台和易于上手的特性,被全世界前端工程师追捧。JavaScript 由 ECMAScript、DOM、 BOM 三部分组成:
(1)ECMAScript:客户端脚本语言的标准, 不同浏览器有着不同的实现, 如 Chr ome 的 V8 、FireFox 的 SpiderMonkey 、微软的 JScript 等。
(2)DOM:可以将网页里的东西转换为 JavaScript 对象, 然后用脚本控制它。 (3)BOM:可以将浏览器当作对象看待, 通过脚本访问浏览器的功能。
2.2 JavaScript 木马概述
JavaScript 木马实质上就是存在一段恶意的 JavaScript 代码,它可以通过<script></s cript>嵌入 HTML 页面,也可以独立生成一个.js 文件, 被正常的 HTML 链接。这些木马 在满足一定的条件后开始运作, 一般表现为: 转到赌博或色情网站、弹出广告页面、修 改浏览器配置、 盗取个人信息等。强大的木马可能会在用户浏览某个页面时在后台下载 木马文件, 然后伪装成正常.exe 文件,用户执行被伪装的应用后,黑客便能控制住电脑。
2.3 机器学习及其相关算法概述
机器学习是人工智能实现的一种方法。机器学习就是让计算机运用收集到的数据搭 建模型, 并让这个模型对一些事件做出预判的技术。有监督机器学习主要分为分类和回 归两种,回归一般应用于对事件的预测, 比如让模型学习过去一段时间天气的规律, 预 测出明天天气可能是怎么样的。分类则应用于判断检测,比如让模型学习大量狗的照片, 通过抓取狗的特征构建特征库,判断某只动物是否是狗。 对于 JavaScript 木马病毒的检 测, 需要用数据进行训练,所以实验选择使用有监督学习的分类模型。
2.3.1 随机森林算法
随机森林算法是 Bagging 算法的进化版, 思想仍然是 bagging ,但是进行了独有的 改进。 随机森林算法在二分类问题中比较有效果,基学习器是一个个决策树, 树多了就 组成森林。随机森林模型是本次实验的核心算法,它的流程如图 2. 1 所示。