第三代验证码研究

随着机器学习与图像识别技术的发展,第一代、第二代验证码已经失去了安全验证的做用。为了增长识别难度,网站暴力升级图片验证码,严重破坏了用户体验。第三代验证码的诞生解决了这一痛点,第三代验证码已经再也不是狭义上的验证码,它经过多场景多维度进行数据收集,为网站提供立体式安全保障。算法

声明

  本文内容仅限于研究,不涉及各安全厂商具体源码与风控策略。维护网络安全,人人有责。chrome

 

背景

前段时间分析了市面上一些安全厂商的第三代验证码协议,如下内容不针对任何厂商,仅聊聊本身对第三代验证码的理解。canvas

验证码划代

(一)第一代验证码数组

定义:主要利用简单知识构建验证码。如中文、英文、数字等。浏览器

   



(二)第二代验证码安全

定义:以第一代验证码为基础,以创新交互方式的思想构建验证码。如看题选字、看图选物等。


     
服务器

(三)第三代验证码cookie

定义:多场景多维度收集数据信息,为网站提供立体式安全防御。


   网络

第一第二代验证码退出历史舞台的缘由

如下是我总结的两点缘由
(1)随着机器学习与图像是被技术的发展,第一代、第二代验证码已经失去了安全验证的做用;
(2)为了增长识别难度,网站暴力升级图片验证码,严重破坏用户体验。
举个例子

    


以上类型验证码咱们经过肉眼识别准确率大约为30%,但咱们拿到图片打码平台(魔镜)上用训练后发现准确率能超过90%。机器能作得比人好,其实这已经失去的验证码的意义。less

第三代验证码“很简单”

    最近经常会有人问我,研究的第三代验证码是否是就是滑块验证码?不就是把滑块滑动到指定位置吗?这有什么难的? 这让我想起,在还没加入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混淆

    分析第四步,生物行为模拟以后,坐标如何发送?以什么格式发送?要想知道答案就须要去了解其协议。分享淘宝的平展控制流混淆JS(3万行),让你们感觉下被JS支配的恐惧。https://g.alicdn.com/AWSC/uab/118.js?d=22
      

    (1)为何混淆?
       JS代码是透明且公开的,若是被轻易了解其中信息便可模拟请求,并与服务器通讯。要想解决这一问题,就必需要使用混淆和加密来解决代码安全隐患。
    (2)保护机制与原理?
      Ⅰ、使JS代码不可分析,防止动态跟踪调试
      Ⅱ、按期高频率混淆JS代码
      Ⅲ、按期高频率修改加密算法
    (3)如何进行JS混淆?
     Ⅰ、正则替换。成本低、效果差
     Ⅱ、语法树混淆。成本高、更灵活、更安全
    (4)常见混淆哪几种形式?
     Ⅰ、明文字符加密。对常量、变量以及函数名进行替换
     Ⅱ、控制流混淆。将代码块进行拆分,打乱函数执行流程,随机插入垃圾代码。

(五)浏览器多点存储技术

    分析第五步,在调试过程当中,可能会出现异常情况(验证码验证失败、验证码类型变动、网站拒绝访问等等)。不要怀疑,你的异常行为已经致使该机器被定位。这时候想到的第一件事,应该是删除cookie,可是删除cookie以后,问题仍是没获得解决,这是什么缘由呢?定位数据具有如下特征。
    (1)多点存储
        Cookie、SessionStorage、LocalStorage多点存储同一数据
    (2)难删除
        多点存储,分别存储于浏览器、用户本地。难以一次删除全部数据
    (3)防篡改
        防篡改机制,经过防篡改签名,内容和签名对应。服务端校验数据是否被篡改
    (4)可重生
        多点存储,任一存储点存在数据,每次访问数据从新植入全部存储点

(六)设备指纹

    分析第六步,在分析JS的过程当中会发现,浏览器还收集了其余的信息。那么这些信息是什么呢?其实收集的是设备信息,用户生成设备指纹。
    (1)设备指纹是什么?
        基于设备与运行环境等多维度收集信息,为设备单独生成的惟一识别码
    (2)为何收集设备指纹?
        须要对用户上网的设备的软硬件信息进行收集,为用户生成网络惟一身份标识。若用户存在恶意行为,可以精准鉴别用户身份,进行精确打击。
    (3)指纹收集角度?
        Ⅰ、硬件信息
        Ⅱ、软件信息
        Ⅲ、软件环境信息
        Ⅳ、服务器下发信息
    (4)收集什么信息?
        Ⅰ、设备与浏览器基本信息 (系统、内存、显卡、浏览器版本、浏览器当前语言、屏幕颜色深度、屏幕分辨率、浏览器插件等)
        Ⅱ、服务器存储本地的特性数据(前序请求数据、最新混淆HTML元素信息等)
        Ⅲ、浏览器或硬件设备在特性环境下的信息 (canvas图片渲染)
        Ⅳ、浏览器我的设置与信息 (浏览器屏幕占比、显示设置、是否开启控制台等)

(七)无感验证

    分析第七步,无感验证。多场景多维度收集用户信息,由风控系统断定用户等级以及是否启用进一步的行为校验。
             

(八)风险决策

    分析第八步,第三代验证码风控系统经过风险决策。结合参数校验、行为校验、网络探测、风险库、风险识别等步骤,最终对当前用户作出等级断定。
                

总结

    第三代验证码是无感知、立体式验证码。而咱们普通用户所看到的滑动或点选等形式的行为校验,只不过是风控系统没法准确判别时,进一步收集用户信息的一种方式。第三代验证码看似简单,实则暗藏玄机。

最后

    关于验证码,懂得很少,作得不多。欢迎批评与指教。

 原创文章,转载请标明出处!

相关文章
相关标签/搜索