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

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

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

文章插图
 
实际应用中会存在一些收不到验证码的情况,可能的原因如下:
  • 在手机端,短信被某些软件认为是垃圾信息而被拦截或者删除,或者因为手机卡欠费导致收不到短信 。
  • 在应用服务端,因为程序错误,或者安全控制策略导致部分短信发送失败 。
  • 在短信平台或者电信运营商系统,因为黑名单、关键字、流量控制,或者其它某些技术原因导致发送失败 。
针对收不到短信的问题,系统中会增加重发验证码功能,如果多次重发还收不到,系统可以支持上行短信或者语音验证码的方式,这两种方式都是短信验证码的变种 。
  • 上行短信是让用户将系统提前生成好的若干字符发送到系统指定的短信号码,据此可以验证用户拥有指定手机的控制权,从而也就认证了用户的身份 。
  • 语音验证码可以让用户发起,也可以在系统收到短信发送未成功的回执时主动推送,用户手机会收到一个自动语音通话,其中包含登录所需的验证码 。
安全风险和应对策略手机验证码的安全风险主要是被恶意利用和窃取 。
因为手机验证码的应用十分广泛,为了有一个更全面的认识,这里说的安全风险没有局限在登录这一点上,所有使用手机验证码的场景都可能存在 。这里的应对策略主要是站在系统开发者的角度,通过各种技术方案来解决或者降低手机验证码的安全风险 。
短信诈骗诈骗者先获取到用户手机号,然后冒充金融机构、公权力部门、亲朋好友,在应用中输入用户手机号请求验证码后,向用户索要对应的手机验证码,用户稍不注意可能就会造成金钱损失 。
技术人员必须知道的手机验证码登录风险

文章插图
 
针对此类问题,系统开发者可以考虑如下一些方案:
  • 在验证码中声明:工作人员不会索取,打死也不要泄露给别人 。不过人在一些特殊情况下是不会理会这些警告的 。
  • 跟踪用户的常用登录特征,比如获取验证码时的设备、IP、WIFI、地域不是常用的,系统就可以马上短信或者语音通知用户可能存在安全风险,请谨慎操作;系统还可以直接升级安全级别要求更多的验证方式,比如需要再次获取验证码、输入安全码、刷取指纹、识别人脸、插入U盾等等验证方式 。
还有一种相对隐蔽的诈骗方式,诈骗者直接向用户发送仿冒钓鱼网站的地址,用户在钓鱼网站获取验证码时,诈骗者拿着用户手机号去真实网站请求验证码,此时用户会收到一个真实的验证码,用户在钓鱼网站输入验证码后,诈骗者就可以拿着这个验证码去真实网站使用 。
针对这种情况,前边的识别用户常用登录特征的方式仍然有效 。此外短信平台和电信运营商也有责任对短信内容进行把关,短信平台需要验证发送者的真实身份、审核短信内容,并提供动态的流量控制机制,这样可以过滤掉绝大部分诈骗短信 。
其实电信运营商是能够识别手机位置的,如果电信运营商能够提供一种安全的位置认证服务,也可以解决大部分验证码诈骗问题,比如前端提交验证码认证时携带电信运营商提供的位置标识,应用服务商可以拿着这个位置标识去找电信运营商验证位置,当然这只是一个设想,现实中还没有这种方法 。
短信攻击可能有两种场景下的短信攻击:
  • 用户在前端不停地点击获取验证码,可能是担心收不到验证码,也可能是失去了等待的耐心,也可能是恶意向别的手机号发送 。
  • 攻击者直接调用发送验证码的接口,在极端的时间发送大量验证码请求,可能是发给某个用户也可能是一批用户 。
此类操作首先会浪费短信资源,给应用服务商造成损失;恶意攻击还会向无辜的用户发送大量短信,造成骚扰攻击 。
技术人员必须知道的手机验证码登录风险

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


推荐阅读