首先,先介绍下验证码程序的提出者,路易斯·冯·安(Luis von Ahn)。2002年,路易斯和他的小伙伴在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念。该程序是指,向请求的发起方提出问题,能正确回答的即是人类,反之则为机器。这个程序基于这样一个重要假设:提出的问题要容易被人类解答,并且让机器无法解答。
在当时的条件下,识别扭曲的图形,对于机器来说还是一个很艰难的任务,而对于人来说,则相对可以接受。yahoo在当时第一个应用了图形化验证码这个产品,很快解决了yahoo邮箱上的垃圾邮件问题,因此图形类验证码开始了大发展时期。
图形化验证码在被证明有效后,在互联网上迅速得到了推广。国内外各大网站,在关键的业务点上都加入了这一类型的验证码。
首先,由于开发者水平的良莠不齐,导致验证码本身的实现存在问题,从而导致漏洞可以绕过,常见的有以下几种类型:
如将验证码答案输出到页面中、写在cookie里。打比方就是说,在发卷的时候,把答案写在了卷子背面。(老师再也不用担心我的成绩)
如验证码可以重复使用、不设超时。验证一次,永久使用。
如修改业务参数可导致不用校验验证码也可通过、甚至验证码就是摆设。结合到具体的业务点上有什么危害呢?
a. 验证码写在cookie中。此处可导致旅客信息泄露。
b. 验证码与图片存在对应关系,因此直接访问html即可得到答案。此处可导致撞库与暴力破解密码。
在开篇我们提到了一个重要的假设:
CAPTCHA提出的问题要容易被人类解答,并且让机器无法解答。
实际上,CAPTCHA所要处理的问题是:将普通人与恶意的用户(黑客、垃圾消息发送者)区分开来。那当时间点到达2016年时,黑客们与普通用户之间的差距已经很大了(想象下中国足球队对巴西足球队,而且此时留给中国队的时间已经不多了)。
因此,CAPTCHA在图片验证码这一应用点上已经无法满足这一假设了。在这段时间内,出现了很多的加强和识别图形验证码的方法(每一种方法的详细原理和解释,可以参见wooyun drops,在此不做详述):
附上部分名词解释:
如上图所示,原始的图像使用了字体旋转、背景色混淆等手段,在专业的验证码工具面前,也就是几个命令拼接即可完成识别
如上图所示,是一个验证码识别软件自建字库的过程,通过回车确认验证码识别正确,如有错误,稍带修改继续。当保存了上千个正确识别的字库后,该程序便可达到一个可用的可用的准确率。(其实若不不做其他限制,此时准确率在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,攻击者可以写程序实现对目标的自动化操作,而验证码的部分只要交给打码平台就可以了。
打码平台在国内市场上的火爆,有几个原因:
[1].从2006年开始,国内互联网的迅猛发展,使得流量变现成为了可能。各种邮件营销、SEO、IM工具等都迫切的需要稳定的可以绕过图形验证码的方法。而近些年兴起的基于数据的诈骗、账号盗取等更进一步加剧了这个趋势。
[2].打码平台的爆发式发展也同时得益于中国经济蓬勃发展的原因之一:人口多并且人力成本低。网络上一种常见的网赚模式,就是打码工模式,一个只要会上网,能识别验证码的人就可以参与。PS:难道你没有看见过下面这些广告吗?大学生、大妈,无需学历,只要会上网、会打字,一天包赚XXXXX。当然其中除了打码平台,还有很多骗子。
以上验证码的价格在平台上都是明码标价,普通的字母验证码1条在1分钱左右,而知识问答类在6分钱左右,相较于利用这些灰产所会产生的利益,真是件美物廉,重点是还非常稳定。
同时我注意到国外的价格现在与国内的价格已经相差不大,现在美国的价钱约为$1.5/1000,美国的打码工已经向东南亚扩展。打码平台一出现,2.2中提到的加强验证码的方法都无用了。因为不管你怎么变化,验证码总需要是人类能够通过的。
打码平台的出现,虽然没有从理论上打破CAPTCHA的原则,但是也从事实上击破了防止程序自动提交的防御,因此我们需要新型的安全的验证方式。这些探索也带来了现在各种多样的验证码形式,这些我们将在下篇探讨。
最后用一个“富有情怀”的图片结束。
这张图不是来自改变世界的极客,也不是来自富有爱心的艺术家。它来自某知名打码平台的官网,是不是太有情怀了?(你们的确改变了我们的工作方式)
面对这样的情怀,我想我现在只能做一件事情。
高原直泰(Naohiro Takahara 日本) 法兰克福(德甲)森本贵幸(Takayuki Morimoto 日本) 卡塔尼亚(意甲)
大黑将志(Masashi Oguro 日本) 都灵(意甲)
铃木隆行(Takayuki Suzuki 日本) 贝尔格莱德红星(塞尔维亚)
福田健二(Kenji Fukuda 日本) 努曼西亚(西乙)
小笠原满男(Mitsuo Ogasawara 日本) 梅西纳(意甲)
中村俊辅(Shunsuke Nakamura 日本) 凯尔特人(苏超)
松井大辅(Daisuke Matsui 日本) 勒芒(法甲)
稻本润一(Junichi Inamoto 日本) 加拉塔萨雷(土耳其)
中田浩二(Koji Nakata 日本) 巴塞尔(瑞士)
小田智之(日本) SF Rehlingen(德国地区联赛)
山本龙(日本) FC Riegelsberg
曾野步(日本) Viktoria Huhnerfeld
赵源光(Cho Won-Kwang 韩国) 索肖(法甲)
车杜里(Cha Doo-Ri 韩国) 美因茨(德甲)
薛琦铉(Seol, Ki-Hyeon 韩国) 雷丁(英超)
金东铉(Kim Dong-Hyun 韩国) 喀山红宝石(俄罗斯超联)
鱼庆俊(韩国) 梅斯(法乙)
李尚(韩国) 谢菲尔德联(英超)
朴智星(Park Ji-Sung 韩国) 曼联(英超)
徐赫秀(Seo Hyuk-Su 韩国) 昆士兰狮吼(澳大利亚)
尹东源(韩国) 贝尔格莱德游击队(塞黑乙)
徐正源(Seo Jung-Won 韩国) SV里德(奥地利)
李镐镇(韩国) 桑坦德竞技(西甲)
李浩(Lee Ho 韩国) 圣彼得堡泽尼特(俄罗斯超联)
玄泳民(Hyun Young-Min 韩国) 圣彼得堡泽尼特(俄罗斯超联)
金东进(Kim Dong-Jin 韩国) 圣彼得堡泽尼特(俄罗斯超联)
姜先圭(Kang Seon-Kyu 韩国) 喀山红宝石(俄罗斯超联)
权准(韩国) 菲格伦塞(巴西)
金贵贤(韩国) 博卡青年(阿根廷)
马达维基亚,德国汉堡,主力右边前卫,右边锋
卡里米,德国,拜仁慕尼黑,主力替补,前腰,主要作为巴拉克的替补.
雷扎伊,意甲,梅西纳,中后卫,有时会替补出场,通常是在杯赛中.
哈什米安,德甲,前锋,被拜仁解约,去了一支德甲中下游球队.
卡择米安,德甲,前锋
赞迪,德甲,前腰
卡伊比,右边后卫.
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)