验证码的前世今生(今生篇)

验证码的前世今生(今生篇)


作者:南浔@阿里安全


看完《验证码的前世今生(前世篇)》也许第一感觉就是Winter is coming,互联网的人机对抗到了最黑暗的时刻。柳暗花明又一村,最黑暗的时刻也是光明即将来临的时刻——在传统验证码的末日新的反向图灵测试机制浴火重生。

0×1 验证码的划代标准

在介绍新的反向图灵测试机制前,首先我们对验证码进行划代对比。通过验证码的划代对比我们能更清楚新型验证码的特性。

验证码划代的标准是人机识别过程中基于对人类知识的应用。

第一代:标准验证码

这一代验证码是即是我们常见的图形验证码、语音验证码,基于机器难以处理复杂的计算机视觉及语音识别问题,而人类却可以轻松的识别来区分人类及机器。这一代验证码初步利用了人类知识容易解答,而计算机难以解答的机制进行人机判断。

第二代:创新验证码

第二代验证码是基于第一代验证码的核心思想(通过人类知识可以解答,而计算机难以解答的问题进行人机判断)而产生的创新的交互优化型验证码。第二代验证码基于第一代验证码的核心原理--“人机之间知识的差异”,拓展出大量创新型验证码。

如12306的验证码也是对于传统验证码的一种创新:

第三代:无知识型验证码

第三代验证码最大的特点是不再基于知识进行人机判断,而是基于人类固有的生物特征以及操作的环境信息综合决策,来判断是人类还是机器。无知识型验证码最大特点即无需人类思考,从而不会打断用户操作,进而提供更好的用户体验。

如Google的新版ReCaptcha:

阿里巴巴的滑动验证:

0×2 无知识型验证码的原理

Step 1:在Web前端周期性的对Javascript代码进行混淆和并更新加密算法,将不可信的Web前端打造成可信的客户端。在用户进行滑动操作时,基于可信的客户端采集用户操作的行为信息以及环境信息,将其加密后提交给后端的风控引擎;

Web前端因为代码都是明文形式的脚本语言,服务端想要从客户端获取可信的数据一直面临“源码面前,了无秘密”的困扰。给一个前端工程师充足的时间,似乎Web前端真的是了无秘密,如下图:

而随着攻防对抗的持续,安全的补锅匠们总能找到猥琐的方法来进行防御。Web前端虽然没有客户端防止逆向和调试的安全强度,但是却具备客户端所不具有的hotpatch能力。

参考Map-Reduce的原理,单台机器性能不行,把任务分派到多台机器并发执行。如果单份Javascript混淆的强度不可行,那么周期性的对Javascript代码自动混淆。即便攻击者能够短时间的对Web前端进行逆向,但逆向出来的功能短期之后就会在服务端失效,那么也能极大的消耗攻击者的成本。

更可怕的是丧心病狂的Google基于Javascript完全的实现一套虚拟机,核心代码使用字节码实现。周期性的对字节码格式更新逆向的成本成几何级数递增。

如果代码逻辑不更新,仅仅重复的混淆原有逻辑,那么仍然没有意义。而对于一个Web的验证码应用,核心功能只有两部分:

1、事件采集模块,采集用户的行为信息,此部分逻辑简单,也无法自动化更新代码逻辑;

2、行为数据加密模块,该部分的核心是加密算法,似乎代码逻辑自动化更新变化有足够空间。

为了保障前端的可信,需要对加密算法进行自动化更新,必须要有一个巨大的对称加密算法可选集合才能保证代码的自动化更新。而所有对称加密算法都基于Feistel分组密码结构,基于Feistel分组密码结构可以派生出无数的对称加密算法,从而可以派生出无数的的对称加密算法。

如下图,Festel分组结构的可逆性不要求加密的核心函数F可逆,故可以自动的生成任意的F函数进而派生出无数对称加密算法。

基于自动化的代码更新及混淆机制从而保障整个Web代码对抗逆向分析和调试的强度,进而将不可信的Web前端打造成可信的端。

Step 2:后续风控引擎会基于用户操作的行为特征、用户环境信息、用户对应的设备指纹及其设备信誉综合进行决策,判断是否需要对该次操作进行二次判断或者是直接阻断。

0×3 无知识型验证码的优点

无知识型验证码有三大核心优点,分别是用户体验,风险识别,风险拦截。

用户体验:

无知识型验证码针对大多数的用户能够无需思考,直接通过。不存在业务和流程的打断,体验流畅,对用户体验的提升毋庸质疑。

风险识别:

因为随着机器学习的发展让机器掌握人类具有的知识也不再是难点,无知识型验证码不再基于知识来挑战机器,而是基于人类的固有行为特征以及操作的环境信息综合进行风控决策,攻击者难以批量的模拟出可以欺骗风控引擎的正常人类的的操作。

风险拦截:

普通的验证码基于知识对机器发起挑战,无法做到对机器进行阻断。因为知识的挑战还需要兼顾人类的体验,机器通过的概率只能做到无限的降低而无法消除。而无知识型验证码基于后端的风控决策,可以对不同风险的操作提出更高难度的验证码乃至阻断,有更大空间对风险进行消除和拦截。

0×4 总结 

目前阿里聚安全提供的滑动验证产品,目前对外提供免费试用,欢迎申请免费试用

最后,希望新型的验证码能够建设更简单和安全的互联网: )

作者:南浔@阿里安全,更多安全类知识及资讯,请访问阿里聚安全博客

时间: 2016-11-02

验证码的前世今生(今生篇)的相关文章

