APP下载

基于客户端信息和风险判别的动态验证码系统

2019-11-22任俊玲朴杨鹤然

中北大学学报(自然科学版) 2019年6期
关键词:余弦决策树鼠标

任俊玲,范 楠,朴杨鹤然, 常 江, 周 涛

(1. 北京信息科技大学 信息管理学院, 北京 100192; 2. 北京信息科技大学 计算机学院, 北京 100101;3. 武汉大学 国家网络安全学院, 湖北 武汉 430072; 4. 中国科学院大学 网络空间安全学院, 北京101408;5. 北京航空航天大学 软件学院,北京100028)

验证码是目前网站普遍使用的防范自动登录[1]等恶意网络行为的方法,该技术经过纯文本验证码、 图片验证码和交互式验证码等阶段,但由于HTML文件易被解析以及文本验证码可被识别等[2-4]安全性日渐减弱; 交互式验证码以基于人机知识差异的图像识别验证码和基于行为拖拽式的验证码[5-6]为代表,图像识别验证码用户体验较差[7],拖拽式验证码生成机制复杂,适用性受限,且均出现相应的自动识别技术[8-9].

针对上述问题,本文基于客户端用户环境信息和行为信息,结合多级风险判别和机器学习算法来实现用户验证,且通过动态获取验证和混淆代码等机制来增强系统的安全性,最终实现了一个用户体验较好而又区分度高的验证码系统.

1 系统设计思路

图 1 为基于客户端信息和风险判别的动态验证码系统实现流程图,该系统由客户端信息采集模块、 风险级别判定模块和二次验证模块三部分组成.

图 1 系统实现流程图Fig.1 Flow chart of system implementation

1.1 客户端信息采集模块

网站采用动态验证码机制,初始页面不显示验证码,只有当用户点击 “获取验证”按钮后,才会根据风险级别情况确定是否显示验证码; 同时,选择足以区分机器和人的客户端环境信息和用户行为信息等客户端信息,作为后续形成人机识别模型的特征属性; 最后,利用采集到的客户端信息通过混淆代码以及安全传输等机制来实现数据的安全传输和存储.

1.2 风险级别判定模块

通过决策树算法和余弦相似度算法对获取的客户端信息进行判别,确定其风险级别. 若经过两种算法判别的结果均为真实用户,则风险级别为低危,该用户直接通过验证; 若两种算法均判别为机器操作,则风险级别为高危,验证失败,禁止通过; 若一个算法判为机器操作,另一个算法判为真实用户操作,则为中危级别,需要进入二次验证模块.

1.3 二次验证模块

二次验证模块首先生成验证码图片,当用户输入验证码时,根据收集到的用户输入验证码字符的时间间隔以及输入内容是否正确,区分人工操作和机器操作. 若判定为人工操作,则验证成功,若判定为机器操作,则验证失败.

2 客户端信息采集

2.1 客户端信息的选择

机器在进行自动登录时比真实用户的操作快,且在到达验证码位置时鼠标轨迹多为有规则的,同时,机器实现自动登录时需要反复尝试验证码,因此访问频率会比正常用户高,为此,选择用户操作鼠标时在按钮上的悬停时间、 用户使用键盘输入字符的时间间隔、 响应时间(即从网页加载完成到用户执行“点击”行为的时间)、 鼠标在网页的移动轨迹坐标、 单一用户访问频率等构成客户端行为信息的辨识特性.

由于机器难以批量地模拟出正常客户端所需要的完整的环境信息,因此采集操作系统版本信息、 浏览器版本信息、 IP地址、 屏幕分辨率等作为客户端环境信息,作为进一步判断的依据. 上述环境信息可以为拥有特定机器的用户建立行为习惯模式,同时可以为判别是否是用户本人提供参考.

通过上述两方面得到客户端信息,如表 1 所示.

表 1 客户端信息

2.2 信息采集的实现

2.2.1 用户行为信息

1) 鼠标悬停时间(hovering time)的获取

当鼠标进入“获取验证”按钮时触发onmouseover事件,通过new Date().getTime()记录时刻t1,同理记录用户点击时刻t2,t2与t1的时间差即为鼠标在按钮上的悬停时间.

2) 鼠标轨迹(guiji)的坐标的获取

利用JavaScript脚本在网页上创建一个canvas画布,收集用户鼠标在画布上移动时各轨迹点的坐标.

3) 输入字符时间间隔(average time)的获取

用户输入验证码时,按下键盘触发keydown事件,记录为时刻t3,松开按键触发keyup事件,记录时刻为t4,t4与t3的差即为输入一个字符的时间间隔,叠加所有字符的输入时间间隔记录为总时间,由此计算平均输入一个字符的时间间隔t5作为输入字符时间间隔.

4) 响应时间(response time)的获取

响应时间是指浏览器页面加载完成时刻t6到用户作出响应时刻t7间所使用的时间,为t7与t6的差值.

5) 单一用户访问频率(rate)的获取

单一用户访问频率为单一用户单位时间内(以小时为单位)的登录次数.

2.2.2 客户端环境信息

1) 浏览器信息(type)和操作系统信息(os)的获取

