短信验证码:是时候说再见了

标签: tuicool | 发表时间:2018-10-04 00:00 | 作者:
出处:http://itindex.net/relian

大约在 2015 年底开始,中国互联网开始流行起使用短信验证码的方式进行用户鉴权。

虽然已经无法深究是什么原因或是哪家公司开始的这个潮流(实际上这样的深究也是毫无意义的),但短信验证码已经成为了中国互联网的「标配」,甚至和其他国民级应用配合后,它几乎已经完成了中国互联网和国际互联网分道扬镳的历史性转折:在中国本土,他们使用的非常好,但对于非中国大陆的居民,或非中国籍居民来说,服务几乎无法使用。

然而,与大部分人的认知不同,短信验证码并不能提供更好的安全性。

爱范儿之前的文章中已提到过关于使用 GSM snooping 方法进行短信验证码的终端窃听的实例。 这篇我在两年前写的文章也有更多的信息。除了最后一英里的安全性存疑之外,由于骨干网分光设备及 Lawful Interception设备的安装已成为常态,如果「服务商 —— 短信服务商 —— 运营商」的链路中任何一个环节若未使用工业级标准进行加密传输,或无法保证实施 前向安全( Forward Secrecy),则整个链路是不可信任的。

同样的,短信服务商若没有良好的安全意识,那么别有用心的人可能在此处潜伏,窃取验证码。除此之外,来自短信服务商以及运营商的内部威胁 ( insider risk) 是不可小觑的。

简单的说,由于一般的短信传输路径存在过多的薄弱之处,其安全性是值得怀疑的。

使用短信验证码除了有安全性问题之外,还存在着个人信息泄露的极大风险。可能由于携号转网并未达成,而大部分运营商的 新用户优惠远好于老用户优惠(从商业角度 bait-and-switch 是个不错的策略),频繁更换手机号已成为了一种常见行为。某些国民级聊天软件的普及更是让手机号交换的需求大大降低 —— 实际上我在最近一两年鲜有与其他人交换手机号的情况。

更换手机号带来的问题则是原有的号码所有者经常忘记取消手机号与账户的绑定,不少服务甚至无法更换号码绑定。因此,一旦号码被再次 循环利用,存心不良的攻击者可以利用此问题针对防护不佳的平台作出攻击,以取得用户资料。有些情况下,甚至可以取得足够多的资料,进行 身份盗窃( identity theft)。

这对用户的隐私是极大的威胁。

即便是使用了极佳的安全手段(提示:这种手段并不存在),一旦手机号被送出,用户的隐私可能受到极大的威胁。在诸多公司缺乏合理的隐私策略的前提下 ,用户的个人信息可能会与信用性受怀疑的第三方公司共享,甚至可能被出售。(爱范儿读者不必担心,我们有详细的隐私策略供君研究。)对于用户而言,这意味着更多的 追踪器(不要忘记大部分 DSP 均支持使用手机号做为用户标识符),以及更多的垃圾短信(这毕竟是手机号码)。这对于大部分读者来说也已经不陌生了。

短信验证同样无法完全提供运营商想得到的用户实名认证的功效。下面一张来自国际互联网的截图便已经足够说明问题。当然了,这样的信息甚至可能泄露于上面描述的方式。

短信验证码泄露造成实际损失的例子,海内外皆有。较为人所知的是近期 豆瓣网友「独钓寒江雪」的例子,以及 Coinbase.com 用户由于 Verizon 的安全漏洞导致数千元的 Bitcoin 被盗取的例子。

既然有如此之多的问题,为什么依然有诸多公司选择使用短信认证,甚至选择短信认证为唯一的认证方式呢?

大概有两个解释 —— 若不是无知,便是真的坏。无知不算可耻,互联网安全本身是中国研究极少而美国相对发达的学科,如果本文可以让更多从业者了解到这个事实,便已推进中国互联网进了一小步;而坏则是更大的问题。发垃圾短信是可以带来短期的收益的,不尊重用户隐私是可以成就诸多「模式创新」的,但「模式创新」带来的恶评,相信各位读者也从各大媒体中没少读到。甚至有 Twitter 用户提到,“Web experience in China is like a bowl of shit being served by a scar-faced, slick-haired waiter with nothing beneath his suit jacket, who just learned to bow politely with an ugly and hideous grin. Utterly unbearable.” (编者译:中国网站不仅难看还难用,刀疤脸梳油头,赤膊穿西装,端一盆屎到你面前,微微欠身冷笑着请你吃的那种。 )

除了短信验证,作为身份验证的方式可能还有什么呢?

传统的基于用户名密码的验证方式当然没错,但是大部分人都不对密码安全有深入的了解,毕竟互联网用户并非网络安全专家。除了老生常谈的不应重用密码(真相是大家都在重用密码)、使用强密码(但强密码逃不过弱加密方式甚至明文密码的威胁)、使用密码管理器(唯一问题是 LastPass 的 bug 多如牛毛且界面丑到天际、1Password 的价格令人惊叹、iCloud Passphrase 的使用方式费解且不跨平台)之外,有什么真的解决问题的方法?