php实现验证码的识别(中级篇)

 在上篇文章 <php实现验证码的识别 (初级篇 ) > 中,讲了如何识别简单的验证,这里的简单只的是验证码有数字和字母组成,格式统一,每次出现位置固定.这篇文章将继续深入研究识别验证码,这次识别的目标是,验证码有字符和数字组成,验证码存在旋转(可能左右都旋转),位置不固定,存在字符与字符之间的粘连,且验证码有更强的干扰素.这篇文章讲解的方法,并不是万能的解决方案,并且提供代码不能直接解决你的问题,这里仅仅是方法,具体需求读者自己解决,需要说明的是,识别验证码与具体的编程语言无关,这里只是使用

验证码的前世今生(前世篇)

常在网上晃悠的人,对上面这张图都不会陌生.特别是在注册新账号.确认交易时,它们都会频繁出现,要求我们输入正确的验证码,那这些看上去跟我们要做的事情完全无关的验证码到底有何作用呢? 0×1 诞生 首先,先介绍下验证码程序的提出者,路易斯·冯·安(Luis von Ahn).2002年,路易斯和他的小伙伴在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念.该程序是指,向请求的发起方提出问题,能正确回答的即是人类,反之则为机器.这个程序基于这样一个重要假设:提出的问题要容易被人类解答,并

php实现验证码的识别(初级篇)

近期研究一些突破验证码方面的知识,记录下来.一方面算是对这几天学习知识的总结帮助自己理解:另一方面希望对研究这方面的技术同学有所帮助:另外也希望引起网站管理者的注意,在提供验证码时多些考虑进去.由于刚刚接触这方面的知识,理解比较浅显,有错误再所难免,欢迎拍砖.验证码的作用: 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试.其实现代的验证码一般是防止机器批量注册的,防止机器批量发帖回复.目前,不少网站为了防止用户利用机器人自动注册.登录.灌水,都采用了验证码技术.所谓

验证码对抗之路及现有验证机制介绍

验证码对抗之路及现有验证机制介绍 目明@阿里聚安全 yahoo邮箱在九几年的时候,业务深受各种邮箱机器人的困扰,存在着大量的垃圾邮件,于是他们找到了当时仍在读大学的路易斯·冯·安(Luis von Ahn),并设计了经典的图形验证码,即通过简单的扭曲图形文字进行机器的识别. 通过这个简单的图形,他们很快的控制住了垃圾邮件的数量,并将大量的机器人据之门外. 但是即使验证码解决了垃圾邮件的问题,我们仍要提出一个问句: 验证码是必要的吗? 阿里有句简单的话:不忘初心,方得始终. 验证码不是一个功能性的

黑产揭秘:“打码平台”那点事儿

简介 互联网业务的飞速发展,日渐渗透人类的生活,对经济.文化.社会产生巨大的影响,同时互联网业务安全也日趋重要.如同网络通信的基础安全设施防火墙,互联网业务安全也有其基础安全设施--图片验证码和短信验证码.在互联网业务中,广泛使用图形验证码用于区分人类和机器,使用短信验证码过滤低价值用户及提供二次校验功能. 作为互联网业务的基础安全设施,图片验证码和短信验证也面临众多的挑战.此前我们通过<验证码的前世今生(前世篇)>和<验证码的前世今生(今生篇)>了解了验证码的发展及演变,原理及优

oracle ebs 简介

哎....现在这年头,只搞db人越来越少,dba的地位越来越低....没办法..为了生存,哥哥决定再跨一个新的领域,去oracle的应用领域去学oracle ebs去... 开工: ebs的内部技术架构:简单概括为如下几个部分:多组织.多语言.多币种.模块化,集成性.并发处理.多技术混用. 我们看一下ebs R12的服务器架构组成: 2.名词解释 ERP系统中有很多职能集成所必需,但手工管理方式下所没有的重要名词.以下一一解释这些名词的意义及功能. 1.现存量(On Hand Quantity)

【Python爬虫6】表单交互

手工处理发送POST请求提交登录表单 1分析表单内容 2手工测试post请求提交表单 3手工处理post请求登录的完整源代码 从FF浏览器加载cookie登录网站 1session文件位置 2FF浏览器cookie内容 3使用cookie测试加载登录 4使用cookie登录源代码 使用高级模块Mechanize自动化处理表单提交 1用高级模块Mechanize自动化处理表单提交并支持登录后网页内容更新 2用普通方法支持登录后网页内容更新 严格来说,本篇表单交互和下一篇验证码处理不算是网络爬虫,而

Thinkphp3.2实用篇之计算型验证码示例

是不是觉得普通的验证码已经没办法满足,接下来介绍如何将tp现有的验证码改为计算型验证码: 首先找到:ThinkPHP\Library\Think\Verify.class.php 在其中加入以下代码: public function entry_add($id = '') { $this->length='3'; // 图片宽(px) $this->imageW || $this->imageW = $this->length*$this->fontSize*1.5 + $t

SEO研究中心:实例解析SEOER的前世今生

今天来说说SEOer的前世今生,如果我没有猜错,多少看了这篇文章标题的人都会认为我有标题党的嫌疑.各位看官,请往下接着看.我会说SEOer的前世今生是因为源于我的一个想法,一个合格的seo他必须具备什么?曾经有很多seo朋友经常问我这个问题,我的回答里面经常会忽略掉一个很重要的点,那就是文字的编辑能力,事实上它是非常的重要以至于很多人都忽略它了,也许是因为认为它不太重要. 我总结了目前国内seo技术不错的一些人,包括我的一些徒弟,我发现一个问题,凡是我们认为厉害的seo一般写文章的技术都相当了得