您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

技术人员必须知道的手机验证码登录风险

时间:2022-03-24 10:58:34  来源:  作者:萤火架构

手机验证码登录是一种常见的应用登录方式,简单方便,不用记忆密码,市面上能见到的App基本都支持这种登录方式,很多应用还把登录和注册集成到了一起,注册+登录一气呵成,给用户省去了很多麻烦,颇有一机在手、天下我有的感觉。

登录原理

手机验证码登录的原理很简单,对于一个正常的登录流程,看下边这张图就够了:

技术人员必须知道的手机验证码登录风险

 

实际应用中会存在一些收不到验证码的情况,可能的原因如下:

  • 在手机端,短信被某些软件认为是垃圾信息而被拦截或者删除,或者因为手机卡欠费导致收不到短信。
  • 在应用服务端,因为程序错误,或者安全控制策略导致部分短信发送失败。
  • 在短信平台或者电信运营商系统,因为黑名单、关键字、流量控制,或者其它某些技术原因导致发送失败。

针对收不到短信的问题,系统中会增加重发验证码功能,如果多次重发还收不到,系统可以支持上行短信或者语音验证码的方式,这两种方式都是短信验证码的变种。

  • 上行短信是让用户将系统提前生成好的若干字符发送到系统指定的短信号码,据此可以验证用户拥有指定手机的控制权,从而也就认证了用户的身份。
  • 语音验证码可以让用户发起,也可以在系统收到短信发送未成功的回执时主动推送,用户手机会收到一个自动语音通话,其中包含登录所需的验证码。

安全风险和应对策略

手机验证码的安全风险主要是被恶意利用和窃取。

因为手机验证码的应用十分广泛,为了有一个更全面的认识,这里说的安全风险没有局限在登录这一点上,所有使用手机验证码的场景都可能存在。这里的应对策略主要是站在系统开发者的角度,通过各种技术方案来解决或者降低手机验证码的安全风险。

短信诈骗

诈骗者先获取到用户手机号,然后冒充金融机构、公权力部门、亲朋好友,在应用中输入用户手机号请求验证码后,向用户索要对应的手机验证码,用户稍不注意可能就会造成金钱损失。

技术人员必须知道的手机验证码登录风险

 

针对此类问题,系统开发者可以考虑如下一些方案:

  • 在验证码中声明:工作人员不会索取,打死也不要泄露给别人。不过人在一些特殊情况下是不会理会这些警告的。
  • 跟踪用户的常用登录特征,比如获取验证码时的设备、IP、wifi、地域不是常用的,系统就可以马上短信或者语音通知用户可能存在安全风险,请谨慎操作;系统还可以直接升级安全级别要求更多的验证方式,比如需要再次获取验证码、输入安全码、刷取指纹、识别人脸、插入U盾等等验证方式。

还有一种相对隐蔽的诈骗方式,诈骗者直接向用户发送仿冒钓鱼网站的地址,用户在钓鱼网站获取验证码时,诈骗者拿着用户手机号去真实网站请求验证码,此时用户会收到一个真实的验证码,用户在钓鱼网站输入验证码后,诈骗者就可以拿着这个验证码去真实网站使用。

针对这种情况,前边的识别用户常用登录特征的方式仍然有效。此外短信平台和电信运营商也有责任对短信内容进行把关,短信平台需要验证发送者的真实身份、审核短信内容,并提供动态的流量控制机制,这样可以过滤掉绝大部分诈骗短信。

其实电信运营商是能够识别手机位置的,如果电信运营商能够提供一种安全的位置认证服务,也可以解决大部分验证码诈骗问题,比如前端提交验证码认证时携带电信运营商提供的位置标识,应用服务商可以拿着这个位置标识去找电信运营商验证位置,当然这只是一个设想,现实中还没有这种方法。

短信攻击

