验证码,设备指纹,第三代验证码,滑块验证码,顶象,极验
本文配合其他文章一起服用效果更好,能更全面体会安全产品的设计。
(1)《第三代验证码研究》https://www.cnblogs.com/boycelee/p/11363611.html(推荐)
(2)《顶象验证码破解与研究》https://www.cnblogs.com/boycelee/p/14269941.html(推荐)
(3)《极验验证码破解与研究》https://www.cnblogs.com/boycelee/p/14021048.html(推荐)
(4)《极验无感验证破解》https://www.cnblogs.com/boycelee/p/13951819.html
(5)《同盾小程序指纹破解》https://www.cnblogs.com/boycelee/category/1819211.html
随着机器学习与图像识别技术的发展,第一代、第二代验证码已经失去了安全验证的作用。为了增加识别难度,网站暴力升级图片验证码,严重破坏了用户体验。第三代验证码的诞生解决了这一痛点,第三代验证码已经不再是狭义上的验证码,它通过多场景多维度进行数据收集,为网站提供立体式安全保障。
声明
本文内容仅限于研究,不涉及各安全厂商具体源码与风控策略。维护网络安全,人人有责。
背景
前段时间分析了市面上一些安全厂商的第三代验证码协议,以下内容不针对任何厂商,仅聊聊自己对第三代验证码的理解。
验证码划代
(一)第一代验证码
定义:主要利用简单知识构建验证码。如中文、英文、数字等。
(二)第二代验证码
定义:以第一代验证码为基础,以创新交互方式的思想构建验证码。如看题选字、看图选物等。
(三)第三代验证码
定义:多场景多维度收集数据信息,为网站提供立体式安全防护。
第一第二代验证码退出历史舞台的原因
以下是我总结的两点原因
(1)随着机器学习与图像是被技术的发展,第一代、第二代验证码已经失去了安全验证的作用;
(2)为了增加识别难度,网站暴力升级图片验证码,严重破坏用户体验。
举个例子
以上类型验证码我们通过肉眼识别准确率大约为30%,但我们拿到图片打码平台(魔镜)上用训练后发现准确率能超过90%。机器能做得比人好,其实这已经失去的验证码的意义。
第三代验证码“很简单”
最近常常会有人问我,研究的第三代验证码是不是就是滑块验证码?不就是把滑块滑动到指定位置吗?这有什么难的? 这让我想起,在还没加入Qunar前,小王子在InfoQ上的分享。有人问他,机票价格为什么不能做成一张巨大的哈希表?有必要设计得这么复杂吗?从产品的角度来说,无论是Qunar机票报价还是第三代验证码都是非常成功的,因为优秀的产品就是让普通用户觉得“很简单”。
第三代验证码网上方案可行吗
在google或百度上搜索,就会发现很多文章分享如何通过机器模拟人的行为进行滑动验证码、点选验证码校验。解决方案无非就是一下两种形式:
(1)Selenium + Headless
(2)chrome插件模拟点击
注:
Selenium是一种用于Web应用程序测试工具。使用Selenium能够模拟真正用户操作浏览器的行为,例如模拟鼠标操作、模拟键盘操作等。
PhantomJS是一个”无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器更高效。
可行吗?我觉得在用户层面上是可行的,无非就是用户怎么操作,机器就怎么操作。但是一旦请求数达到某个阈值后,滑块就再也无法成功。这是什么原因导致的呢?下面我们来分析分析。
第三代验证码是什么?
以下是我对第三代验证码的概括
(一)立体防护
第三代验证码,已经不再是狭义上的验证码。多场景多维度进行数据收集,给网站提供立体的安全保障。
(二)无感验证
以无感、无知识的形式存在,极大提升用户体验。
(三)数据分析
利用机器学习对机器信息、行为数据等进行高维度地分析。
第三代验证码构成
以下是我总结的第三代验证码构成
(一)验证码图片
1)图片还原
2)图片识别
(二)人机识别
3)生物行为特征
4)设备环境信息监测(设备指纹)
(三)平台安全
5)代码混淆 (定时混淆)
6)加密算法 (高频率定时更新)
7) 浏览器多点存储技术(恶意行为标识)
(四)风控模型
8)风险决策 (基本行为校验、参数校验)
(五)行为验证
9)验证码(无感、滑块、点选等)
(六)反爬策略
(七)大数据风险库
第三代验证码分析流程
(一)图片还原
分析的第一步,图片被打乱,如何还原?
图片还原思路:
(1)切割图片,记录位置,最后找出规律
(2)通过前序请求返回值
(3)其他特殊方式,如图片名称、图片lbs、固定数组等
(二)滑块识别
分析第二步,缺口识别。(是否下发原图,视具体厂商而定)
滑块识别思路:
(1)暴力遍历(原背景图与缺口背景图相“与”,单片区域中存在大面积不同,返回坐标)
(2)边缘检测 (①提取单片边缘并构造二维矩阵②对图像进行处理凸显拼图在背景图中边缘③沿轨迹相与)
(3)机器学习(给图片打标,训练模型)
(三)行为模拟
分析第三步,行为模拟(滑块、点选、刮图等)。
行为模拟思路:
(1)低级数据伪造-自定义算法:
Ⅰ、 先快后慢
Ⅱ、临近卡槽动作模拟
(2)高级数据伪造-自定义算法:
Ⅰ、 收集人工滑动轨迹
Ⅱ、根据数据拟合模型,用模型构造轨迹
(四)JS混淆
(1)为什么混淆?
JS代码是透明且公开的,如果被轻易了解其中信息即可模拟请求,并与服务器通信。要想解决这一问题,就必须要使用混淆和加密来解决代码安全隐患。
(2)保护机制与原理?
Ⅰ、使JS代码不可分析,防止动态跟踪调试
Ⅱ、定期高频率混淆JS代码
Ⅲ、定期高频率修改加密算法
(3)如何进行JS混淆?
Ⅰ、正则替换。成本低、效果差
Ⅱ、语法树混淆。成本高、更灵活、更安全
(4)常见混淆哪几种形式?
Ⅰ、明文字符加密。对常量、变量以及函数名进行替换
Ⅱ、控制流混淆。将代码块进行拆分,打乱函数执行流程,随机插入垃圾代码。
(五)浏览器多点存储技术
分析第五步,在调试过程中,可能会出现异常状况(验证码验证失败、验证码类型变更、网站拒绝访问等等)。不要怀疑,你的异常行为已经导致该机器被定位。这时候想到的第一件事,应该是删除cookie,但是删除cookie之后,问题还是没得到解决,这是什么原因呢?定位数据具备以下特征。
(1)多点存储
Cookie、SessionStorage、LocalStorage多点存储同一数据
(2)难删除
多点存储,分别存储于浏览器、用户本地。难以一次删除所有数据
(3)防篡改
防篡改机制,通过防篡改签名,内容和签名对应。服务端校验数据是否被篡改
(4)可重生
多点存储,任一存储点存在数据,每次访问数据重新植入所有存储点
(六)设备指纹
分析第六步,在分析JS的过程中会发现,浏览器还收集了其他的信息。那么这些信息是什么呢?其实收集的是设备信息,用户生成设备指纹。
(1)设备指纹是什么?
基于设备与运行环境等多维度收集信息,为设备单独生成的唯一识别码
(2)为什么收集设备指纹?
需要对用户上网的设备的软硬件信息进行收集,为用户生成网络唯一身份标识。若用户存在恶意行为,能够精准鉴别用户身份,进行精确打击。
(3)指纹收集角度?
Ⅰ、硬件信息
Ⅱ、软件信息
Ⅲ、软件环境信息
Ⅳ、服务器下发信息
(4)收集什么信息?
Ⅰ、设备与浏览器基本信息 (系统、内存、显卡、浏览器版本、浏览器当前语言、屏幕颜色深度、屏幕分辨率、浏览器插件等)
Ⅱ、服务器存储本地的特性数据(前序请求数据、最新混淆HTML元素信息等)
Ⅲ、浏览器或硬件设备在特性环境下的信息 (canvas图片渲染)
Ⅳ、浏览器个人设置与信息 (浏览器屏幕占比、显示设置、是否开启控制台等)
(七)无感验证
分析第七步,无感验证。多场景多维度收集用户信息,由风控系统判定用户等级以及是否启用进一步的行为校验。
(八)风险决策
分析第八步,第三代验证码风控系统通过风险决策。结合参数校验、行为校验、网络探测、风险库、风险识别等步骤,最终对当前用户做出等级判定。
总结
第三代验证码是无感知、立体式验证码。而我们普通用户所看到的滑动或点选等形式的行为校验,只不过是风控系统无法准确判别时,进一步收集用户信息的一种方式。第三代验证码看似简单,实则暗藏玄机。
最后
关于验证码,懂得不多,做得很少。欢迎批评与指教。