OpenID的尝试已经实施上失败了 (这个名词可能也只有少部分读者仍有印象), Mozilla Persona也宣告失败。标准的  OIDC(并非私有的 OAuth 2.0)虽然作为一个标准来说较为成功,但更多的被用于企业级的 SSO 解决方案,而为面向客户端的解决方案。基于巨头的(使用 OAuth 2.0 或类似技术的)认证方式虽然提供了更好的便利性,但它并不可打消用户作为一个普通公民对隐私的顾虑 —— 个人信息多多少少被共享了出去。

我们有什么选项?这可能是最难回答的一个问题。

从用户隐私角度出发,任何一个人都希望尽快能少的提供信息给任何商业公司;从用户体验的角度出发,任何一个产品都应需要最少代价完成「登录」以及合规性的要求,并尽可能少的将用户暴露在风险面之下。最好的策略,目前看起来似乎仍然是基于传统的用户名密码方式的认证,但用户是否埋单、是否懂得保护自己,这是个很值得研究的话题。或许使用巨头提供的登录权衡下来,仍然是折衷的选择:避免巨头的追踪已经十分困难。

但不管怎样,是时候对短信验证码说再见了 —— 一个漏洞百出的方案,绝对不应被理所当然的认为「这就是做事情的方法」。

(题图来自 Thought Catalog)

相关 [短信 验证码 是时候] 推荐:

短信验证码:是时候说再见了

- - IT瘾-tuicool
大约在 2015 年底开始,中国互联网开始流行起使用短信验证码的方式进行用户鉴权. 虽然已经无法深究是什么原因或是哪家公司开始的这个潮流(实际上这样的深究也是毫无意义的),但短信验证码已经成为了中国互联网的「标配」,甚至和其他国民级应用配合后,它几乎已经完成了中国互联网和国际互联网分道扬镳的历史性转折:在中国本土,他们使用的非常好,但对于非中国大陆的居民,或非中国籍居民来说,服务几乎无法使用.

“短信验证码”早已不安全,睡梦之中就能被盗刷

- - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
近日,国内各地都陆续发生了一些利用短信验证码冒用身份、窃取银行账户、金融类 APP 财产的案件,受害者甚至莫名其妙“被网贷”,进而遭遇较大经济损失. 根据@江宁公安在线 的分析,这种犯罪手法是近两年来出现的新型伪基站犯罪手段,多地警方已经有所发现. 具体说来,这是一种新型的“伪基站”技术. 主要采用“GSM劫持+短信嗅探技术”,可实时获取用户手机短信内容,进而利用各大知名银行、网站、移动支付APP存在的技术漏洞和缺陷,实现信息窃取、资金盗刷和网络诈骗等犯罪.

盯上网上银行用户 恶意软件SpyEye可盗取短信验证码

- bill - cnBeta.COM
两三周前,有银行客户在使用互联网银行服务时,发现有恶意软件盗取他们的个人资料,并尝试进行转账. 据了解,目前并没有任何人因此蒙受财务损失. 新加坡银行公会昨天发布文告,表示有些网上银行用户的电脑,被一个叫做“SpyEye”的恶意软件(malware)所感染. 这相信是银行公会多年来,首次公开提醒银行客户要慎防恶意软件入侵.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

验证码新趋势:NuCaptcha推出动态验证码

- Mac.Baby - 36氪
曾开发过提供视频验证码服务的加拿大创业公司NuCaptcha刚刚发布了动态验证码,可为网站提供新的安全保证,有望为验证码市场带来新气象. 验证码是人们在网站上最常见的安全问题,只要是上网的人都会遇到被要求辨认和输入数字或者单词的情况. 网站通过验证码来区分人和恶意程序. 而我们所见的大部分的验证码都是基于文字的.

10种用户友好的验证码

- Liang - cnBeta.COM
众所周知,验证码就是帮助我们确定答案不是由电脑自己生成的. 今天我推荐给大家10种用户体验绝佳、令人意想不到的验证码设计风格.

使用 PIL 生成验证码图片

- HarryHan - python.cn(jobs, news)
现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一. 这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码. _letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z. _upper_cases = _letter_cases.upper() # 大写字母.

response生成图片验证码

- - ITeye博客
服务器对客户端浏览器做出的响应被封装成一个HttpResponse对象. 要对浏览器进行操作,只需要操作HttpRespones对象,通过HttpServletResponse.getWriter()获得PrintWriter,该对象为outputStream的子类.     本例将使用Servlet输出图片验证码.

验证码的现在与未来

- Yishen - 爱范儿 · Beats of Bits
”验证码“( CAPTCHA )其实并不是各位网友总是在不同网站上看到的难以辨认的字母组合的代名词,而是“全自动区分计算机和人类的图灵测试”的俗称,顾名思义,它的作用是区分计算机和人类. 在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答. 这个问题可以由计算机生成并评判,但是必须只有人类才能解答.

jsp+servlet实现验证码功能

- - CSDN博客推荐文章
验证码的功能大多数人可能不都理解,但几乎每个安全网站都会有. 验证码是用来防止非人为因素操作的行为,例如一个黑客要黑一个网站,怎么弄呢. 最简单的思路当然是造成其网路拥堵直至系统瘫痪掉. 如果没有验证码,那么我就可以在注册页面,写一个程序,只有注册表单,不断更换主键或不可重复的内容,不停的提交. 那这样每秒可以注册几万次都有可能,这样服务器就大量负载,很容易就瘫痪并死掉.