利用JavaScript中的Navigator对象获取用户浏览器版本以及操作系统的版本信息.

2) 屏幕分辨率信息(screen)的获取

利用JavaScript中的Window对象获取屏幕分辨率的高度和宽度.

3) IP地址(IP)的获取

通过第三方接口CityJson获取用户的IP地址.

4) 客户端环境信息个数(custom)

机器模拟仿真时有些客户端环境信息无法获取到,因此,并不将各客户端环境信息直接作为分类属性,而将统计得到的环境信息个数作为客户端环境信息的分类属性.

2.3 系统安全机制的实现

2.3.1 动态验证码机制

常见的验证码为直接显示在网页上,只要有一种识别算法对验证码进行破解就可以绕过其验证. 为了增加计算机自动识别验证码的难度,在初始页面不显示验证码,只显示“获取验证”按钮,只有当用户点击 “获取验证”按钮后,根据风险级别确定是否显示验证码. 同时,由于固定按钮位置易被定位,因此,“获取验证”按钮每次均出现在不同的随机位置,且横向滚动.

2.3.2 代码混淆[10]机制

为了克服JavaScript代码在前端为明文的特点,利用JavaScript代码混淆器对其进行处理. JavaScript混淆器通过使用统一码(Unicode)、 美国信息交换标准代码(American Standard Code for Information Interchange,ASCII)编码或使用异或运算(XOR)等等替代已有的代码字符串,这种转换后的版本较难还原,能对源代码起到保护作用.

2.3.3 安全传输机制

在数据传输过程中,从密文传输和防止SQL注入[11]两方面设置安全机制,具体为:

1) 通过HTTPS实现数据前端到后端的加密传输.

2) 为防止SQL注入,在服务端对用户输入进行过滤,即:先对用户输入内容进行解析,检查提交的内容中是否包含select、 insert、 update、 delete、 '、 *、 union等SQL注入字符,如果匹配到,则通过字符串转义的方法使SQL注入无法实现,进而保证网页安全.

3 基于决策树算法的客户端信息分析

3.1 决策树算法

决策树(Decision Tree,DT)为树形的结构,通过寻找最佳划分特征进而实现样本分类. 决策树的内部节点表示为某个特征的阈值,而叶节点则表示一个类和其分布,决策树的分类规则不仅易于理解而且准确率较优. 本文选用C4.5算法构建决策树,该算法通过最大信息增益率进行节点选择,通过自顶向下的递归的方法对树进行构造[12].

3.2 基于客户端信息的决策树生成

本文选取用户行为信息中的鼠标悬停时间、 键盘输入字符的时间间隔、 响应时间、 单一用户访问频率以及客户端环境信息中的环境信息个数作为决策树分类属性,收集了共500条用户和机器数据作为训练样本,通过C4.5算法建立机器和真实用户的决策树分类模型. 决策树训练样本示例如表 2 所示,其中result为该样本所属类型,最终建立的基于客户端信息的决策树如图 2 所示.

表 2 决策树训练样本示例

图 2 基于客户端信息的决策树Fig.2 Decision tree based on client information

4 基于余弦相似度的鼠标轨迹验证

4.1 余弦相似度算法

余弦相似度又称为余弦相似性,是通过测量两个向量夹角的余弦值来度量向量间相似性的一种方法,余弦值的范围在[-1,1]之间,值越趋近于1,代表两个向量的方向越接近; 越趋近于-1,二者的方向越相反; 接近于0,表示两个向量近乎于正交.

在二维空间,设向量a,b的坐标分别为(x1,y1)、 (x2,y2) ,则两向量的余弦相似度如式(1)所示.

(1)

4.2 鼠标轨迹验证的实现

对于真实登录用户,鼠标轨迹一般不为直线,且两次鼠标轨迹不完全相同,为此可以通过判断用户鼠标轨迹的多项式函数是否为一次型以及不同次时轨迹是否相同来进行验证. 该方法的具体实现流程图如图 3 所示,具体为:

1) 收集鼠标移动时各轨迹点的横坐标x和纵坐标y;

2) 将收集到的鼠标轨迹坐标点进行多项式拟合;

3) 通过最高幂次判断多项式是否为一次型,分以下两种情况:

a)多项式最高幂次为1,为一次型,直接判定为机器操作;

b)多项式最高幂次大于1,但大于1的幂次系数之和小于阈值α,则说明高幂次系数很小,故忽略不计,此时也认为该多项式为一次型,也判定为机器操作.

4) 若拟合的多项式不为一次型,则进行余弦相似度判别:

将本次采集的鼠标轨迹横坐标系数与对同一用户名且收集到的横坐标系数也相同的向量进行余弦值计算,设定阈值β,当余弦相似度大于β时,则认为该用户为机器模拟的用户.

图 3 基于余弦相似度的鼠标轨迹验证实现流程图Fig.3 Flow chart of mouse track verification based on cosine similarity

为了确定该算法中的阈值,分别选取真实用户操作样本和机器模拟操作样本进行训练,其中,真实用户操作样本为用户直接访问得到,模拟机器操作样本则使用模拟鼠标轨迹的工具进行采集. 通过训练,确定两个阈值分别为α=0.005,β=0.99.

