常在网上晃悠的人,对上面这张图都不会陌生。特别是在注册新帐号、确认交易时,它们都会频繁出现,要求咱们输入正确的验证码,那这些看上去跟咱们要作的事情彻底无关的验证码到底有何做用呢?
html
首先,先介绍下验证码程序的提出者,路易斯·冯·安(Luis von Ahn)。2002年,路易斯和他的小伙伴在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念。该程序是指,向请求的发起方提出问题,能正确回答的便是人类,反之则为机器。这个程序基于这样一个重要假设:提出的问题要容易被人类解答,而且让机器没法解答。程序员
在当时的条件下,识别扭曲的图形,对于机器来讲仍是一个很艰难的任务,而对于人来讲,则相对能够接受。yahoo在当时第一个应用了图形化验证码这个产品,很快解决了yahoo邮箱上的垃圾邮件问题,所以图形类验证码开始了大发展时期。算法
图形化验证码在被证实有效后,在互联网上迅速获得了推广。国内外各大网站,在关键的业务点上都加入了这一类型的验证码。api
首先,因为开发者水平的参差不齐,致使验证码自己的实现存在问题,从而致使漏洞能够绕过,常见的有如下几种类型:安全
如将验证码答案输出到页面中、写在cookie里。打比方就是说,在发卷的时候,把答案写在了卷子背面。(老师不再用担忧个人成绩)cookie
如验证码能够重复使用、不设超时。验证一次,永久使用。网络
如修改业务参数可致使不用校验验证码也可经过、甚至验证码就是摆设。结合到具体的业务点上有什么危害呢?机器学习
a. 验证码写在cookie中。此处可致使旅客信息泄露。工具
b. 验证码与图片存在对应关系,所以直接访问html便可获得答案。此处可致使撞库与暴力破解密码。学习
(上述两例转自乌云)
在开篇咱们提到了一个重要的假设:
CAPTCHA提出的问题要容易被人类解答,而且让机器没法解答。
实际上,CAPTCHA所要处理的问题是:将普通人与恶意的用户(黑客、垃圾消息发送者)区分开来。那当时间点到达2016年时,黑客们与普通用户之间的差距已经很大了(想象下中国足球队对巴西足球队,并且此时留给中国队的时间已经很少了)。
所以,CAPTCHA在图片验证码这一应用点上已经没法知足这一假设了。在这段时间内,出现了不少的增强和识别图形验证码的方法(每一种方法的详细原理和解释,能够参见wooyun drops,在此不作详述):
预处理:灰度值二值化、去噪点、连通性补全等
切割:经过滴水算法、统计方法等获得单个字符的所在位置
机器学习算法:将通过处理的每一个字符进行训练,训练后获得识别答案(SVM、KNN、神经网络等)
字库:与机器学习算法相似,将处理后的字符人工导入,构造字库,对长期不变的验证码较为有效
如上图所示,原始的图像使用了字体旋转、背景色混淆等手段,在专业的验证码工具面前,也就是几个命令拼接便可完成识别
如上图所示,是一个验证码识别软件自建字库的过程,经过回车确认验证码识别正确,若有错误,稍带修改继续。当保存了上千个正确识别的字库后,该程序即可达到一个可用的可用的准确率。(其实若不不作其余限制,此时准确率在30%以上时,便可形成很大的危害,毕竟对于攻击者来讲,发3个包与发1个包的成本差异不大)
看到这里,客户们大概能够回答这个问题了:
→ 为何我用了验证码仍是会被刷?
那倒也不是,安全是一个博弈的过程。综合使用以前提到的验证码技术(特别是字体粘连等),而且保持关注和变化,攻击者的识别率也比较低。当攻击的成本大于可得到的利益时,天然就没人来攻击了。(普通用户在此应强烈要求存在感)
此时,虽然两方大小上略有差距,可是整体战斗力还算是勉强打个平手,互相出招而已。只是随着战火的升级,我的轮番上阵后,验证码已经违背了他最初设计时的初衷:对普通用户的友好性逐渐消失。而普通用户的体验也就成了这场战争中的牺牲品,这也就造就了一批有一批被用户吐槽的没法辨认的验证码。
正当普通用户们不断吐槽的时候,程序员表示这个锅不想背可是也得背。由于业务老是要作的,而攻击者们也是要吃饭的,升级了验证码的成本,也就限制了风险的等级,因而就变成了这样一个模式╮(╯_╰)╭:
程序员:熬一夜升级
攻击者:熬一夜破解
程序员:熬两晚上升级
攻击者:熬两晚上破解
....(心疼)...
你们就在这种你方唱罢我登台的状况下看似和气的度过了一段时间。
在日日夜夜的对抗中,攻击者想到了一个办法,能够一劳永逸的解决图片验证码的问题。在我对这些搞灰产的人们表示憧憬以前,先说点题外话。
2009年,google买下了CMU的一个项目:recaptcha。这个项目是CAPTCHA的进阶版本。它所基于的假设与CAPTCHA一致,可是它同时让用户识别两张图片,一张用于验证用户身份,而另外一张用于帮助难以用机器识别的电子文档。
恩,若是读者有从事此类灰产相关工做的人,请注意recaptcha右下角的小字(stop spam.read books)看看这情怀。
而recaptcha的做者,固然又是:路易斯·冯·安。在recaptcha的基础上,路易斯进一步提出了一个概念:人类计算(Human Computation) 。
简单来讲,他但愿借由计算机和网络平台,发挥人类技能,去解决大规模、复杂的问题,具体到recaptcha项目来讲,就是借助你们的力量去帮助数字化书籍。(该思想的具体应用还包括一个叫ESP GAME的游戏以及后面会提到的no recaptcha)
可是,在2004年(我能搜到这个新闻的最先时间),就有人已经完美的实现了这个概念:人工打码,而且起源地:中国(此处我应该感到自豪吗)。
所谓的人工打码就是,将验证码的请求转发给某平台,该平台会将这个信息发送给平台上的打码工,而后打码工人识别后,将答案反送回请求者。经过打码平台的api,攻击者能够写程序实现对目标的自动化操做,而验证码的部分只要交给打码平台就能够了。
打码平台在国内市场上的火爆,有几个缘由:
从2006年开始,国内互联网的迅猛发展,使得流量变现成为了可能。各类邮件营销、SEO、IM工具等都迫切的须要稳定的能够绕过图形验证码的方法。而近些年兴起的基于数据的诈骗、帐号盗取等更进一步加重了这个趋势。
打码平台的爆发式发展也同时得益于中国经济蓬勃发展的缘由之一:人口多而且人力成本低。网络上一种常见的网赚模式,就是打码工模式,一个只要会上网,能识别验证码的人就能够参与。PS:难道你没有看见过下面这些广告吗?大学生、大妈,无需学历,只要会上网、会打字,一天包赚XXXXX。固然其中除了打码平台,还有不少骗子。
能够打码的类型包括:
以上验证码的价格在平台上都是明码标价,普通的字母验证码1条在1分钱左右,而知识问答类在6分钱左右,相较于利用这些灰产所会产生的利益,真是件美物廉,重点是还很是稳定。
同时我注意到国外的价格如今与国内的价格已经相差不大,如今美国的价钱约为$1.5/1000,美国的打码工已经向东南亚扩展。打码平台一出现,2.2中提到的增强验证码的方法都无用了。由于无论你怎么变化,验证码总须要是人类可以经过的。
打码平台的出现,虽然没有从理论上打破CAPTCHA的原则,可是也从事实上击破了防止程序自动提交的防护,所以咱们须要新型的安全的验证方式。这些探索也带来了如今各类多样的验证码形式,这些咱们将在下篇探讨。
最后用一个“富有情怀”的图片结束。
这张图不是来自改变世界的极客,也不是来自富有爱心的艺术家。它来自某知名打码平台的官网,是否是太有情怀了?(大家的确改变了咱们的工做方式)
面对这样的情怀,我想我如今只能作一件事情。