基于机器学习的恶意网站分类研究
作者: 聂碹 乃皮沙·艾斯卡尔 谢志杰 高福阳 李轩 张志豪
关键词:机器学习;数据采集;Web安全;恶意网站;监督式学习
0 引言
进入Web2.0时代以来,每天都有海量信息资源发布在各种网站上。人们在享受互联网发展带来便利的同时,遭受网络攻击的情况也日益增加。各种挂马网站、色情网站、暴力网站、诈骗网站等利用不正当手段,通过伪装成正常网站,仿冒正常网站的URL地址或页面内容,欺骗用户以窃取个人信息(如信用卡、银行卡账户、密码等)和财产。在此过程中,面临的安全形势和即将应对的安全压力日显迫切。根据相关报告显示,恶意网站已成为当今网络安全所面临的主要威胁之一。
针对恶意网站鉴别问题,研究人员提出了多种识别技术和方案。Justin Ma 等学者利用DNS 信息、WHOIS信息和URL语法特征结合机器学习算法来辨识恶意URL[1]。Davide Canali及其团队在此基础上加入了JavaScript和HTML特征,从而拓展至网页内容检测,提高了恶意网页识别的准确度[2]。2012年,张慧琳等学者以网站木马的原理为基础,探讨了挂马检测、特征分析和防范技术等方面,但缺少对各种检测方法的横向比较和深入探讨[3]。这些研究成果为恶意网站识别领域的发展提供了重要参考和启示。本文将根据现有技术和环境,以及本次设计的需求,结合所需的应用场景,实现基于机器学习的恶意网站分类研究。
1 机器学习基础
1.1 机器学习概述
机器学习是一门多领域交叉学科,旨在从数据中学习算法。它试图从海量历史数据中提取隐含的模式,并将其应用于回归(预测)或分类。概括而言,机器学习的目标是从机器中获取直接编程所不能实现的特性。在现有数据或过去经验的基础上,进行机器学习算法的选择、构造模型、对新数据进行预测,并将知识结构重新组合以持续改进性能。机器学习的一般过程如图1所示。
机器学习建模过程中的相关术语解释如表1所示。
1.2 机器学习算法
目前机器学习主要分为两大类:有监督学习和无监督学习。两者的区别在于训练数据中是否包含目标变量。在监督学习中,提供了带有正确结果标记的数据,即事先知道数据的正确输出值。而在无监督学习中,数据并没有标记。
1.2.1 有监督学习
有监督学习通过不断迭代模型训练进行。首先,利用正文内容中的系列变量创建一个函数,将输入值映射为所需的输出值。然后,通过迭代调整参数来提高预测能力。最后,通过增加新的参数值更新模型,直到模型从训练数据中达到预设的准确性时停止训练。典型的监督学习算法包括:逻辑回归(Regres⁃sion) 、决策树(Decision Tree) 、随机森林(Random For⁃est) 和K最近邻(KNN) 等。
1.2.2 无监督学习
无监督学习通常用于前期数据处理环节,主要功能是对原始数据集进行筛选并整理出标签集。训练集数据仅有特征x而无标签y,其目的在于尝试抽取数据所蕴含的结构与模式。常见的无监督学习算法有K-means、降维和文本处理(特征提取)等。
2 恶意网站分类方法构建
2.1 恶意网站定义
目前对恶意网站尚无明确的学术定义。Google 将其描述为一种不安全的网站,可能存在行为诱导用户下载恶意软件或通过网页弹窗诱骗用户输入个人信息等[4]。百度百科则将恶意网站定义为故意执行恶意任务的病毒、蠕虫和木马的网站,其特征是采用网站形式正常展示内容,同时非法获取用户数据,甚至入侵用户电脑系统[5-8]。这些定义有两个要点:“在网页上进行恶意攻击”和“非法盗用用户信息资料”。
2.2 恶意网页识别
恶意网站识别是当今互联网安全领域中的一个重要问题,其本质属于一个二分类问题。虽然恶意网站的形态多样,包括钓鱼网站、恶意下载网站、欺诈网站等,其特征不易捕捉,但良性网站和恶意网站在内容和行为上存在显著差异。恶意网页识别通常包括以下三个关键步骤:网页采集、特征抽取、网页判别。
系统从互联网上收集大量的网页样本,包括可能存在恶意内容的网页和正常的良性网页,作为后续特征抽取和模型训练的数据来源。然后从采集到的网页样本中提取出一系列有助于区分恶意网页和良性网页的特征。这些特征可以包括网页的结构特征、内容特征、域名特征、链接特征等。最后利用特征抽取得到的特征,结合训练好的分类模型,对新的待分类网页进行判断,根据模型的输出结果,将网页划分为恶意网页或良性网页。
恶意网站识别基本框架如图2所示。
2.3 机器学习分类算法
2.3.1 逻辑回归
逻辑回归(Logistic Regression) 是一种计算过程类似于线性回归的算法。线性回归通常用于解决数据预测问题,而逻辑回归则用于处理分类问题。逻辑回归通过使用逻辑函数(也称为Sigmoid函数)将连续的预测值映射到0~1的概率值,从而实现分类任务。在训练过程中,逻辑回归模型通过最大化似然函数来拟合数据,并利用梯度下降等优化算法来更新模型参数。
2.3.2 支持向量机
支持向量机(Support Vector Machine) 是目前广泛使用的监督学习算法,主要用于分类问题和回归分析。其核心思想在于通过在特征空间中找到一个最佳的边界,这个边界被称为“超平面”,使得不同类别的样本可以被有效地分离开来。
在训练过程中,SVM通过最大化支持向量到超平面的距离,同时将分类错误的样本点的分类间隔控制在一个合适的范围内,以避免过拟合。当二元分类问题的正负样本无法通过直线分割时,支持向量机可以利用灵活多样的核方法将数据映射至高维空间,利用高维空间的超平面进行数据分离,从而实现在原始空间中无法线性分割的样本分类。
2.3.3 决策树
决策树(Decision Trees) 是一种基于树形结构的决策分类方法。它以直观的方式呈现分类过程和结果,具有高效、易解释和可视化等优点。
决策树算法的生成过程包括特征选择、节点划分、递归构建和剪枝处理等步骤。特征选择阶段通过计算信息增益、基尼指数或信息熵等指标,选择最佳特征进行节点划分。然后,根据选定的特征对数据集进行划分,生成子节点,并递归地构建决策树,直到满足停止条件。
2.3.4 随机森林
随机森林(Random Forest) 是一种随机生成的算法。这种算法由多个决策树组成,每棵决策树都是独立构建的,彼此之间没有相关性。一旦建立了随机森林模型,当新的输入样本到来时,可以分别对每棵决策树进行独立的判断,然后综合它们的结果来做出最终的分类决策,确定该样本属于哪一类别(在分类问题中)。随后,统计出现次数最多的类别,从而预测该样本所属的类别。
2.3.5 K 最近邻分类算法
K 最近邻分类算法(k-Nearest Neighbors) 是一种基于实例的分类方法,属于惰性学习(lazy learning) 。该算法通过在特征空间中找到与待分类样本相似度最高的K个样本,如果这K个样本中的大多数属于同一类别,则将待分类样本划分到这一类别。K最近邻方法仅根据一个或多个最接近的邻居来确定样本的分类。K最近邻算法没有明确的训练过程,而K值的选择会显著影响算法的结果。
3 恶意网站分类实证研究
3.1 数据采集与处理
本文所使用的两个数据集均来自Kaggle竞赛平台。数据集1共包含1 781条数据记录,其中包括21 个特征(包括输入和输出)。在这些记录中,良性网站数据有1 565条,恶意网站数据有216条。数据集2共包含50 000条记录,包括63个特征。其中良性网站数据有35 056条,恶意网站数据有14 944条。数据集特征如表2和表3所示。
3.2 数据预处理
在数据预处理过程中,需要根据研究内容筛选出符合要求的数据集,并对数据进行预处理和必要的数据清洗,以满足研究需求。具体步骤如下:
1) 删除无关列:首先,移除数据集中的URL列,因为它仅作为唯一标识符,对于恶意网站的分类并不具备重要意义。
2) 处理空值:在数据集中,许多条目的CONTENT_LENGTH、SERVER 和DNS_QUERY_TIMES 存在缺失值。针对这种情况,需要填充CONTENT_LENGTH列的缺失值,并删除包含其他两个空值的条目。
3) 特征处理与数据分离:将数据集中的列转换为虚拟列,并根据“类型”列将数据集分成两个不同的数据帧。这样在模型训练时能更好地处理分类数据。
通过以上预处理步骤,可以准备好适合用于分类模型训练的数据集,确保数据质量和特征的有效性,为后续的实验提供可靠的基础。
3.3 训练模型
对于恶意网站分类任务,本文采用的算法包括逻辑回归、支持向量机、决策树、随机森林和K最近邻分类算法等。
在数据预处理完成后,根据7∶3的比例将收集到的数据集分离为训练集(train) 和测试集(test) 。其中,X表示前19列作为输入特征,Y表示最后一列"type" 作为输出的预测结果(标签),将得到的训练集和测试集分别表示为:X_train, X_test, Y_train, Y_test。
利用训练集(X_train, Y_train) 进行模型拟合(train⁃ing) ,通过学习样本数据的特征与标签之间的关系,调整模型参数以最大程度地拟合训练数据,并在不同的特征空间中构建决策边界,以实现对恶意网站的准确分类。
然后利用测试集(X_test) 对训练好的模型进行评估。通过将测试集输入训练好的模型中,得到模型在未见数据上的分类结果,并计算模型的性能指标,如准确率、召回率、F1值等,用于客观地评价模型的分类效果,并为进一步优化提供参考依据。
最后,对实验结果进行分析和比较。通过比较不同算法模型在测试集上的表现,评估它们在恶意网站分类任务中的优劣势,并找出最适合该任务的模型。同时对模型在不同参数设置下的性能进行分析,为模型调优和改进提供指导。
3.4 实验结果与分析
1) 预测测试集数据。对测试集数据X_test分别赋予训练后的模型以预测结果predict_Y。
2) 分析预测准确性。对于两个数据集中的数据,比较真实测试集中的Y_test和模型预测得到的pre⁃dict_Y的准确率。并通过混淆矩阵得出的结果展示图如下:
3) 得到结果。通过对比上图中各个算法的混淆矩阵,可以发现在使用的5种算法中,支持向量机和随机森林的准确率较高,而KNN算法的准确率最低。如表4所示,其中展示了训练集和测试集的结果。
接下来,通过分类模型的几个评价指标,包括召回率(recall) 和F1分数(f1-score) ,来评估各个分类模型的适用性。最终结果如表5所示:
4 结论
实验初步结果表明,在应用的各个监督式学习算法中,支持向量机(SVM) 和随机森林的预测准确率和模型评价指标表现较为理想。首先,SVM是对二分类问题效果最佳的算法模型,它在向高维空间映射时不会增加复杂度,能够解决非线性特征的相互作用。然而,该算法仍存在一些缺点:SVM对缺失值敏感,当数据量大时训练时间较长。此外,本研究中的模型使用默认参数,未进行参数调优,通过调优后预测效果可能会有所提升。
随机森林算法本身的精度优于大多数单个算法,因此在测试集上表现良好,且具有较强的抗干扰能力。但是,它在解决回归问题方面的表现不如分类问题。同时,随机森林对小规模数据或低维数据的分类效果不佳。因此,这两种算法在某些方面仍有提升空间。