0x00 背景概述
近期各地陆续发生一些利用短信验证码冒用身份的案件,攻击者窃取银行账户、金融类app中的财产,被害者甚至莫名“被网贷”,蒙受了极为严重的经济损失。
0x01 起因
微博网友@ -美年达芬奇 (豆瓣ID“独钓寒江雪”)7月30日发现,凌晨她的手机收到了100多条验证码,支付宝、京东、银行什么都有。
有人使用她的京东账户、支付宝等等,预定房间、给加油卡充值,总计盗刷了1万多元。对于这起案件,很多人怀疑是“GSM劫持+短信嗅探”,我们尚未看到公安机关或者运营商的官方声明,所以还不能确定这是一起短信验证码劫持嗅探攻击。
但是!但是!短信验证码确实不是一个安全的通道,需要各应用的开发者和广大用户提高警惕。
攻击手段
0x02 攻击分析
首先列举一下窃取短信验证码有哪些攻击手段:
攻击等级: ‘*’号表示难度
- 伪基站垃圾短信 *
- 嗅探GSM短信 **
- GSM中间人获取手机号码 *
- 将3G、4G降级到2G **
- 3G、4G中间人 *
0x03 攻击原理
我们简单讲解一下这几种攻击方法的原理。
0级攻击 – 伪基站垃圾短信
伪基站发垃圾短信这种攻击手法大家已经熟知。不法分子直接拉着大功率的伪基站出去,大把大把的撒垃圾短信。就像发小广告一样,发一大堆,总有那么一两个中招的。
垃圾短信不那么可怕,钓鱼诈骗短信是比较可怕的,其中含有恶意链接,不小心点击之后会中木马,或者让你填写机密信息等等。360手机卫士和其他一些手机防御软件,可以结合短信内容智能识别,通信环境智能检测,以及对链接做云拦截等技术,保护手机用户免受伪基站短信的侵害。
1级攻击 – GSM短信嗅探
这种攻击的原理是因为GSM短信没有加密,所以不法分子可以用一些窃听手法听到短信内容。这种方法是被动的,就是只“听”,不发射任何非法的无线信号。
2级攻击 – GSM中间人获取手机号码
攻击者只听到短信,其实没什么用,短信验证码需要配合网站或者app的验证过程才能起作用。所以,攻击者必须要知道目标的手机号码,可能还需要其他信息,例如身份证号,银行账号等等,其他这些信息可以通过“撞库”,或者通过侵入某些应用的账户来获得。那么攻击者如何获得手机号码呢?是通过中间人攻击实现的。
攻击者需要一个2G伪基站+一个2G伪终端,让目标手机接入2G伪基站,然后用2G伪终端冒充目标手机,接入运营商网络。连接过程中,需要鉴权信息的时候,就从目标手机那里取。连上网络之后,向外呼出一个电话,到攻击者能看到的一个手机上,攻击者通过来电显示就看到了手机号码。
我们注意到,“独钓寒江雪”的案例中,她提到通话记录中当天凌晨有一个外呼南京的电话,这个电话就有可能是用于获取手机号码的。
以前黑产的实力主要处于0级,今年以来,从各地报道的案例来看,黑产的实力至少进化到了2级。例如,《广州日报》7月27日的报道: 干扰信号拦截短信盗取账号 (http://news.dayoo.com/guangzhou/201807/27/139995_52250582.htm)
3级攻击 – 强迫从3G/4G降级到2G
手机待在3G/4G网络中是比较安全的,但是攻击者有办法把手机降级到2G。最简单的一种方法是发射强干扰信号。
这种做法直接把3G、4G的路炸了,手机发现走不通,就只好走到2G的路上去。不过要暴力干扰掉所有的3G/4G通道,是需要很大能量的,设备就会非常大,所以黑产用起来会不太方便。
另外一种更高级一点的办法,是再用一个4G伪基站,欺骗手机,“4G网络不能用了啊,到我这个2G网络来吧”,于是手机就乖乖的过去了。
这种手法我们在2016年初HITB阿姆斯特丹会议上讲过,后来Seeker在KCon上也讲过: 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证 (https://www.leiphone.com/news/201612/IP3S4Z9Z8VwLbfPr.html)
最后我们团队还推动了这个问题在标准中的修复,有个很长的故事,可以看这里:讲讲在3GPP修复重定向漏洞的故事 (https://unicorn.360.com/blog/2017/12/11/3gpp-lte/)
黑产实力到达3级还是有可能的,只是攻击门槛略高一点。
4级攻击 – 3G/4G中间人攻击
要达到4级攻击,难度就很大了,我们给了7颗星的难度级别,尤其是4G中间人攻击。我们认为目前掌握4级攻击能力的团队,全球应该在个位数!感兴趣的可以看我们团队这篇文章:谁说4G网络不能无线钓鱼攻击 —— ALTER漏洞分析 (https://unicorn.360.com/blog/2018/07/03/aLTEr/)
0x04 防御手段
1:普通用户
然后我们来看看普通人手机的防御能力:
长期处于2G,一些老式手机,或者双卡手机其中一张卡是2G,所有电话短信和流量走2G。这种情况连0级攻击都抵挡不了。
长期处于4G,但没有开通VoLTE,电话和短信是走2G通道的。挡不住1级以上的攻击。
长期处于4G,已开通VoLTE,电话和短信是走4G的。挡不住3级以上的攻击,因为有可能被降级。
那么可以采取什么防范措施呢?
如果你的手机处于状态B,当地已开通VoLTE业务,请及时开通VoLTE,这可以把你的防御等级提到C级。例如中国移动,可发送KTVOLTE到10086,即可开通。
如果手机处于状态A,尽可能换4G手机,目前最新款的手机已经开始支持双4G待机。从而提升防御等级到B或C。
一些支持防伪基站功能的手机(例如360手机、小米手机、华为手机),对2、3级攻击有一定的防御力,就是说遇到2G伪基站,不容易被骗进去。这个防御方法是,手机会观察这个基站像不像一个伪基站,如果伪基站伪装得特别像真的,也可能蒙混过关。
晚上关机,可以防以上所有攻击类型,但万一有其他问题,反而不能及时联络到个人,谨慎选择。
可以看到,普通用户能做的,非常有限。
2:运营商
那么运营商可以做什么呢?从以上分析可以看出,只要数据流量、通话、短信走3G或者4G通道,安全系数还是比较高的。短板就是2G网络!目前已经有很多国家关闭了2G网络,包括日本、韩国、美国、新加坡等多个国家、地区的20多家运营商已经正式关闭了2G网络。中国的运营商也在努力迁移用户,关闭2G网络。
根据一些报道 国内3大运营商发力:将陆续关闭2G网络 (http://mobile.163.com/18/0331/10/DE7J382S0011819H.html)
3家运营商披露的数据:2017年, 14.44亿的总移动网络用户中,尚有3.99亿2G\3G用户,占比超过27.6%,其中2G用户接近3亿户。这其中有些是手机用户,有些是物联网设备,比如水表电表、共享单车这些。所以2G网络不能随便关闭,还要坚持运营一些年头。
有人会想,那我们能不能让手机只驻留在4G网络中呢。如果你看看手机的“首选网络类型”设置,会发现有几个选项1)4G/3G/2G, 2) 3G/2G, 3)仅2G,可是却没有“仅4G/3G”这样的选项。为什么呢?因为运营商是给用户提供通信管道的,“可用性” (availability)是最重要的,万一你遇到4G/3G网络覆盖不好的地方,总得让你能连上网啊。这就是“可用性”优先于“安全性”的原则。
从5G开始,有一个新特性是,将要给手机操作系统提供更多的信息,告诉手机,这个通信管道的安全性等级,使用了什么加密算法,完整性保护算法等等。这些信息有助于App判断自己当前所处的环境的安全程度。
3:互联网公司
大家一定会问,App厂商们呢,京东白条,支付宝这些,难道没有责任吗?我们觉得,App厂商们确实应该承担最大的责任。App厂商们一定要意识到没有绝对安全的管道。今年年初,在全国信息安全标准化技术委员会(简称TC260)秘书处牵头下,三大运营商和各互联网公司的安全专家们,一起编制了《网络安全实践指南—应对截获短信验证码实施网络身份假冒攻击的技术指引》(https://www.tc260.org.cn/upload/2018-02-11/1518337506280068120.pdf) 提出多项加强身份验证安全性的建议,除短信验证码外还新增了短信上行验证、语音通话传输、常用设备绑定、生物特征识别、动态选择身份验证方式等等诸多二次验证机制。
这篇指南非常全面的描述短信验证码的风险,现状,困难点,最后给出了目前专家们认为可行的方案。
难点在于,现在我们还不能彻底抛弃短信验证码。中国网民跟国外网民的不同点是,国外网民是从PC时代过来的,习惯于使用邮箱,用户名密码。中国网民是从移动互联网时代成长起来的,手机就是唯一的标识。
为了短信验证码用还是不用的问题,各个App的产品经理和安全团队能打起来。真的,去年就这个问题我们360安全团队跟业务团队就争论过好多次。最后仍然保留了短信验证码通道,这也是遵循“可用性”优先的原则。
近期有些服务商推出了免验证码验证手机号服务,可以验证有数据链接的手机号码的真实性。这也是一种途径,就是短信通道不安全,那我创建一个更安全的通道。Google的双因子认证服务,也是类似的思路。不过,短信通道仍然是最后的备用通道,各位可以试试注册一个新的Google账户,它也要求你提供手机号码,然后是短信验证码。
0x05 结语
总之,请大家相信,各大互联网公司对这个问题是早有准备的,如果有漏网之鱼,那是我们的风险控制系统做得还不够好。
360猎网平台 (https://110.360.cn/) ,一元被骗,也能举报。希望所有人能够联合起来,打击诈骗,严惩罪犯。