资料来源:Nanzao.com
验证码作为安全服务中最贴近大众用户的环节,几乎是任何产品在用户登录过程中必不可少的。从最初的文本验证码到知识验证码再到行为轨迹验证码,再到智能不敏感验证码,验证码厂商用了十几年的时间。验证码每一次更新的背后,都是验证码厂商与黑灰产不断博弈对抗的结果。

一般来说,验证码的工作流程如下:
1.客户端请求验证码;
2.验证码服务器返回验证码信息;
3.客户端渲染显示,用户根据提示点击或滑动验证码;
4.客户端收集用户验证数据,向服务器发送请求进行验证,服务器返回验证结果。
前不久,顶象正式推出智能无感验证。
智能无感验证,顾名思义,就是让可信用户安全无障碍的通过。比如用户首次申请验证码,客户端自动采集设备信息并上报,服务器通过风控策略、人机识别模型、行为特征模型等判断当前用户的风险信息。无风险用户无需验证码即可通过,疑似风险用户需要再次验证。当然,在一些高风险的业务场景下,用户也可以将智能无感验证修改为强验证模式,以满足业务安全的要求。
其中,验证码的安全性主要由这两个因素决定:
一个是图片本身,机器很难识别图片的内容;
二是验证过程中产生的行为数据,用于检查验证过程是否为人的行为。
今天我们就把重点放在画面本身,探讨它是如何对抗黑灰产的。
图像防御在反爬虫中的应用
我们以反爬虫为例,看看图片在验证码攻防对抗中的作用。
目前的旋转验证码和乱序拼图验证码都是有效的抗爬虫验证码,需要一定的联想能力,但是机器识别很难有这个能力,验证过程类似于一个游戏,既提高了用户体验,又达到了很好的防御效果。
旋转验证,顶部图像旋转验证,顶部图像无序拼图
当然,这种验证码并不是一劳永逸的,爬虫团队也有相应的破解手段:
例如,在旋转验证码中,爬虫团队的一般操作流程如下:
1.收集图片资料;
2.程序模拟旋转生成模型库;
3.通过相似性算法搜索模型库,获得目标的旋转角度;
4.模拟用户将图片旋转到目标角度或者直接合成请求数据包进行验证;
5.通过验证获得凭证。
同样,拼图验证码也面临同样的问题。爬虫破解过程如下:
1.收集图片资料;
2.对恢复后的图片进行手动恢复排序或暴力重试,并写入模型库;
3.搜索模型库找到原图,根据原图还原正确顺序。
综上,不难看出,无论是旋转验证码还是拼图验证码,都需要收集图片素材。但是,要达到防守的效果,光靠图片是不行的。
而这不得不提验证码防御的两个重要指标——求解难度空和动态素材。

空在验证码防御中起什么作用?
首先我们来看看解空之间的定义。
我们可以把解空简单理解为一个概率问题,即用户或爬虫通过验证码的难度。
比如传统的文字验证码,如果是4位数,就是空之间的104。但是,旋转验证码通过滑块的平移长度转换为旋转角度。滑动验证码的长度一般是300px,随机长度可能是300px,所以解空大概是300~400。
那么,这是否证明了文字验证码比旋转验证码更安全呢?
不一定,因为求解空的难度不固定。
以词序点击验证码为例,在不考虑文本库的情况下,解空就变成了从五个单词中按给定顺序找到四个单词的概率,即A=5*4*3*2=120。也就是说,爬虫有1/120的概率通过验证码。
这样看来,旋转验证码似乎比按词序点击验证码更安全。
需要注意的是,解空也会随着破解方案而恶化。当solution 空退化为1时,意味着爬虫每次都能成功通过验证码。
那么,如何解决这个问题呢?
从对抗开始,变来变去——动态材料在验证码防控中的应用
一成不变的防御策略不可能永远有效,解释解空是最合适的,但是需要动态的素材来保证解空的难度。
动态素材分为三种应用场景:
1.手动替换
手动更换,顾名思义就是需要手动更换图片素材。
但是,手动材料替换存在一些问题:
④材料有效期短,需要频繁更换;
ü从网上获取图片资料会有版权问题;
ü即使不考虑版权问题,也需要对图片进行人工筛选,以保证验证码的效果;
④人工更换材料的成本较高。
用程序自动生成背景图片是一个可行的思路,也解决了版权问题。
2.程序生成
解决方法之一是用OpenGL绘图,生成图片输出到素材库。OpenGL可以根据模型结合绘制图片时的模型、数量、大小、旋转、着色、纹理、光线,渲染成3 d图像,理论上可以生成近乎无限的图片。在此基础上,利用动态生成且几乎不重复的图片作为旋转验证码的素材支撑,可以有效防御编码团队采集的图像素材的破解方式,大大提高验证码的防御能力。
动态材料生成模型可以采取多种形式,如几何模型、虚拟物理模型等。
根据验证码动态背景图像的需要,只需要选择简单的材料。验证素材库优化后,可以保证旋转验证和乱序谜题使用的图像素材动态更新,几乎不重复,解决了网络爬虫采集图像素材破解验证码的问题。
3.边缘处理
动态素材的另一个应用在于图像边缘处理,在滑动还原验证码中尤为重要。

动态还原验证码需要用户还原一张剪切平移后的图片,这就需要像上面文章中的旋转验证和拼图验证那样的联想能力。但不同的是,网络爬虫可以突破常规图片的旋转验证,没有联想能力。网络爬虫可以通过连续平移和比较上下图片的rgb值来确定目标位置,直到上下图片的RGB值在误差范围内。
按照这个思路,我们需要上下图片的边缘颜色相似,这就使得网络爬虫无法根据上下图片的RGB值来确定目标的滑动距离。而且,在动态材料的基础上实现这一点是非常简单的。通过动态材质程序,用相同的纹理覆盖所有物体,可以达到理想的效果。
综上所述,从对抗开始,变是验证码永恒的主题,不变的验证码很难在激烈的攻防对抗中立于不败之地。从验证码的迭代过程,也可以证明这一点。虽然验证过程没有改变,但是随着验证码的迭代,验证的难度在不断增加。
就像Top Image推出的第五代验证码,其不灵敏的背后不仅是技术的迭代,更是算法的迭代,而第五代验证码将验证码能力与Top Image防御云深度融合,不仅让防御效果一目了然,也让用户体验不断提升。
毕竟安全对抗是永恒的战场,安全防护需要组合拳,才能在“死亡”中产生黑灰。


