专栏首页FreeBuf再见了,打码平台:对抗打码平台的验证码思路

再见了,打码平台:对抗打码平台的验证码思路

某日,一朋友深夜微信上问我,如果打码平台盯上了你,你该咋整? 政治正确的回答方式是:加强风控策略,多维度判断使用者意图,减低对验证码的依赖。 显然这不是我或者朋友真正想要的,现在不少企业面对打码平台有时候束手无策,只能放弃对验证码的依赖,我觉着有点可惜。

我们先来回顾一下,验证码的学名是啥?

图灵测试。

图灵测试的目的是为了区分人与机器,而打码平台的加入使得这个过程立即无效——打码平台上活跃的对象还真是人。

但这样就没辙了么?

No。这“人”与“人”之间是有差别的。我们仔细想想,我们加入验证码的目的其实除了图灵测试之外还有一个重要的潜在期望——我需要知道你的确是你。

绝大部分需要部署验证码的地方其实都有具体和人或行为关联的信息,例如登录、下单、领券、支付等;少数部分信息可能和人没有那么强的关联,比如搜索、匿名评论等。可无论如何,验证码是对一个具体的动作进行“人”机识别需要时才产生的。这里指的“人”是某些信息本身的拥有者。

我们看看过去的验证码都有什么类型:

1、字符型验证码

这个太简单了,不再举例。

顺便吐槽一下,就算是个简单的字符型验证码,很多人却设计的像狗屎,这其中包括了一些安全公司或具有安全属性的产品。基本的字符黏连、形变都没有,光用夸张的混淆色、噪点,一个二值化就如同裸体相亲一样让人一见长短,实在垃圾。

2、短信验证码

这种类型的验证码分为两种(用户主动发送和用户被动接收),通常用在多因素认证中。

被动接受型的验证码对于验证码发起方(服务器)来说成本很高(短信收费)。有些情况下,短信验证码本身就是需要被保护的对象(短信轰炸)。

主动发送型验证码对于用户体验极差(需要用户进行大量操作,用户需要为你的风控策略付费),除非这项业务已被垄断(例如某购票系统),否则老板几乎不会同意你这么做的。

况且这两种验证码都有收码平台可以无缝覆盖,单纯用作图灵测试没啥意义。

3、问答验证码

这是一个大类,包括百度贴吧的看拼音选汉字的验证码、12306的看文字选图片验证码、Google norecaptcha的二次图片验证,或者网上爆料出来叫你展开傅里叶级数统统都是问答型验证码的一种。

这种验证码的前身是题库,题库本身存在中容易被穷举的弊端。其他“高级”问答型验证码的安全性,则除了依赖计算机视觉功能受限外,还依赖于人类的认识活动无法被机器模拟的大前提。

对于打码平台来说,问答型验证码还是轻而易举的(你要是用高数题作验证码算我没说)。

4、字符型行为验证码

常见的有Google norecaptcha第一次验证或者常见的一些拖动型的验证码。这些验证码每个都声称自己用了什么机器学习、大数据分析、人类行为建模等等一大堆听起来就很牛逼的技术。

5、语音验证码

语音验证码大多属于无障碍设施的一种,为的是视障人士也能正常通过验证,后来演化成对抗猫池的方向之一(需要接听来电)。之前还出现过Google recaptcha被Google自己的语音识别API干翻的趣事,这里也不再一一展开。

上面这些验证码呢,应该基本覆盖了日常能见到的绝大部分场景,也是打码平台或者收码平台存活下去的基础。

大家有没有发现,这些验证码有一个共同的特点:上下文无关。

这里我们定义一个概念:上下文无关验证码。

上下文无关验证码是一个问题与答案或规律一一对应的集合,对于任意给定问题,一定能通过问题本身得出答案。

同学们,划线部分是重点,打码平台要考啊!!!

用通俗一点的话说,就是任意的验证码都是完全独立和与具体场景的上下文无关的。比如说,我的这个验证码既可以在登录场景中能用到,也能在下单场景上使用,无论是对A用户还是对B用户,同样的验证码也能适用。甚至说,你把验证码随便截个图发给IM上的好友,他立马知道什么意思。某购票系统的验证码变态吧,但是你试试看把他截个图别人能答不能答?

既然验证码的应用有场景性,也有具体的上下文,那我们以前都没用到几个“参数”,我们是不是可以考虑用它一下?

我们再定义一个概念:上下文相关验证码。

上下文相关验证码是一个上下文、一个问题与一个答案对应的三元组,对于任意给定问题,能且仅能在具体上下文下得到对应答案。

这里的问题设计是有技巧的,它需要满足一个条件:上下文包含的内容中存在用户不愿或不宜公开的信息,且该信息服务器知晓。

