提到验证码,我想每个人都体验过被验证码支配的恐惧,比如这样的:
还有这样的:
更有这样的:
老铁,是不是扎心了。在验证码面前,我们就仿佛摇篮里无知的孩子。
今天我们就来说说这个磨人的小妖精——验证码。
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,是一种区分用户是计算机还是人的公共全自动程序。验证码发明者正是路易斯·冯·安,这位天才在21岁时就创造出人类第一个验证码,其本质是针对“黑客”的绝地反击。“黑客”通过编写恶意的计算机程序,让电脑伪装成用户,按照他们的意图大量地对外散布垃圾信息,例如在论坛里大量“灌水”、打广告。这种恶意的垃圾信息发布严重影响了人类利用网络的效率,而验证码的出现,成功抵御了这种恶意的攻击。在这场“反黑客”战役中,验证码取得了完胜。
随着近几年的发展,验证码家族日益壮大,充斥在人们日常生活中的方方面面。下面就用我们安全人员的一天,来告诉大家,这个小妖精到底有多磨人。
没有一点点防备,你就这样出现,一长串语音验证码
阳光明媚的清晨,准时在班车停靠点等待班车,迎面走来一个手拿诺基亚的阿姨,略显焦急地问我:“小伙子,能不能帮我听个验证码啊,我岁数大了,记不住”。我很清楚,二十多岁的我,一直是中老年妇女的偶像,有粉丝求助,偶像怎能袖手旁观?况且作为一名合格的研究生,区区语音验证码,能奈我何?顺手拿起电话,按下了接听键:您的验证码是1,5,8,7,4,3……我说程序员兄弟啊,验证码设置多少位是多啊,这么长一串,你确定是给人听的?吓得我赶紧拿出了手机,又听了一次语音验证码,边听边记,最后发现一共有12位,可怕可怕。
由此可见,语音验证码确实够安全,只会给唯一的手机号发送唯一的语音验证码,能够有效防止脚本程序的自动化攻击,抵御过于频繁的请求,而且能够保证高到达率,特别是在偏远地区,语音验证码因其高到达率特性更是不可替代。同时呢,如果验证码位数少一点,用户体验还是很不错的。
盗刷、绕过、爆破,验证码被我们玩坏了
俗话说,道高一尺,魔高一丈,验证码既然出现了,我们安全人员绝不能退缩,就要想破脑袋,尝试破解验证码。大家放心,我们是白帽子,之所以寻找验证码的漏洞,就是怕被其他别有用心的人利用了,我们要及时发现问题、修复问题,做新时代的优秀公民。
一整天的工作拉开了序幕,当然,每次新接触一个系统的安全测试项目,最先关注的就是验证码。首先,注册一个新用户,需要填写手机号,发送短信验证码,进行身份确认。此处“咔”一下,既然系统想发短信验证码,我就一次让你发个够,随手丢给系统一个python脚本,同一个手机号,先发送20回短信验证码,看看系统听不听话。果然,系统按部就班地发了20条短信验证码,系统居然对手机号、对接口频率没有任何限制,那岂不任人宰割,几万个短信验证码,分分钟就全给你浪费了,这一大笔钱,我都替项目组感到心疼。
接着呢,用注册过的用户进行登录,故意输错登录密码,看看系统是否有防护措施。呦吼,连续输错5次,系统提示需要输入图形验证码,看来还是有防范意识的嘛。但防不防得住,还得另说。还是刚才的脚本,引入开放的OCR图片识别接口,智能识别图形验证码,嘿嘿嘿,我得意的笑了,可以对用户密码进行无休止的暴力破解喽。
最后呢,咱们再来看看“忘记密码”功能。假装自己忘记密码的样子,点击“忘记密码”,系统会给我的手机号发送一条短信验证码,当我多次尝试输入错误的验证码数字,再次输入正确的验证码,结果发现仍然能够成功重置密码。这就好办了,只有四位的短信验证码,写个脚本,从1到9999进行遍历,唰唰唰,转眼就爆破成功,只要是系统的注册用户,不用知道短信验证码的内容,便可随意修改他们的登录密码。
至此,验证码彻底被我们玩坏了,盗刷短信验证码、破解其他用户密码甚至是修改其他用户密码,你说可怕不可怕。所以说,开发人员,针对验证码,一定要保证:
短信验证码接口频率进行限制,或者添加图形化验证码,防止机器盗刷
图形验证码一定要保证复杂度,不能够被OCR技术轻易识别。(脑袋里马上浮现出12306的验证码,即使作为人脑,我也几乎没有一次性成功的经历)
为验证码设置有效次数,或者增加验证码长度,并缩短验证码的有效时长
别人家的滑动验证码
工作一天,何以解忧,唯有“剁手”。打开电子商城,习惯性的去触发该系统的验证码机制,顺便欣赏学习一下别人家的验证码——滑动验证码。首先用户滑动验证码到指定位置,完成后会给服务端回传各种加密信息,为了做风控规则来判断是否异常,个人猜测其规则会包含滑块的响应时间、拖拽速度、时间、位置、轨迹、重试次数等,如果没有命中异常规则,就会放行校验通过,如果命中异常规则就会弹出二次校验,只有通过校验后才可以放行。
滑动验证码最大特点即无需人类思考,从而不会打断用户操作,进而提供更好的用户体验;而且也可以做到抵御脚本自动化攻击,因此渐渐成为一种流行趋势。但是也有几点使用前要考虑的地方,比如响应延迟,当大量并发过来的时候是不是撑得住;最高响应时间是否有上限,如果超过是否会降级,如何降级等等。
不知不觉中,给大家介绍了五花八门的验证码:语音验证码,短信验证码,图形验证码,滑动验证码,想必大家对验证码都有了更进一步的认识和了解。说不定有些手痒的朋友们,已经在动手尝试破解验证码去了,千万要记得,适可而止哦,对我们的小妖精,手下留情。