可能有两种场景下的短信攻击:

  • 用户在前端不停地点击获取验证码,可能是担心收不到验证码,也可能是失去了等待的耐心,也可能是恶意向别的手机号发送。
  • 攻击者直接调用发送验证码的接口,在极端的时间发送大量验证码请求,可能是发给某个用户也可能是一批用户。

此类操作首先会浪费短信资源,给应用服务商造成损失;恶意攻击还会向无辜的用户发送大量短信,造成骚扰攻击。

技术人员必须知道的手机验证码登录风险

 

应对这种问题,可以考虑如下一些方案:

  • 增加其它验证。 获取短信验证码之前必须先通过这些验证,比如图形验证码、滑动验证码、数学公式验证码等等。这些方式可以增加发送短信验证码的难度,降低人工的发送速度,尽量避免机器人自动操作。
  • 对操作进行限流。 比如现在前端常见的发送短信验证码倒计时,一般每次请求验证码后经过若干秒才能再次发送。因为如果攻击者获取到了发送验证码的服务接口,就可以摆脱前端逻辑的限制,所以后端也可以采用同样的策略,对设备Id、手机号、IP、用户、业务类型等等,以及它们的各种组合,进行频率控制。应用开发者还可以根据发送结果特征来进行控制,比如空号率,如果空号太多则说明可能是机器人随机生成的手机号。在单一频率的限制基础之上,还可以增加更多的时间控制,在分钟、小时、天等时间维度上做不同的阈值限制。
  • 给用户提供一个短信退订入口。 用户频繁收到非自己主动发起的验证码短信时,可以提供一个退订入口,让用户在短时间内关闭短信验证码,应用服务此时可以忽略给用户发送验证码的请求,或者直接去掉发送验证码的功能入口。

但是这种控制要尽量以不影响用户的正常业务操作为前提,否则就得不偿失了。

  • 比如图形验证码的难度不要太高,毕竟大部分业务不是12306,你照搬过来可能就会弄巧成拙。
  • 再比如对于限流控制,假设正常用户一般只在一天的某些时候进行操作,不会一天24小时都在做某一件事,则可以这样做:每个手机号每小时只能发送X次,每天只能发送Y次,这两个数值要符合 X>Y。
  • 对于严重的攻击,应该设置熔断机制,此时不得不牺牲可用性。比如短时间涌入了大量针对不同手机号的验证码需求,很可能是受到了DDoS攻击,因为资源有限,此时正常用户的操作也会受到影响,可以依托全局限流,触发限流时直接关闭验证码服务一段时间。

网络窃听

假设用户收到了登录验证码,输入正确后提交服务端验证。在从手机端到服务端的传输过程中,会经过很多的网络设备和服务器系统,登录提交的内容有被拦截获取的可能,此时攻击者就可以阻断请求,自己拿着用户的手机号和验证码去登录。

技术人员必须知道的手机验证码登录风险

 

应对这种问题,一般需要对网络传输内容进行加密,比如现在常用的https通信,可以保证两端之间的传输内容安全,不被窃听。对于传输安全,一般这样处理也就够了。

不过https也不是银弹,如果有攻击者在客户端偷偷导入了自己的证书,然后让网络请求都先通过自己进行代理,再发送到目标地址,则攻击者还是能够获取到请求内容,想体验这种方式的可以使用fiddler试试。还有https证书存在错发的可能,如果给攻击者发放了别人的证书,此时安全传输也就没什么意义了。

技术人员必须知道的手机验证码登录风险

 

为了更高的安全性,传输内容可以在应用中加解密,客户端对要传输的数据按照与服务端的约定进行加密,然后再发送到网络,攻击者截获后,如果没有有效的解密手段,则可以保证数据不被窃听。加密的重点是保证密钥安全,不被窃取和替换,可以采用其它安全信道传输,甚至线下传递的方式。对于验证码这种仅做验证的数据,还可以通过加盐后进行慢Hash运算,攻击者即使拿到了传输内容,要进行破解的难度也相当巨大。

