一文带你看懂验证码攻防那些事儿
“天生反骨”的验证码总是让人类头疼不已。
比如最基础的英文数字组合验证码,就已经会让人陷入自我怀疑:
“I还是1?0还是O?2还是Z?9还是q?vv还是w?”
再比如无数网友被12306网站验证码支配的恐惧。
如果想顺利买到火车票,抢票页面的“余票充足”并不能代表能买到,只有在付款前的验证码环节顺利通关,才算成功一半。
要么是在一群明星的照片中找出影帝影后,要么是在一堆山寨商品中找出真货,更过分的是在一打方言中选出”海南话“……
无数被烦人验证码挡在网页外的网民,心里都有一声愤怒的呐喊:
验证码,人类一生之敌。
但验证码越来越“变态”的背后实际上是安全攻防人员与黑灰产之间的持续对抗。1月12日下午15:00,顶象就验证码的攻防问题与大家展开讨论,顶象反欺诈专家大卫就现阶段验证码黑灰产会有哪些破解方式谈起,从防御角度深度剖析如何应对黑灰产的攻击,那么,验证码如何以技术万变钳制黑灰产之变?验证码产品又改做哪些产品安全能力设计?
验证码为什么越变越复杂?
人机验证码相信大家都不陌生。
人机验证从最早的传统字符型验证码到图形验证码再到行为验证码再到如今的智能验证码,验证方式可以说是千变万化的。
那么,为什么随着验证码的不断迭代,验证码反而越来越“变态”?我们越来越难以证明我是人而不是机器?
要回答这个问题,大卫认为可以从以下两个角度来分析:
一是机器难度,即安全性;一是人的难度,即用户友好程度。
这两个要素一直是验证码的核心关注点。可以看到,传统的字符类验证码虽然难度不高,但对机器来说却几乎没有难度;为了增加机器破解的难度,针对其他验证方式做了混淆,比如在图片上做噪点来提升安全性,这样一来,反而增加了人的视觉难度。
所以也就可以理解我们为什么觉得验证码越来越“变态”。
但整体来看,传统验证码验证方式设计不合理,只增加了人的难度, 缺乏感知能力 以及调整能力,安全纵深不足,这也很好的解释了验证码为什么迭代到如今的智能验证码。
验证码有哪些破解方式?
那么,对于黑灰产而言,验证码究竟是如何破解验证码的。
从上图可知,验证码的破解流程可分为三步:
第一步资源爬取,即通过机器爬取获得文字、图标、图片、音频等信息;第二步是工具识别,常见的破解工具主要有OCR、打标训练、图像识别平台等;第三步就是进行自动化提交破解验证码。
以智能验证码的破解为例。我们来看下验证码的破解过程。
首先是识别元素的提取,即当一张图片出现用户需要知道这张图片的答案在哪里,比如说要把滑块拖到哪个地方、图片上有哪些元素、所在的位置是怎样的,这些都是黑灰产需要破解的。
一般而言,有以下几个步骤:
一是识别元素群,需要大量爬取目标验证码的元素。二是对目标验证码进行人工标注,标注的数量越多,样本数量就越多,最终训练的模型效果就越好,这其中就会用到图像识别的一些模型。
三是自动化识别,即可通过模型就知道这张图片的答案在哪里,知道了答案之后,接下来就是如何完成验证了。
对于智能验证码而言,它需要的不仅是答案本身,更关注验证过程中的数据。这其中又有几种思路。
一种思路是可以破解整个JS文件,即完全逆向验证码JS文件,这样一来你就可以知道它在验证过程中收集哪些数据,这些参数又是如何拼装的,参数是如何加密的,也就可以实现脱机运行,不用依赖浏览器环境自行组装参数提交验证,但这个方式成本相对较高,周期也会更长。
另一种思路是UI自动化。即当我们知道图片上的答案之后,可通过自动化脚本去驱动浏览器上的元素自动化操作,进而完成验证。相对于上一种思路其成本较低。
除此之外,还有一种破解方式,即三方接码平台。
打码平台的基本原理是利用人工智能技术实现对验证码设计原理的突破。
黑灰产把获取到的验证码相关信息提交至打码平台,打码平台负责破解验证码,然后把正确的验证结果返回给黑灰产,让黑灰产在带着正确的验证结果去请求数据页面,大大加大了验证码被破解的风险。
综上,原本的请求流程只有黑灰产和数据页面的双向通信,由于打码平台的加入,现在这条链路上便演变成了黑灰产、数据页面、验证码、打码平台四者之间的通信。
目前打码平台破解验证码方式主要是机器破解和人工打码两种。
1、机器破解:
机器破解的好处在于自动化程度高,识别速度快,而且对于黑灰产用户的单词调用价格低,缺点是需要花费大量的时间去破解验证码的验证方式,前期投入的工作量会比较大,而且有时候机器破解的识别准确率也会有一定的误差导致验证失败。
2、人工打码:
人工打码则是在打码平台建立一个任务平台,任务发布者是黑灰产方,将获取到的验证码信息封装成任务提交到打码平台,打码平台则作为中间的任务调度者,将一个个任务调度给标注者(专门做验证码验证的人),完成后将标注结果返回给黑灰产,由黑灰产带着标注结果去请求数据页面。
标注结果打码平台也会存储一份,下次若遇到相同的验证码则直接返回这次的标注结果。如果验证码平台的验证图片长久不更新,那么就会有被拖库的风险,也就是其所有验证图片都会被标注,这时候就无需人工标注了,直接转变成机器打码的形式。
验证码如何进行顶层产品能力设计?
那么,我们究竟应该如何提升防御能力?
大卫认为应从以下三方面进行考虑:
1、识别对抗。
首先我们需要明确识别对抗的本质是什么。
从字面意思不难理解,识别对抗的本质其实就是对抗黑灰产的工具,但从技术层面来看,实际上指的是与黑灰产人工智能技术的对抗。
2、感知能力。
感知能力即识别恶意爬虫、恶意流量的能力,它是区别于传统验证码与智能验证码的标志性能力。
因为智能验证码要求不仅需要知道答案,还需要具备答案是怎么来的能力。
那么感知是从几个维度来做的呢?
一是行为数据,用户在验证过程中可能会产生键盘上的敲击数据、鼠标的点击数据、触屏等数据,这些数据都需要我们去收集,用来辅助判断用户在整个验证过程中是否具备人的行为特征。
二是终端风险,如果对方使用了自动化工具,如模拟器、虚拟机等等,我们可以通过在终端设备指纹的能力去识别环境风险做辅助判断行为是否可信。
三是数据统计。通过大数据的分析以及计算,能够大致圈定哪些范围内的验证码的请求是有问题的,进而针对这部分请求做防御提升。
四是预警指标。通过实时计算的指标我们能够感知某一类验证码是否有被破解的可能性。
五是安全策略,通过检测攻击行为的安全策略,根据风险情况对验证码做出调整。
1、以万变钳制黑灰产破解
不难看出,上述的攻防对抗都是围绕变字展开的。
以顶象验证码为例,我们来看下顶象验证码围绕变做了哪些安全能力的设计。
首先是安全可信的通信链路。前文中提到,黑灰产在破解验证码时首先要考虑的是是否要逆向JS文件来知道你的通信协议以及参数信息。对此,顶象增加了安全加密中心,安全加密中心会定期自动化的生成新的加密算码,把代码重新混淆一遍。有了这种的动态更新的机制后,即便黑灰产破解了某个版本的验证码JS 文件,在下一个更新窗口到来之后,这个验证码JS 文件也就失效了。
其次是验证方式和组合的实时变化。
前文中提到,识别对抗的本质是黑灰产的人工智能能力的对抗,因此我们的验证元素也要进行实时变换。例如文字点选类验证码,其核心验证要素是文字,机器破解如果识别了图片中的文字要素,那么自然可以返回给黑灰产正确的验证结果。那么可以提升文字要素的识别难度来抵御机器破解。
最后是安全策略的实时调整。
针对私有化客户,我们可以定向的验证私有化验证码,支持对接防御云,基于云服务拉取最新的更新模块、插件以及情报到私有化的环境中去,进而实现本地和云端的能力同步。
直播最后,大卫分享了人机验证未来的几个趋势,他认为:
首先人机验证是企业业务安全必不可缺的一环。
其次,人机验证的对抗专业程度将会越来越高,从以前简单的OCR软件到现在的图像识别技术甚至专业的打码平台,这些都是在攻防对抗过程中持续出现的工具,这就导致了人机安全的门槛也将越来越高。
随着安全厂商与黑灰产之间攻防对抗的不断迭代,各种各样的对抗手段及策略在不断对抗的过程中也在逐渐提高,此时,对于中小型厂商而言,技术上是处于落后状态的,因此人机安全的门槛将会越来越高,甚至到最后可能只有少数的几个专业的安全厂商具备较好的人机防护能力。
最后再给大家简单介绍下顶象业务安全大讲堂。
顶象业务安全大讲堂汇集了业内大咖,分享万亿级业务安全攻防经验,打造时下最专业的业务安全直播课,通过“技术+方案+实践”三大核心专题,带您全面了解金融、互联网、航旅出行、跨境电商以及目前大热的NFT等各类业务风险及防范手段,深入解析背后的产品技术,抽丝剥茧攻防实战,助您打造零风险的数字业务。
春节后,顶象将开启第二季业务安全大讲堂,第二季业务安全大讲堂将建立安全圈生态,邀约知名大厂安全负责人和技术博主来给大家分享业务安全专业知识,敬请期待!顶象在这里提前预祝大家春节快乐,新的一年“兔”飞猛进。