牛红峰,朱蓉蓉,李永明,丁洁,蔡忠闽
(1.西安交通大学智能网络与网络安全教育部重点实验室,710049,西安;2.西安交通大学电子与信息学部,710049,西安)
人机检测是网络系统分辨人和脚本机器人的技术。脚本机器人是指自动访问和操作信息系统人类操作界面的程序或脚本。脚本机器人是一把双刃剑:一方面,它们能代替人完成枯燥、重复的工作,如搜索引擎通过网络爬虫大规模采集网站信息,建立索引方便人们快速定位到需要的网络资源;另一方面,利用网络机器人可实现拖库、撞库等攻击,给用户的信息、财产等造成极大的安全隐患。更为严重的是,基于脚本机器人的抢票、游戏外挂、刷单等行为破坏了互联网经济的公平性。因此,区分人机的检测技术对互联网生态系统至关重要[1]。
针对人机检测问题,很多检测方法,如短信验证、邮箱验证、CAPTCHA(俗称“验证码”)[2]等,被相继提出。由于短信验证的成本较高以及邮箱验证的迟滞性,目前大多数采用基于CAPTCHA的方式进行人机检测,常见有的文本输入式、滑动式、点选式等类型。然而,随着人工智能的发展尤其是图像识别技术的发展,通过CAPTCHA的方式检测脚本机器人的能力逐渐弱化[3]。基于CAPTCHA原理研制的reCAPTCHA是一种具有广泛影响力的人机验证技术,也早在2017年被Brown等破解[4]。随着深度学习方法在图像领域的深入应用,快速、高精度地识别CAPTCHA成为了可能[5]。
基于行为的检测技术是人机检测领域的另一个重要方向。Miashima等通过分析正常用户和游戏机器人在服务器端日志数据中的速度和动作频率等行为模式对游戏机器人进行检测[6]。Chung等通过用户的行为相似性来观察和分组用户的游戏行为,为每个玩家群开发了一个本地机器人检测模型[7]。Kantepe等提出通过分析推特用户在语义、句法、网络流等方面的行为差异区分机器人账户与正常人类账户[8]。Chu等将基于行为的人机检测方法应用于网页端,通过分析不同复杂程度的脚本机器人与正常人的键盘、鼠标等操作行为的差异性,进行人机检测[9]。van der Walt等提出利用机器学习的方法对比正常人类与脚本机器人产生的虚假账户的不同[10]。上述研究利用基于行为的人机检测方法取得了不错的检测效果,验证了基于行为的方法用于人机检测的有效性。然而,以上研究都采用二分类方法进行人机检测。在实际检测中,脚本机器人种类复杂多样,防御方无法获取所有类型的机器人样本数据,因此二分类方法无法对新型未知机器人进行训练、建模。但是,单分类方法能够针对某一类目标样本进行单独建模[11]、设定目标类边界、区分异常类与目标类,常用于异常检测[12]、入侵检测[13]等样本极度不平衡或者样本较难获取的场景中。
因此,本文提出基于单分类的人机检测方法,通过收集正常用户的鼠标行为数据[14],建立仅利用正常用户的鼠标行为的人机检测模型。该方法解决了人机检测领域中面对新型机器人层出不穷导致的检测效果不理想的问题,具有较高的泛化能力。
本文提出的基于单分类方法的人机检测模型框架如图1所示,包括鼠标行为获取、特征构建及单分类人机检测模型共3个模块。
图1 单分类人机检测框架
本文以典型的网页登录页面为数据获取场景,将编写好的JavaScript内嵌在网页中用于捕获用户操作鼠标时的行为数据。本文设计的登录场景页面如图2所示,用户首先通过客户端浏览器打开网页登录页面,然后通过鼠标拖动依次完成输入用户名、密码、验证码、点击登录等操作,完成正常的网页登录。JavaScript会自动采集上述过程的鼠标行为数据。
图2 本文设计的登录场景页面
用户在登录页面的操作通常由鼠标和键盘共同组成,鼠标操作被键盘操作分割为多段移动过程。本文将每一段连续的鼠标数据进行单独处理提取相应的特征,得到描述每段鼠标移动的特征向量,将每次登录操作中多段鼠标移动的特征向量求均值,得到描述本次登录鼠标行为的特征向量。
表1 鼠标行为的特征
图3 鼠标轨迹片段
该模块包含模型训练与检测两个阶段。
训练阶段:正常用户的鼠标行为样本经过数据预处理及特征提取之后,以特征向量的形式输入单分类器,单分类器利用正常用户样本的特征向量构建单分类检测模型并保存。
检测阶段:该阶段的样本为未知样本,未知样本以特征向量形式输入已训练的检测模型,模型根据设定的阈值判定样本是否属于正常用户。
本文选取模式识别中常用的4种单分类器进行人机检测,基本原理如下。
(1)Parzen窗。Parzen窗是一种具有坚实理论基础和优秀性能的非参数函数估计方法[15],该方法利用一组样本中一定范围内各点密度的平均值对总体密度函数进行估计,能够较好地描述一维或多维数据的分布情况。Parzen窗利用参与训练的正常用户样本来估计描述正常用户样本的特征空间,从而实现对正常用户样本的建模。Parzen窗有多种核函数,本文采用正态核函数。
(2)支持向量数据描述(SVDD)。SVDD方法在映射到高维特征空间中找出一个包围目标样本点的超球体,通过最小化超球体的体积让目标样本点尽可能地被包围在超球体中,而非目标样本点尽可能地在超球体外,从而达到两类之间划分的目的[16]。利用SVDD方法能够计算出正常用户样本特征空间的最小超球体中心及半径,从而将超球体之外的样本判定为来自脚本机器人。
(3)k均值。k均值方法假定属于正常用户样本之间的距离相互较近,而正常用户与异常用户样本之间的距离相对较远[17]。在训练阶段,每k个簇的质心被认为是正常用户。在测试阶段,输入的未知样本特征向量到最近质心的欧几里德距离被认为是该样本的分类得分,通过设定不同阈值来判定该样本是来自正常用户还是来自脚本机器人。
(4)k近邻(knn)。knn方法基于新样本与训练集中样本的相似度来建立模型[18]。在训练阶段,分类器通过计算正常用户样本中两两样本的曼哈顿距离从而建立起正常用户样本的距离矩阵,决定了分类器的分类阈值。在检测阶段,分类器计算未知样本与正常用户每个样本的曼哈顿距离。该样本到最近的前k个样本均值被用作knn分类器的检测得分。如果该未知样本的得分阈值低于决策得分,那么该样本将会被看成由脚本机器人生成。
(1)硬件参数。整个实验在相同采集环境下进行,实验设备为1台PC机,具体参数如下:操作系统为Windows 7,显示器型号为HP ModelL 1710,显示器分辨率为1 280×1 024,内存为2 GB,CPU型号为Pentium(R) Dual-Core 3.06 GHz。
(2)数据信息。采集的信息包含一系列鼠标事件标签、运动轨迹的坐标、时间戳、屏幕分辨率、浏览器信息等。
(3)正常用户数据的获取。召集了30名在校大学生完成数据采集任务,其中22名男生、8名女生,全部习惯右手操控鼠标,每次采集5组数据,连续采集6周,每人共采集30组数据。
(4)脚本机器人的设计。脚本机器人设计者在针对具有行为防御手段的网页进行脚本机器人攻击时,为逃避服务器对脚本机器人的检测,会尽可能地让脚本机器人模拟正常用户的操作行为。因此,设计者在设计脚本机器人时,需要了解正常用户的操作行为并使脚本机器人产生拟人的操作行为(如鼠标移动、键盘点击等)以规避服务器的检测。
目前,虽有一些可以模拟人类操作行为的公开工具箱(如按键精灵、Auto KeyBoard等),但并没有公开真正意义上进行人类行为模拟的脚本机器人,更没有相关的公开数据。因此,本文根据脚本机器人相关资料,设计并实现了一种具有一定代表性模拟人类行为的脚本机器人,用于验证本文提出的单分类人机检测方法的实用性和有效性。
正常用户在访问页面时,会产生鼠标移动、键盘点击等基本操作行为,本文在设计脚本机器人时,会最大限度地模拟正常用户在网页端登录场景中的行为。脚本机器人在网页上的操作行为从鼠标移动轨迹形状和速度这2方面进行描述。在鼠标移动轨迹方面,设计了直线、规则曲线、不规则曲线共3类代表不同复杂程度的轨迹形状,用于验证单分类器对不同类型的脚本机器人均具有良好的检测性能。选取抛物线形状作为规则曲线轨迹的代表,利用计算机图形学中的贝塞尔曲线[19]生成方法实现上述3种轨迹形状。在鼠标移动速度方面,通过计算30人的鼠标移动速度统计属性,设计产生3种不同速度:恒定速度,符合均匀分布的速度,符合高斯分布的速度。本文设计的3类共9种脚本机器人的属性如表2所示,每类脚本机器人分别产生300个样本。
表2 3类共9种脚本机器人的属性
区分性较差的特征和冗余特征会对模型产生较大影响,导致训练时间浪费及分类模型复杂。此外,直接使用全部特征集会导致建模过程中产生过拟合等问题,从而降低模型的泛化性能。因此,本文剔除对分类模型贡献较少的特征,保留性能较好的特征子集,利用筛选出的特征子集进行模型的训练,从而提高模型的泛化能力。
本文采用机器学习中广泛用于特征选择的Fisher Score方法[20]进行特征选择,具体过程如下:
(1)从正常用户样本和直线脚本机器人样本中随机抽取等量样本并以特征向量的形式保存;
(2)为正常用户样本与直线脚本机器人样本分别标注为1和0;
(3)将标注好的特征向量送入Fisher Score特征选择器;
(4)特征选择器输出各特征的Fisher Score,用SFisher表示。
表3为15个特征的SFisher,得分越高表明特征区分度越明显,可以看出:自编号15开始的8个特征的得分较低且趋于稳定,因此选出编号为1、2、11、6、7、12、5共7个具有较高得分的特征进行实验。
表3 15个特征的SFisher
收集30人的数据为正样本,脚本机器人在登录时产生的数据为负样本。训练阶段选取一定数量的正样本作为训练集,为每种单分类器创建正常用户检测模型。测试阶段分别选用剩余正样本与负样本来测试检测模型。
为了实验公平性,正常用户的测试样本和训练样本由不同用户群产生。为降低随机因素对实验的影响,每种实验进行500次,取均值作为实验结果。
误识率表示脚本机器人样本被误认为正常用户样本的数量占测试集中所有脚本机器人样本的比例。拒识率表示正常用户样本被误认为脚本机器人样本的数量占测试集中所有的正常样本的比例。等错误率REE表示误识率与拒识率相等时的错误率,本文采用REE作为评估模型检测性能的指标。
本实验对比分析4种常见单分类器在人机检测方面的性能。采用10折交叉验证的方法,随机抽取27人,得到共27×30个样本数据进行训练,选取剩余3人共3×30个样本数据用于测试。为保证测试集内正常用户样本与脚本机器人样本平衡,从每类脚本机器人中,随机选取90个样本参与测试。表4呈现了4种分类器分别利用7个特征与15个特征进行检测时的REE。
表4 单分类器对不同类型脚本机器人检测的REE
注:表中加粗数据为最优值。
从表4可以得出:单分类器对脚本机器人检测效果最好时REE为7.25%、最差时为28.37%,能够实现对脚本机器人的有效检测;利用经过特征选择后的特征子集参与检测,检测性能从高到低的分类器依次为SVDD、Parzen窗、knn、k均值;利用全部15种特征参与检测,检测性能从高到低的分类器依次为Parzen窗、SVDD、knn、k均值;SVDD与Parzen窗在不同的特征集中均表现出较好的检测性能;随曲线轨迹复杂程度的提高,单分类器的检测效果逐渐降低;相较于使用全部15种特征,采用经过特征选择之后得出的7种特征子集进行检测时,单分类器的性能有较大的提升,如SVDD对直线类型脚本机器人检测时,REE从15.88%降低至7.25%,证明了特征选择的有效性。
为探索训练样本规模对单分类人机检测方法的影响,选取3.1节实验中检测性能最好的SVDD和Parzen窗这2种单分类器,利用经特征选择后的特征子集进行检测。随机选取3人的全部样本作为测试集,根据测试集中正常用户样本的数量,随机从不同类型脚本机器人样本中抽取等量的测试样本,使测试集中正常用户样本和脚本机器人样本的数量始终保持平衡。训练集从除测试集以外的27人中抽取,本实验依次随机选取9、12、15、18、21、24、27人的全部样本作为训练集,分析训练集增加过程中检测效果的变化。表5为不同训练规模下2种分类器对3种不同复杂程度的脚本机器人检测结果。
表5 不同训练规模下人机检测的REE
注:表中加粗数据为最优值。
从表5可以看出,随着训练样本规模的增大,无论检测何种类型的脚本机器人,2种分类器的检测性能均越来越好,即REE随着训练规模的增大逐渐降低。以SVDD分类器为例,在对直线轨迹的脚本机器人检测时,随着训练规模从9人增至27人,检测的REE从7.99%逐渐降至7.25%。这是因为更多的训练样本能够使单分类器更全面地针对目标类样本进行建模,得到更好的检测模型,从而能更好地区分正常用户和脚本机器人。此外,在对同种类型脚本机器人检测时,SVDD分类器均优于Parzen窗分类器,推测是因为SVDD分类器可以弥补先验知识的不足,将分类问题转化为二次优化问题,使其仍然能保持相对较高的准确性[21]。
为进一步说明单分类方法的有效性,与经典的二分类方法支持向量机(SVM)和knn进行比较实验。在对已知类型的脚本机器人检测时,部分正常用户参与训练,剩余的正常用户样本参与测试,参与训练和检测的机器人样本来自同种类型的脚本机器人。在对未知类型的脚本机器人检测时,训练样本为部分正常用户样本和某类脚本机器人样本,测试样本为剩余正常用户样本和异于训练集中机器人类型的脚本机器人样本。利用经过特征选择后的7个特征参与实验,具体结果如表6和表7所示。
表6 二分类器对已知类型脚本机器人检测的REE
表7 二分类器对未知类型脚本机器人检测的REE
注:表中加粗数据为最优值。
分析表6和表7可得:二分类器对已知类型脚本机器人具有较好的检测效果,但对未知类型脚本机器人的检测效果大幅下降;SVM和knn这2种二分类器对未知类型脚本机器人检测效果最好的REE仅为22.12%、20.56%,而在第3.1节的实验中,单分类器对未知类型的规则曲线和非规则曲线脚本机器人检测效果最好的REE分别为9.45%、12.70%。由此得出:二分类器建立针对已知类型脚本机器人的检测模型,适用于对已知类型脚本机器人的检测,对未知类型脚本机器人会出现较大的检测误差,可泛化能力较弱;单分类器基于正常用户样本建立人机检测模型,不用考虑脚本机器人类型的改变,可泛化能力较强。
本文提出一种基于行为的人机检测技术,采用单分类方法建立人的鼠标行为模型,实现对带有行为模拟功能高级脚本机器人的检测。以网页端登录场景中的鼠标行为为研究对象,仅利用正常用户鼠标行为数据,建立基于单分类方法的人机检测模型,实现对3种不同复杂程度轨迹的脚本机器人的检测。实验结果表明:经过特征选择之后,性能表现最好的SVDD单分类器对直线类型脚本机器人检测的REE为7.25%,单分类方法的可行性得到了验证;单分类器的检测性能随着训练规模的增大而提升,当训练人数为9时,SVDD分类器对直线类型脚本机器人检测的REE为7.99%,当训练人数为27时,REE为7.25%;knn与SVM这2种二分类器在面对未知类型脚本机器人时,检测性能表现最好的为knn基于规则曲线脚本机器人建立的检测模型对直线类型脚本机器人的检测,此时REE为20.56%,但仍大大低于本文所用单分类器对未知类型脚本机器人的检测性能;单分类方法在面对新型未知样本脚本机器人时展示了较强的泛化性。
由于在实际场景中脚本机器人类型复杂多变、未知性强,因此本文提出的人机检测方法具有较强实际应用意义,可为人机检测提供一种新的思路。