图 4 为一次型判定中高幂次系数和较小的情况,由图所示,x,y为鼠标轨迹的横纵坐标,此时x的最高幂次为3,二次幂和三次幂的系数分别为0.003 522和1.69×10-6,计算这两个幂次系数之和,为0.003 520 298 043 36,小于0.005,故判别为机器操作.

图 4 高幂次系数和较小时的一次型判定Fig.4 Linear decision with smaller high order polynomial coefficients

图 5 则为基于余弦相似度的轨迹验证情况,其中,X,Y为已经保存的用户的鼠标轨迹横纵坐标,X1,Y1为当前采集到的鼠标轨迹横纵坐标,以这两组坐标为向量求其余弦值为1,大于0.99,可判断X1,Y1对应的样本为机器操作.

图 5 基于余弦相似度的轨迹验证示例Fig.5 Example of track verification based on cosine similarity

5 二次验证的实现

二次验证中验证码图片生成过程如图 6 所示. 此处的验证码图片为特定大小、 背景和颜色逐次设定且以加干扰的随机数字为内容的图片.

验证码图片生成后,需要用户输入验证码,同时收集用户输入验证码字符的时间间隔,将此间隔与决策树生成阶段得到的平均字符时间间隔阈值62 ms进行比较,小于此阈值则判定为机器操作,若大于此阈值则判定用户输入的验证码内容是否正确,若输入正确则验证成功,输入不正确则验证失败.

图 6 验证码图片的生成过程Fig.6 Generation process of captcha image

6 系统测试

6.1 风险级别判定性能测试

风险级别判定模块为根据决策树算法的分类结果和余弦相似度算法的评价结果对当前用户的风险级别进行判定,其判定结果将直接影响整个系统的验证性能. 为了对其性能进行分析,选取200个用户作为测试数据,其中真实用户和机器模拟用户各为100个. 在测试中,决策树的分类准确率为100%,在基于余弦相似度算法进行轨迹判别时,6名真实用户操作由于与机器操作极为相似,被判定为机器操作,对100个机器模拟用户操作则无论基于决策树还是余弦相似度的判定都为100%,其统计结果如表 3 所示.

由此可见,该模块的精确率[12]为

(2)

召回率[12]为

(3)

F值[12]为

96.9%,

(4)

其中,TP(True Positive)为真实用户操作判断正确的数量,FP(False Positive)为机器操作样本被判定为真实用户的数量,FN(False Negative) 为真实用户样本被判断为机器操作的数量. 由上可知,风险级别判定模块具有较高的性能,从而能够确保整个系统的良好性能.

表 3 风险级别判定性能测试表

6.2 功能测试

用户应用该系统时,首先进入网站进行登录,登录界面如图 7 所示.

图 7 系统登录界面Fig.7 System login interface

此时验证码并未直接在界面显示. 在用户登录过程中,系统采集用户行为信息和客户端环境信息,并分别通过决策树和鼠标轨迹对用户进行验证. 若两种算法都判别为真实用户操作则返回危险级别为低危,允许通过验证,如图 8 所示; 若两种算法都判别该样本为机器操作,则风险级别为高危,不允许通过验证,如图 9 所示; 若两种算法的判定结果不同,则为中危风险级别,需要进行二次验证.

图 8 验证通过界面Fig.8 Interface of successful verification

图 9 高危风险时验证失败界面Fig.9 Interface of failure verification in high risk

二次验证初始界面如图 10 所示,用户需要根据验证码图片上的字符输入验证码,输入过程中,系统收集用户输入字符时间间隔和输入内容,若验证码输入错误,则禁止通过,如图 11 所示; 若输入内容正确但输入字符平均时间间隔小于真实用户平均输入时间间隔,则验证失败,如图 12 所示; 若验证码输入正确且字符时间间隔满足要求时,则验证通过,如图 8 所示.

图 10 二次验证初始界面Fig.10 Initial interface of secondary validation

图 11 二次验证中验证码输入错误界面Fig.11 Interface of incorrect validation code input in secondary validation

图 12 二次验证失败Fig.12 Interface of failure secondary verification

7 结 论

验证码技术被广泛应用于用户登录时进行人机识别,当前的验证码系统在用户体验和系统安全性的兼顾方面有待提高. 本文提出的验证码系统,大多数用户只需点击“获取验证”按钮即可,不再需要用肉眼识别各种复杂的文字或者图片,对于无法直接通过验证的用户,则通过客户端信息和风险级别判定相结合进行二次验证,最终实现了一个用户体验较好而又区分度高的人机识别系统.

猜你喜欢

余弦决策树鼠标
旋转变压器接线故障分析法的研究
决策树和随机森林方法在管理决策中的应用
决策树学习的剪枝方法
两个含余弦函数的三角母不等式及其推论
决策树多元分类模型预测森林植被覆盖
实施正、余弦函数代换破解一类代数问题
分数阶余弦变换的卷积定理
鼠标折叠笔
决策树在施工项目管理中的应用
45岁的鼠标