腾讯技术工程 · 2021年08月23日

当 AI 足够聪明时,我们的验证码还有用吗?

大家好,欢迎来到《不写代码也能看懂的风控安全系列》。

今天开启的“验证码风云录”专题将围绕一个课题展开,即探秘:“验证码为什么越做越简单了?”

在这一系列中,笔者将验证码的20年发展历程大致分为3大阶段:

· 比谁更丑 → 图像对抗时代 → 本文揭秘

· 比谁更精 → 行为对抗时代 → 下篇预告

· 比谁更深 → 资源对抗时代 → 前沿报告

而本文将要带大家走近的,便是“比比谁更丑”的图像对抗时代。

全文4000字,阅读预计15分钟,喜欢你就赞我一下!

01 #前言:为什么会有这个系列

如果说黑灰产以及其对抗像一个黑盒子,那么研究安全就像剥洋葱,一层层地打开黑灰产神秘的面纱,而伴随而来的,是一次又一次恶意攻击者的对抗冲击,一边流着泪,一边继续剥开下一层——于是你就能理解了,为什么有个安全系统名字就叫“洋葱”。

到如今,我们研究安全的历程就像腾讯验证码一样,已经走过了17个年头。今天开始的这一系列文章希望从产品和运营等非技术型同学能理解的角度出发,不光讲黑产有多厉害,也不只谈对抗有多精妙,而是尝试书写一本互联网安全行业发展的休闲史书。

在今天的推送中,我们将:

· 聊聊为什么会有验证码,它对你有什么用处;

· 揭秘验证码20年来为何会有这样的产品形态;

· 期望可以为你构建自己的产品运营工作带来启发。

02 验证码由何而来?

验证码,是安全服务中最贴近大众用户的一环,也是任何产品在用户登录环节几乎必备的一环,但是很多产品乃至用户其实都很讨厌它——这字母都扭成这样了,对产品体验、用户感受而言是如此的灭绝人性,接入它多了一个验证步骤,阻碍内容的快速提供,有可能就流失了一个潜在用户。它到底有什么用?

探究验证码为什么这么丑,最初的最初,要从它的发展历程说起!

image.png

【各种扭来扭去的字符】

最早的验证码场景,是由一名叫路易斯·冯·安(Luis von Ahn)的同学在2002年发明的。yahoo在当时第一个应用了图形化验证码这个产品,很快解决了yahoo邮箱上的垃圾邮件问题,由此图形类验证码开始了大发展时期。

腾讯验证码始于QQ。在十几年前那场疯狂的“挂太阳”热潮,无数的挂机软件带来数不清的账密泄露,坏人手里掌握的密码资源也多了起来,开始不断尝试盗号以获利。因此,QQ帐号开始频繁遭到坏人自动化程序的暴力破解,腾讯验证码最早的应用场景由此而立。

所以,各位同仁,当你的产品有可能被自动化获利的危险,就需要仔细阅读本文来分析是否需要接入验证码。

腾讯验证码迄今已走过了17个年头,从最初的4位字符到各种花样繁多的变体,再到如今的无感体验,验证码就像是整个PC互联最残酷的战场。伴随着一代又一代安全人的持续努力。

03 验证码为什么那么丑?

要回答这个问题,不得不先回到科学界一直争论不休的一个难题:

随着计算机发展得愈发智能和类人化,我们能否区分人与计算机?

image.png

【人机验证】

人机验证是安全研究的重要命题,几乎所有面向大众的产品,都有必要对人类用户和计算机访问进行区分。也正是这个原因,在很长一段时间内,为了避免被坏人的自动化程序识别,业界普遍把验证码设计得越来越复杂,长久下来,就形成了机器人和用户都看不懂的尴尬局面,用户的体验成了这场战争中的牺牲品。直到今天,我们仍能看到网上一批又一批被用户吐槽的奇葩验证码。

看似都是变得越来越扭曲古怪,其实该怎么扭也是有对应的发展周期的。它们分别是:

· 从对抗破解出发的形态扭曲

· 从人力对抗出发的以变制变

· 从真实世界出发的现实理解