用一句话来形容一下这一类的验证码:就算截图发给基友,他也不能给出正确答案。

怎么,这样的形容很模糊,不够形象?

那我举个具体的例子,场景是登录。

以前,当一个人的登录行为遇到风控策略时,往往会在输入账号密码的同时输入验证码。

现在,我们把验证码输入策略稍稍往后推一步——在用户提交完账号和密码后要求输入这样一个验证码:

我们设想一下,如果机器或打码平台需要识别出这个验证码要满足什么条件:

做题者需要是人,或具有相当精度的OCR工具(OCR识别几乎不能有错);

做题者需要知道这个提交者的账号和密码明文;

那么,这样一样来,先不说打码平台如果能实现后费用必须各种增加,光这第二点就会把打码者和攻击者之间的利益约束消灭:既然我已经知道了账号密码,要你攻击者何用?而对于做题者即是提交者来说,这样的设计不会带来什么问题。

我们显然可以推测——攻击者自身无法通过OCR识别这个验证码的话,也不愿意将这种类型的验证码往外众包。否则,打码平台或者打码者可以开展大型的黑吃黑活动(如果界面上有水印,做题者还知道这个验证码的来源),攻击者的风险与收益不再成比例,自然也没有人愿意搞事儿了。

除了登录场景之外,我们在下单、领券、加好友等等的时候也可以应用类似的策略:

请选择下图中您手机号【没有/有】包含的数字。

请选择下图中您地址中【包含/不包含】的【省份/县市/具体地址】。

请选择下图中您获取优惠券名称中【包含/不包含】的汉字。

请选择您要添加的好友名称。

可惜的是,这个验证码部署成本很高。因为它不在像之前的验证码一样,能够做到“一次设计处处可用”。上下文相关验证码则必须对具体场景的上下文设计一个具体策略,这点和风控与业务的高耦合很像。部分大厂也部署了类似的策略,只不过他们更多的把它定义为“安全验证”。

本文只是抛了块砖,希望给大家在设计验证码的时候可以有一个新的思路。标题可能有些夸张,还请海涵。

本文分享自微信公众号 - FreeBuf(freebuf),作者:idapro

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 登录注册表单渗透

    大家在甲方授权的渗透测试中,经常会遇到各种表单:登录、注册、密码修改、密码找回等表单,本技术稿着重介绍关于各种表单的渗透经验,抛砖引玉,欢迎大家交流互动。

    FB客服
  • 验证码安全那些事

    前言 最近在研究验证码安全,本文主要分析四种流行的验证码(图形,短信,语音和滑动)进行分析,写这篇文章的出发点并非是绕过或破解验证码,而是根据自身业务情况来选择...

    FB客服
  • 黑产用“未来武器”破解验证码,打码小工都哭了

    当我们正讨论如何用AI推动产业升级、改变未来生活时,不法分子也在研究AI技术,并通过各种手段非法牟利。近日,腾讯守护者计划安全团队协助警方打掉市面上最大打码平台...

    FB客服
  • 验证码安全那些事

    前言 最近在研究验证码安全,本文主要分析四种流行的验证码(图形,短信,语音和滑动)进行分析,写这篇文章的出发点并非是绕过或破解验证码,而是根据自身业务情况来选择...

    FB客服
  • 互联网应用常见验证码技术一览

    原理:向服务端请求,生成随机的字符,写入会话请求,同时将随机字符生成对应图片,响应给前端;前端输入对应字符的验证码,向后台发起校验。

    歪脖贰点零
  • 网站安全检测之图片验证码

    在对网站安全进行整体的安全检测的时候,用户登陆以及用户留言,评论,设置支付密码,以及一些网站功能方面都会用到图片验证码,针对于验证码我们SINE安全对其进行了详...

    网站安全专家
  • 自动化测试解决验证码问题

    短信验证码只做了手工测试,当时想的是短信验证码需要一台手机,并且能够发送验证码,由于当时没有做移动端的任何测试,考虑到成本问题只能在自动化测试是放弃这种登录验证...

    软测小生
  • 如何设计相对安全的图形验证码?

    验证码(CAPTCHA)即“Completely Automated Public Turing test to tell Computers and Huma...

    宜信技术学院
  • 写给爬虫工程师的验证码识别教程

    但是对于一个爬虫工程师来说,去学习 机器学习相关知识可能成本太高了.(当然有空的话,还是要好好学的)

    爬虫
  • 网站漏洞修复之图片验证码的详细修复方案

    在对网站安全进行整体的安全检测的时候,用户登陆以及用户留言,评论,设置支付密码,以及一些网站功能方面都会用到图片验证码,针对于验证码我们SINE安全对其进行了详...

    技术分享达人

扫码关注云+社区

领取腾讯云代金券