本地窃听

如果系统上安装了恶意软件或者非官方版本的软件,特别是在盗版系统、被Root或者越狱的手机系统中,攻击者也能比较容易的拦截并窃取短信验证码;同时网络窃听中的加解密也可能失去作用,因为软件已经不可信,在不同的操作之间有没有发生什么猫腻,很难确定。

最近几年在移动设备上引入了一个称为可信执行环境(简称TEE)的概念,独立于操作系统,单独的应用,单独运行,有的甚至有单独的处理器和存储,外部很难进入和破解。一些关键的操作都封装在这里边,比如指纹的采集、注册和认证,密钥的生成和使用,版权视频的解码和显示,等等。如果把短信验证码的处理也放在这里边,无疑会安全很多,不过这要解决很多通信方面的问题,收益与成本可能不成正比。在台式机中这一技术还所见不多,可能台式机的环境已经有了比较成熟的安全体系,不过从移动端迁移过来的难度应该也不大。

短信嗅探

短信嗅探也是一种窃听技术,不过是通过攻击电信网络通信的方式。

现在手机一般都使用4G、5G网络了,但是“短信嗅探”技术只针对2G网络,不法分子通过特殊设备压制基站信号,或者选择网络质量不佳的地方,或者使用4G伪基站欺骗手机,这会导致网络降频,使手机的3G、4G通信降低到2G。

2G网络下,只有基站验证手机,手机不能验证基站,攻击者通过架设伪基站,让目标手机连接上来,然后就能获取一些连接鉴权信息,再冒充目标手机去连接真基站,连上以后拨打攻击者的另一个手机,通过来电显示得到目标手机号码。

基站本身并不会用特定方向的信号与每部手机通信,而是向四周以广播的形式发送信号。所以每部手机实际上也是可以接收到其他手机的信号,2G网络传输数据时没有加密,短信内容是明文传输的,就可以嗅探到目标手机的短信。加之2G通讯协议是开源的,所以这件事的技术门槛并不高。

技术人员必须知道的手机验证码登录风险

 

因为这种攻击要求手机不能移动,如果基站切换就没用了,所以攻击一般选择夜深人静的时候。对于普通用户来说,睡觉的时候可以选择关机或者开启飞行模式;另外开通 VoLTE ,可以让电话和短信都是走 4G 通道,不过网络降级很难防范;或者买个能识别伪基站的手机,不过没办法保证百分百能够识别;或者就只能等着移动运营商关闭2G网络了。

对于应用系统开发者,应该认识到通信通道的不安全性。必要的时候开启双因子验证,除短信验证码外还可以使用短信上行验证、语音通话传输、专用密码验证、常用设备绑定、生物特征识别、动态选择身份验证方式等等多种二次验证方法。

重放攻击

假设某些交易服务需要通过短信验证码来验证用户的身份。如果有攻击者截获了交易请求报文,然后多次发送到服务端,服务端仅检查了验证码是否正确,则可能实际发生多次交易。此时攻击者都不需要解密传输内容。

技术人员必须知道的手机验证码登录风险

 

此时应该限制验证码只能够使用一次,服务端收到交易请求时首先检查验证码,检查通过后将验证码置位或删除,然后再处理交易,不管交易是否成功,验证码都不能再次使用。另外还应该在生成验证码时设置一个较短的有效期,如果用户没有实际提交,攻击者也必须在有效期内才能使用,增加攻击难度。

当然你也可以使用更通用的防重放手段,比如每次请求验证码都先从后端获取一个随机数,随机数如果已经使用过则不能再次使用,随机数如果不存在也不能处理请求。当然随机数也可以在前端生成,服务端如果收到了重复的随机数则拒绝请求,但是需要防止传输过程中随机数不被篡改,可以通过密钥签名的方式。