3.1 从对抗破解出发:形态扭曲

早期的验证码,都是从“让人可以一目了然看懂文字,而不能轻易让程序实现分类”而出发的。说到这里你会想到什么?对,就是OCR的手写字体识别问题。早期验证码其实是被用于手写字体样本标注的。下图中的两段文字,有一部分是取自历史书籍的截图,借网友之力对文本进行标注,从而使图书转为电子档(这就是谷歌的“图书数字计划”,尽可能将全世界纸质图书扫描成电子版,让更多的书籍网络数字化,方便全球网民搜索阅读)。

image.png

【谷歌验证码】

对单纯文字的OCR,很快坏人就有了破解的模式。由于图像易于切割、文字清晰,本来识别它是一个多分类的问题,需要同时分类出26**4=46W种可能性,但在切割后就只是一个26位字母的匹配问题,分类4次仅有26种可能性——可见,能切割就能极大降低复杂度。因此,早期各种验证码的形态变化,都是为防止被切割、被匹配而设计的。

image.png

【早期破解软件】

由此可知,不是验证码自己想要长得丑,而是它背后的对抗太激烈。在图像对抗年代,验证码的更迭总是不得不与用户体验背道而驰,种种变丑的产品形态都是在对抗中被逼出来的:

image.png

【粘结:提高切割难度】

image.png

【中文:提高分类数量】

image.png

【干扰:提高去噪难度】

11.gif

【动态:提高定位难度】

3.2 从人力对抗出发:以变制变

在无休止的对抗中,安全攻城狮们不断创意迭代验证码形态,几经割据,但单说图像识别层面,其实破解算法还是占据了上风(注意:这里并不是意味着验证码无用或用户有危险。安全策略是组合拳,有多道工序,每个环节会提供恶意分以实施综合防护)。

但是,每种验证码上线一段时间后,受到巨大商业利益的诱惑,总会有大量黑灰产前去攻击破解,再倒卖识别能力。基本上,一个国民级应用的账号每天被“尝试登陆”达几十亿次是常事,而其中往往半数以上的流量都是来自黑灰产的撞库(指对账号尝试各种常见密码的批量行为,目的是试出正确密码)。

但至少有一点:验证码形态一旦发生大变化,就必然需要重新开发识别模型,或者接入人工打码(曾经互联网兼职的一种,达到数百万人次,成本较高)。攻击者的每一种选择都对应不同的撞库成本。在我部门安全女神的风控模型中,DCC模型便可以诠释对抗的初衷:

风控就是定义风险问题后尽量控制问题,控制不住就尽量去控制他可能的风险。而对验证码而言,不断更新形态,寻找各种变化的可能,就是在控制攻击者的成本。这种以变制变的思路,我们称之为魔术师验证码。

2011年7月上线后,它以魔术师快得让人看不清的手法,高频地切换呈现形态。那时候的腾讯验证码,一个名字的背后是几百套的生成逻辑和样式形态。

image.png

高频变化+持续对抗带来了很长一段时间割据战下的安稳,然而,图像对抗注定是一个与“全世界科学家相对抗的舞台”。2013年开始,深度学习发力,到2016年,黑灰产都开始普及vgg16层模型(对常见字符可轻松达到95%以上识别率)。作为行业标杆的TensorFlow,它官网的首个体验案例就是手写字体识别。单纯图像对抗时代也迎来它的至暗时刻。

image.png

【在线手写数字识别演示】

笔者也尝试过各种字符验证码的破解复现,面对深度学习的模型能力,再花样的形态都顶不住样本+算力的攻势。

image.png

【多种字符破解效率图】

3.3 从真实世界出发:现实理解

然而,安全攻城狮从不低头,图像对抗时代迎来最后的变化,而这也是验证码形态变丑的巅峰。

大量“好像人能看懂”的样式涌现,对这些“闻名于世”的验证码的吐槽也不绝于耳。甚至,市面上一度出现了完全改变对抗载体的语音验证码,然而抗性的强度却昙花一现,所谓的语音验证,被自己最强的矛(语音识别)给击败,而谷歌验证码(仅图像部分)更多成为一个借网友之力行样本标注之实的场景。

