[此文章已发表在“浅黑科技”公众号]

在上周刚结束的3GPP RAN2#100次会议中,一个关于LTE重定向的安全问题终于得到了修复。自我们2016年5月公布这个漏洞,之后在3GPP标准会议多次呼吁,终于在一年多之后,问题得到解决。因此写一篇短文,记录一下此间的曲折过程。

2016年5月

大家知道独角兽这边伪基站玩的比较多,各种制式的伪基站都有一些。小伙伴们有时懒得进屏蔽室做实验,就会不小心殃及同事。这不,这周还有几个同事的手机网络名变成了这样,返回真实网络都变不回去了。(嗯嗯,这事3GPP也在讨论怎么fix)

那一年多前呢,我们在研究LTE伪基站,发现了一些问题。就在HITB阿姆斯特丹会议,讲了一个LTE的安全问题。就是LTE网络有一种重定向消息,允许不带完整性保护,于是可以被攻击者利用,把手机驱赶到GSM伪基站再进一步利用。

我们在会议之前就跟一些运营商、设备商、终端厂商沟通过这个情况。

[通信圈]:嗯,是有点问题。不过不严重嘛。如果黑客要把手机降级到2G,有更简单的方法,上干扰器呗。如果运营商想修,那就修一下好了。不修也没事,没有什么重大安全事件出现啊。几个小黑客的零散攻击,不足为惧。

[安全圈]:嘿,你们这个实验好酷啊。我们也想重复一遍,你们把源码公开一下吧?用干扰器?这太没技术含量了吧!这种方法可以只盯着一个人降级,到2G就好办了,所有流量就都可以分析了[奸笑] 而且你知道干扰器多麻烦吗?都是全频段干扰!搞不好自己的伪基站都接不上。

大概6月的时候,A公司可能是看到了我们的议题,在3GPP RAN2提了一个修复建议。这事其实挺简单的,就是RRC重定向消息都必须有完整性保护。我们看到这个消息觉得挺高兴,觉得能影响到标准修复挺好的。就保持关注,看3GPP什么时候能把这个修复了。

插播一下3GPP的组织结构。3GPP中分了很多组,分别负责不同的协议层。RAN是指Radio Access Network。RAN2是负责RAN的第2层协议,比如MAC层,RLC,PDCP,RRC等。因为重定向消息是RRC层携带的,所以这事归RAN2管。除了RAN之外,3GPP还有SA(Security Architecture)的小组,其中SA3组是专门做安全的。

后来B公司研究了一下,发现这种不加完保的重定向信息除了在初始接入的时候,还会在CSFB的时候使用。CSFB的时候,为了减少接入时延,就没有建立安全上下文,所以没有保护RRC信令。所以B公司提出说,A公司的建议我们得研究一下,我们不想增加CSFB时延。从B公司的这个意见开始,重定向问题的修复,就走上了弯路。

CSFB真是个很有问题的部分,记得我们今年的幽灵接线员漏洞吗?也是因为CSFB没有鉴权造成的。CSFB为了功能性,牺牲了安全性,所以问题百出。幽灵接线员这个漏洞还拿下了GSMA漏洞平台的第一个漏洞编号,CVD#0001.

2016年8月

8月,就是BlackHat和DEFCON这两大黑客大会的时间,去年重定向漏洞议题也被DEFCON接受了。黑客会议跟学术会议不同,一稿多投是很平常的,被录用次数越多,说明这个成果越受关注。重定向这个议题,在2016年,一共中了4个会……

那这次美国的黑客会议呢,就把这个故事带上了一个小高潮。导火索是史中老师的一篇文章。史中是谁?安全圈有名的媒体人。在我眼里,相当于安全圈的咪蒙(史老师对这个比喻没意见吧?)。他的笔那个毒啊,一出手,阅读量可不得了。于是通信圈就炸锅了……

[通信圈]:
文章一:胡说八道!4G网络怎么可能被窃听?!4G网络双向鉴权,还有加密,根本不可能窃听!这也太标题党,真是语不惊人死不休。费那么大劲就为赶到2G下面发个垃圾短信,太无聊了吧!
文章二:小编我搞到了演讲ppt,来来我们仔细解读一下。