Tags:验证码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
注意!密码、验证码都没说,钱是怎么被骗走的?
转自:科普中国“我密码和验证码都没有给他,为什么钱还是被骗子骗走了?”骗子是怎么做到的呢?真实案例今年1月,武汉市民张某在家接到一陌生电话,电话自称是某平台的客服,告诉张某购...【详细内容】
2024-04-11  Search: 验证码  点击:(10)  评论:(0)  加入收藏
微软 Edge 浏览器将推出两大新功能:设备端加密和自动验证验证码
8 月 23 日消息,微软正在为其 Edge 浏览器开发新功能,将为用户带来更便捷的体验以及更好的隐私和安全保护。据 Leopeva64 发现,微软正在为 Edge 浏览器的安卓版本开发两个新功...【详细内容】
2023-08-23  Search: 验证码  点击:(295)  评论:(0)  加入收藏
在WordPress登录和注册表中添加验证码
您想将CAPTCHA添加到WordPress网站的登录和注册表单中吗?WordPress登录和用户注册页面通常是黑客,垃圾邮件发送者和暴力攻击的主要目标。避免这些攻击的一种方法是使用CAPTCHA...【详细内容】
2023-08-03  Search: 验证码  点击:(263)  评论:(0)  加入收藏
验证码越来越抽象,我快不能证明自己是人类了。
为了把机器人拦在门外,人类发明了验证码。但不知何时起,验证码开始处处刁难人类。它就像路上的减速带,你过是能过,但总会咯噔一下,而且越急就越难受。黑胖和我说,那夜他突想温习两...【详细内容】
2023-07-03  Search: 验证码  点击:(243)  评论:(0)  加入收藏
验证码竟成骚扰工具,谁在作祟?
本是用于APP注册、网站登录身份验证的手机短信验证码,摇身一变成了骚扰手机用户的帮凶,这是怎么回事儿?近期,不少市民到四川遂宁公安机关报案称:自己手机突然“抽风”,在非本人操...【详细内容】
2023-04-21  Search: 验证码  点击:(254)  评论:(0)  加入收藏
五分钟搞定验证码,你学会了吗?
哈喽,大家好,我是了不起。我们其实很经常看到,登录一些网站其实是需要验证码的。使用验证码是现在很多网站通行的一种方式,因为计算机很难识别验证码,所以可以识别验证码的用户就...【详细内容】
2023-04-04  Search: 验证码  点击:(173)  评论:(0)  加入收藏
KgCaptcha 行为验证码安全策略设置
前言在验证码项目中,都会遇到验证码被恶意大量高频的调用,给服务造成很多无效的注册或登录,占用大量的系统资源。而我在想,有没有哪一款验证码产品可以设置黑/白名单限制IP访问...【详细内容】
2023-03-03  Search: 验证码  点击:(135)  评论:(0)  加入收藏
Spring Security自定义认证逻辑实现图片验证码登录
前言相信大家在网上冲浪都遇到过登录时输入图片验证码的情况,既然我们已经学习了 Spring Security,也上手实现过几个案例,那不妨来研究一下如何实现这一功能。首先需要明确的是...【详细内容】
2022-12-12  Search: 验证码  点击:(256)  评论:(0)  加入收藏
一键去除网页BOM属性「解决乱码,头部空白,验证码不显示问题」
几个常出现的问题:1.网站打开空白2.页面头部出现多余的空白3.网站出现乱码,如“锘�”4.后台登录验证码不显示解决方案:1.选用专业的编辑器,例如notepad++,sublime,editplus这样不会...【详细内容】
2022-11-25  Search: 验证码  点击:(341)  评论:(0)  加入收藏
一个简单的设置,让手机自动填充验证码,省心省力
大家好,我们日常手机登录各种不同的软件APP,除了使用账号密码登录以外,还可以使用手机验证码登录现在很多平台为了安全性,在我们输入密码登录的时候,额外还要求接受短信验证码进...【详细内容】
2022-11-22  Search: 验证码  点击:(220)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(1)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(1)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(8)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(13)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条