image.png

【图一:物体+逻辑的验证】

image.png

【图二:生活实景】

image.png

【图三:街景+定位的验证】

为什么说这些新形态的对抗性仅如昙花一现呢?

笔者曾尝试探究用多少的样本和算力算法能解决上述问题。举个例子,街景路牌问题采用fast-rcnn算法,仅需要500张粗糙标注的样本,30分钟训练便有了上图(图三)的定位效果。

所以,相较字符而言,反而图像层的抗性是大打折扣的,仅需几百乃至几千块的标注成本,就能达到工业级水准。其主要原因是:

· 区域有限,呈现与验证答案的区域都集中在这不足巴掌大的空间,意味着答案可以被撞出来。

· 算法更强,现实理解类型对于机器学习而言是更广泛的科研问题,意味着有无数的公开数据。

· 答案生成,对于能够呈现给用户的待验证内容终需要自己有答案,现实物体难以批量地生成。

虽然就图像抗性而言,新型验证码在高级智能识别模型面前不值一提,但是这些新型验证码,成功转变了只有字符的防护形态,从而让更多更强的风控SDK嵌入前端,进而依据更多的特征如滑动轨迹、浏览器特性、前端代码保护等提升防护能力。

image.png

【为公益代言——验证码由复杂向简单的转折点】

其中,还有不少没有举完的新型验证码例子,比如移动篮球到篮筐,旋转图像成正面,鼠标绘制物体的边缘。从用户视角来看,这些形态似乎对抗的是物体更全面的识别,正如前面的组合拳,通过新型验证码将对抗迁移到了行为层而不是图像层,不再那么依赖用户是否做出正确的答案,也成为验证码越做越简单的转折点

到了对抗2.0时代,重点就从图像转移到了前端技术,这一部分,咱们留给下篇继续聊。

04 纯图像对抗时代落下帷幕

此类机器学习技术被用于黑灰产,最可怕的地方并不是高识别率——对他们而言,一个识别率5%的模型,就已经是一个赚钱的模型了——它真正的可怕之处在于规避了变化的成本。我们前面提过人工打码,是在以变制变年代里黑灰产的终极武器,通过实时将图像传递给远处的某些“人力码工”进行标注后再返回,这样的码工甚至曾达到过几百万人次,花费成本也十分可观。

而通过组件流程化,坏人面对字符型验证码形成了自动化训练+上线+应用的逻辑,这些问题也跟着有了答案:

Q:为什么最近这些年,图像上花里胡哨的验证码越来越少了?

A:现在的验证码更多是带用户行为操作的类型,因为该领域的对抗已经无法单纯靠图像来进行。

Q:AI能破解,那能否用AI来生成图?
A:AI+图像生成,其实并没有走出工业上攻防的核心问题,即坏人的攻击模型是不断变化的,会依赖于最终是否通过这个客观因数而进行再训练和迭代。所以,即使是GAN对抗生成网络,添加特殊点来误导模型,即使一时生效也会在反复再训练中失去差异化,通过风格化大规模变化样式也是同理。

image.png
【对抗生成,让熊猫迷路】

05 割据对抗的本因

纵观这十年的图像对抗史,其反复纠缠割据不休的本质是对抗的阶段太靠前,过与不过瞬间可知,从攻击者而言,有无数的时间可以慢慢debug,有一组又一组的样本可以反复调教。

那,我们的用户危险吗?并不,让用户感受不到安全问题的威胁,一直是安全人的使命。

安全是个永恒的战场,不断被攻击,但是也从未被攻倒。安全防护也是组合拳,图像对抗的时代的尾声,前端对抗的时代也来临了。

与糟糕的用户体验告别,一个对用户更友好、对抗能力更强的形态出现了,且看下一篇!

注:文章图片来源自网络

原文:腾讯技术工程
来源:我在鹅厂做安全
作者: 业务安全小学生

推荐阅读

更多腾讯AI相关技术干货,请关注专栏腾讯技术工程
推荐阅读
关注数
8146
内容数
225
腾讯AI,物联网等相关技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息