验证码作为安全服务中最贴近大众用户的一环,也是任何产品在用户登录环节几乎必备的一环,从最初的文本型验证码到知识型验证码到行为轨迹验证码,再到智能无感验证码,验证码厂商花了十几年的时间。而验证码每一次更新的背后则是验证码厂商们与黑灰产不停的博弈对抗的结果。
一般来说,验证码的工作流程如下:
1、客户端请求验证码;
2、验证码服务端返回验证码信息(如图片、会话ID、提示信息等);
3、客户端渲染展示,用户根据提示点选或滑动验证码;
4、客户端收集用户验证数据并发送请求到服务端进行验证,服务端返回验证结果。
前不久,顶象正式推出了智能无感验证。
智能无感验证顾名思义就是要让可信用户安全无障碍通过。如用户首次申请验证码时,客户端自动采集设备信息进行上报,服务端通过风控策略、人机识别模型、行为特征模型等判断出当前用户风险信息,无风险用户则不需要验证码即可通过,疑似风险用户则需要再次验证方可通过。当然,在一些高风险业务场景,用户也可以修改智能无感验证为强校验模式,来满足业务安全的需求。
其中,验证码的安全性主要由这两个因素决定:
一是图片本身,对机器来说识别图片的内容有一定难度;
二是验证过程中产生的行为数据,用于核验验证过程中是否是人类的行为。
今天我们就围绕图片本身来探讨下其如何与黑灰产进行对抗的。
图片防御在反爬虫的应用
我们以反爬虫为例,看下图片在验证码攻防对抗中的作用。
目前,旋转验证码、乱序拼图类验证码都是效果比较好的反爬虫验证码类型,此类验证码需要一定联想能力,而机器识别很难具备这种能力,且验证过程类似游戏,不仅提升了用户体验,并且实现了不错的防御效果。
当然,这类验证码也并非一劳永逸,爬虫团队也有相应的破解手段:
比如在旋转类验证码中爬虫团队一般的操作过程如下:
1、收集图片素材;
2、程序模拟旋转生成模型库(如下图);
3、使用相似度算法检索模型库,获取目标旋转角度;
4、模拟用户旋转图片至目标角度或直接合成请求数据包进行验证;
5、验证通过获得凭证。
同理,拼图类验证码也面临相同的问题。爬虫团队破解流程如下:
1、收集图片素材;
2、人工还原排序或暴力重试还原图片,写入模型库;
3、检索模型库找到原图,根据原图还原正确的顺序。
综上,不难看出,无论是旋转类验证码还是拼图类验证码,收集图片素材都是其必要条件,但要想实现防御效果,仅靠图片是不行的。
而这就不得不提到验证码防御的两个重要指标——解空间难度和动态素材。
解空间在验证码防御中扮演什么作用?
首先,我们来看下解空间的定义。
我们可以简单的把解空间理解为一个概率问题,即用户或者爬虫在通过验证码时的难度。
如传统文字验证码,如果是4位数字,解空间则为104。而旋转验证码使用滑块平移长度转换为旋转角度,滑验证码长度一般为300px,随机的长度有300个px的可能,那么解空间大约为300~400。
那么,这是不是证明文字验证码比旋转验证码的安全性更高呢?
不一定,因为解空间的难度是不固定的。
以语序点选验证码为例,在不考虑文本库的情况下,解空间就变成了从五个字中找出既定顺序的四个字的概率,即A(5,4)=5*4*3*2=120。也就是说爬虫有1/120的概率通过验证码。
这样看来,旋转验证码似乎又比语序点选验证码更安全。
需要注意的是,解空间也会随着破解方案不断退化,当解空间退化为1时,也就意味着爬虫每次都可以顺利通过验证码。
那么,如何解决这个问题呢?
从对抗出发,以变制变——动态素材在验证码防控中的应用
一成不变的防御策略无法永远有效,用来解释解空间最合适不过,但要想保证解空间的难度则需要动态素材(素材的更新频率)来配合。
动态素材分为3种应用场景:
1、人工更换
人工更换顾名思义就是需要人工更换图片素材。
但人工更换素材存在一些问题:
ü 素材有效周期短,需要频繁更换;
ü 图片素材从互联网获取会存在版权问题;
ü 即使不考虑版权问题,也需要人工对图片进行筛选,以保证验证码的效果;
ü 人工更换素材成本更高。
采用程序自动生成背景图片是一个可行的思路,同时也解决了版权问题。
2、程序生成
解决方案之一是采用OpenGL进行绘图,并生成图片输出到素材库。OpenGL在依赖模型的情况下绘制图片可以进行模型、数量、大小、旋转、着色、纹理、光线的组合,并渲染成三维图片,理论上可以生成近似于无穷多的图片。在此基础上,使用动态生成的、几乎不会重复的图片作为旋转验证码的素材支撑,可以有效防御打码团队收集图片素材的破解方式,极大地提升验证码的防御能力。
动态素材生成依托模型可以有多种形式,例如几何模型、虚拟实物模型等:
根据验证码动态背景图的需要,只需要选择较为简单的素材即可。验证的素材库优化后可以保证旋转验证、乱序拼图所使用图片素材都是动态更新且几乎不会重复的,这样就解决了网络爬虫收集图片素材破解验证码的问题。
3、边缘处理
动态素材的另一个应用在于图片的边缘处理,这一点在滑动还原验证码中尤为重要。
动态还原验证码需要用户还原一张被切割平移的图片,和上文中的旋转验证和拼图验证一样需要联想能力。但不同的是,网络爬虫没有联想能力也是可以攻破常规图片的旋转验证。网络爬虫通过不断平移,并比对上下图片的rgb值,直到上下图片的RGB值在一个误差范围内,即可确定目标位置。
根据这个思路,我们需要上下两张图片的边缘颜色相近,使得网络爬虫无法根据上下两张图片的RGB值确定目标滑动距离,并且,这在动态素材的基础上实现是非常简单的。通过动态素材程序为所有物体覆盖同样的纹理,就可以达到理想的效果。
综上所述,从对抗出发,以变制变是验证码的永恒主题,一成不变的验证码在激烈的攻防对抗中很难立于不败之地。从验证码的不断迭代过程中,我们亦可以证明这一点。虽然验证过程没变,但其中的验证难度是随着验证码的迭代不断增强的。
正如顶象推出的第五代验证码,其无感背后不仅仅是技术的迭代,更是算法的迭代,并且第五代验证码将验证码能力与顶象防御云深度融合,不仅让防御效果一目了然,更让用户体验不断提升。
毕竟,安全对抗是个永恒的战场,安全防护更需要打组合拳,方能致黑灰产于“死地”。