短信验证码的安全性问题

你有没有注意到,有时候你收到的短信验证码长这样,并且短信验证码会自动填充:

[WhatsApp】您的验证码是:1234。 dF4Sse6U7d

后面这串乱码是干啥用的?这个后面的技术就是SMS Retriever。

读取短信的权限被认为是高危权限,因此有着来自系统和应用商店的双重限制,一般的APP想要读取短信,是很难的,在app运行时需要动态的请求权限,会弹框询问用户是否同意授权,并且如果发布到Google Play前,需要先接受人工审核,必须要是一个专门用来代替系统原有的短信app。

但是,SMS Retriever就是其中一个方便之门。在安卓高版本(安卓8+)中,提出了几个新的API专门用来处理短信验证码,它们的核心思想是:通过服务器在短信中附加标识性字符串来指定仅将该短信转发给特定的app。通过使用这些API,app可以无需申请其他任何的短信相关API而自动完成短信验证码的填充过程。

那我有没有可能在A应用里提取B应用发的验证码呢?诀窍就在于那串乱码,它是包含了app的package_name和签名的一串字符的hashcode,由系统进行校验,因此理论上是安全的。

但是,仍然会存在一些安全问题,比如Hash碰撞和客户端硬编码等。

refer:https://ashenone66.cn/2022/06/16/lun-wen-bi-ji-on-the-insecurity-of-sms-one-time-password-message-against-local-attackers-in-modern-mobile-devices/
 
 
Back to Top