[安全圈]:
看清楚技术细节再吵架好不好……
感谢感谢,还是有明白人……

[插播]:写这段时,我联想到了前不久小灰灰破解OFO单车那事,也是2G伪基站劫持。也被人说,你们花这么高成本来破解,真是闲得蛋疼。确实,很多Hacker就是很轴的……

2017年3月

这时候我们360也加入3GPP,成为成员之一了,可以去参会看看他们是怎么讨论的。

[通信圈]:咦?怎么你们360,一安全公司怎么也加入3GPP了?你们来做什么?不是为了RAN1投票的事吧……
[360]:[懵]RAN1在投什么票?我们就是想看看5G会不会把IMSI Catcher干掉啊?
[通信圈]:咦? 360也做手机的呢。所以你们是想做专利啦?可是你们手机体量还很小呢?建专利池不容易哦。
[360]:我们就是奔着情怀来的,不行吗……

自从B公司在RAN2提出CSFB减小时延很重要之后,SA3组的专家们就开始设计各种既能减小时延又能保证不被篡改的新方案。C公司和D公司都提出了新方案。这些新方案在RAN2,SA3,CT1等各个组之间转来转去相互讨论。各组之间是没有什么机会当面讨论的,都得使用联络函(LS, Liaison Statement),联络函的回复通常只有开会的时间才会回复。所以经常是SA3提出方案给RAN2;过了一两个月,RAN2回了个消息说啊这个问题是不是要请示一下CT1;再过一两个月,CT1回复说那如果我们blabla这样做SA3你觉得有什么问题吗……

我们感觉皮球这么踢下去,不知道什么时候才会有结果。并且我们感到其实SA3的专家们并没有看过我们的议题,不了解问题的起源。于是某次会上我们发言说,大家不要忘了除了CSFB,还有初始attach这个场景要解决哦。此时,各组的专家们才从那个分支上被拉了回来。

其实Security很多时候得从系统整体的角度来看,攻击者会从很多种入口发起攻击。而3GPP是协议分层的架构。SA3的安全专家最熟悉的是鉴权机制、加密算法、NAS层信令,而其他协议层的内容并不是非常了解。3GPP不同的分组之间,甚至在同一个公司内,RAN2和SA3的同事都交流甚少。

2017年11月

2017年是5G标准设计非常紧张的一年。2017年底,5G的第1版标准就要封版,所以3GPP的各个组都忙于讨论5G。又大半年过去了,重定向漏洞的修复并没有大的进展。SA3经过讨论,把两个认为OK的方案交给RAN2,方案一是后来C公司和D公司提的能减小CSFB时延的,方案二就是最早A公司提的激活AS安全,请RAN2自己选择用哪一个,或者两个都支持。

本来我没指望在11月底这次会,RAN2会对这个问题拍板。没想到RAN2在5G任务如此繁重的情况下,竟然把这个问题给处理了。最后的选择是方案二,也就是简单明快直截了当的那个方案。[拍手称赞] 另一方面,早知如此,何必要让SA3忙活这么久给你们想新方案呢。AS激活时延到底多大,RAN2不清楚么?

SA3作为安全组,在3GPP里其实挺为难的,经常要面对功能性和安全性的斗争。在SA3组内,也有支持安全性的激进派和维护功能性的保守派,两股力量的较量。3GPP标准,正是在这样的模式下达到一种动态平衡。

[SA3]:咱们给每个基站的标志都加个签名怎么样?这样就再也不会被伪基站困扰了。
[RAN]:神马?!要搞证书体系这么复杂的事情。不行不行,太重了!不能因为几个小黑客,把整个系统都加把大锁。
[SA3]:每条链路都要有完整性保护,要有加密!
[RAN]:不行啊,我这边IoT芯片能力太弱,没法支持安全算法!
……
有没有感觉很多产品设计的时候,都有类似的斗争呢。世界就是在这样的激进和保守的拉扯之中,螺旋式的前进。

Anyway,我们在2017年终于看到这个小bug的修复。[开心]