背景:2010年12月,Security Research Labs实验室的KarstenNohl和OsmocomBB项目程序员SylvainMunaut在Chaos Communication Congress黑客大会上展示了通过普通手机作为网络“嗅探器”,使用普通电脑和开源软件OsmocomBB,成功拦截附近的GSM用户的通话和短信内容。
其实不管是gsm,3g、lte,都可以空口拦截。只不过gsm协议栈开源了,屌丝也可以玩了。
前期准备:
1、GSM篇
在GSM网络中,SIM卡和网络侧配合完成用户鉴权,以此防止未经授权的接入,保护运营商和合法用户双方的利益。GSM鉴权过程主要涉及AUC、HLR、MSC/VLR、MS和SIM卡。
每个用户在GSM网中注册登记时,被分配给一个客户电话号码(MSISDN,就是通常的手机号)和客户身份识别码(IMSI)。IMSI通过SIM写卡机写入客户的SIM卡中,同时在写卡机中又产生了一个对应此IMSI的唯一客户鉴权密钥Ki,它被分别存储在客户的SIM卡和网络侧AUC中。在AUC中还有个伪随机码发生器,用于产生一个伪随机数RAND。在GSM规范中还定义了A3、A8和A5算法,分别用于鉴权和加密过程。
GSM网络侧和SIM卡上存储相同的用户密钥Ki,用户开机准备接入网络,移动终端发送IMSI(IMSI是GSM系统分配给移动用户的唯一的识别号)给MSC/VLR,VLR将首先查看在数据库中该MS是否有鉴权三参组,如果有,将直接向MSC下发鉴权命令,否则,向相应的HLR/AUC请求鉴权参数,从HLR/AUC得到三参组,其中包括RAND,然后再向MSC下发鉴权命令。MSC收到VLR发送的鉴权命令后,通过BSS向MS下发鉴权请求,MS收到鉴权请求后,利用SIM卡通过A3/A8算法计算出SRES和加密密钥Kc,通过鉴权响应消息送达MSC,MSC将鉴权结果回送VLR,由VLR核对MS上报的鉴权结果和从HLR取得的鉴权参数中的结果,如果二者不一致,拒绝此次接入请求。
鉴权流程如图所示,使用A3算出应该返回的鉴权数据,使用A8算出加密密钥,用于空中接口的信息加密。
也可以看这个图:
GSM已经采取了一些安全措施,但依然存在一些问题,主要体现在以下方面。
(1)单向鉴权
只能网络对卡鉴权,卡无法鉴权网络。不能对抗主动攻击(如伪基站攻击),非法设备(如基站)可以伪装成合法的网络设备,欺骗用户,窃取用户信息。
(2)加密
GSM系统中的加密不是端到端的,只是在无线信道部分即MS和BTS之间进行加密,这给攻击者提供了机会。
在GSM系统中,加密算法是固定不变的,没有更多的密钥算法可供选择,缺乏算法协商和密钥协商的过程。
在移动通信中,终端和网络间的大多数信令信息是非常敏感的,需要得到完整性保护。而在GSM网络中,没有考虑数据完整性保护的问题,如果数据在传输的过程中被篡改也难以发现。
2、3G篇
与GSM鉴权相比,3G鉴权不但有网络鉴权用户的功能,还增加了用户鉴权网络的功能和完整性保护功能。另外,3G鉴权还增加了密钥的长度,使用更加强壮的加密算法和完整性算法。
AKA(Authentication and Key Agreement,认证和密钥协商协议)是3G系统中用来实现用户终端与网络端的鉴权机制,流程如图所示。
这个图就不详细描述了,主要是就是实现了双向鉴权,解决伪基站。
3、结论
gsm由于单项鉴权,所以有伪基站的问题,3G及以后网络是双向鉴权,可以解决。
4、空中拦截的问题。。。
不管是2G、3G、LTE网络设计时都设计了空中加密,但都没有开启。由于各方面原因吧。
如果不开启,理论上无论哪种网络都可以被拦截,不是GSM特定问题。
解决思路:
1、运营商开启空口加密
2、业务提供商https
3、短信或者语音实现端对端加密或者业务短信实现客户端到平台加密。