from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/

0x00 IMSI & IMSI-Catcher

我们以前担心的手机泄漏个人位置隐私的问题,也就是在2G/3G/4G一直存在的IMSI Catcher问题,终于有望在5G标准里得到彻底解决啦! 这个问题在每次制定新一代网络标准的时候,都要争论一回。这是网络功能性、成本与安全性之间的斗争。在5G的第一版标准,Release15,关于安全的标准[1]中,IMSI加密是最大的亮点。

在2/3/4G网络中,攻击者能通过十分廉价的设备获取你的位置。这是由于手机每次需要联网的时候都要大声喊着,“我是谁谁谁”,攻击者就可以通过手机报告的信息确定手机的大概位置了。专业一点的说,手机所广播的那条“我是谁谁谁”就是手机的IMSI码,全球唯一,就如同你的身份证号。设想,如果满大街都在喊着每个人的身份证号,那么追踪某一个人就变得容易了。

当然实际上,IMSI这么关键的信息不会在你发送的每条信息中都带着。手机还会有一个临时身份证(GUTI/TMSI),平时传递数据都是使用这个临时身份证,手机只有在特殊的场景下会发送自己的IMSI。手机会在哪些场合会发送自己的IMSI呢?

0x01 什么情况下手机会发送IMSI?

情景一:手机接入正常的网络时
手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。基站收到该消息后便转发给核心网的MME,若MME中可以查询到对应的GUTI/TMSI对应的真实身份,则允许手机接入。若MME查询不到,则需要重新对手机发起真实身份核验的请求“Identity Request”,即要求手机提供真实身份IMSI。
通常触发手机真实身份验证的合理情况有:手机首次入网或手机移动到其它MME覆盖范围后,MME中无法从网络中查询到手机的GUTI/TMSI,故而需要手机上报自己的真实身份。
在这种情景下,攻击者只需采取被动监听就可以捕捉到手机的IMSI。

情景二:手机接入到伪基站网络时
伪基站通过高信号强度压制真实基站把手机吸进来(手机会自动选择信号强度最强的基站),之后强行给连接过来的手机发送身份验证请求消息——“Identity Request”,手机就会乖乖的把自己真实身份报上来。
在该情境下,攻击者采取的是主动攻击,需要打开伪基站,不停的发送“Identity Request”就可以获取周围手机的真实身份。
这种获取IMSI的工具,就称为IMSI Catcher,其中比较出名的一款工具叫Stingray(黄貂鱼),目前被一些执法部门使用。Stingray是一款同时具有被动监听(监听+数据分析)和主动攻击(伪造基站)的IMSI Catcher。通过获取IMSI,TMSI,IMEI可以更好地获取移动终端的数据信息。并且设备非常便携,可以装在飞机、汽车、无人机等交通工具适用以上两种情景,并且该设备还可以测绘基站的分布情况,自行进行数据分析,追踪目标手机位置,监听通信内容,进行DDoS攻击等。

5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。..._第1张图片
图:Stingray(图片来自网络)

讲到这,大家一定有疑问,这么重要的身份信息为何不能加密传输呢?因为在建立安全连接的过程中,一开始网络不知道手机是谁,要先知道它是谁,才开始交换密钥,换句话说,核心网在加密信息前要确定对方是自己人。

0x02 5G是如何解决IMSI-Catcher问题的呢?

5G决定引入公钥私钥的机制,公钥用来公开并加密,私钥用来保留并解密。将公钥存放在手机端,私钥存放在运营商手里,如此一来,只有运营商可以解密手机的真正的身份信息,攻击者只能拿到加密后的信息,没有私钥而无法解出IMSI。

此时,整个手机的鉴权流程是什么样的呢?
手机的真实身份在5G里称为SUPI(SUbscription Permanent Identifier)(类似IMSI),通过公钥加密后的密文称为SUCI(SUbscription Concealed Identifier),SUCI传送给基站后,基站直接上传至核心网[1]。
大概的流程如下图所示:


    1. 手机向基站gNB发起接入网络的请求,发送SUCI(即加密的SUPI)或是GUTI;(注:在4G和5G共存的时代,将存在两种无线接入与核心网,这里我们单讨论5G里通过NR-gNB作为接入核心网NGCN(NextGen Core)的方式)
    2. 基站gNB收到信息后,转发至核心网的SEAF(SEcurity Anchor Function);
    3. SEAF收到信令后解析后看是GUTI还是SUCI,若是GUTI就匹配到对应的SUPI,若为SUCI则不解密,继续向AUSF(Authentication Server Function)发起鉴权申请Nausf_UEAuthentication_Authenticate Request,并携带对应的网络服务信息SN-Name,方便AUSF调用对应鉴权算法AV(Authentication Vector,包含RAND, AUTN, HXRES*和 K_seaf);
    4. AUSF通过分析SEAF携带的网络信息SN-Name,确定手机是否在网络服务范围内,并保存手机需要的网络服务信息,接下来继续将SUCI或SUPI和服务网络信息SN-Name转发给UDM(Unified Data Management);
    5. 在UDM中调用SIDF(Subscription identifier de-concealing function)将SUCI解密得到SUPI,然后通过SUPI来配置手机对应所需的鉴权算法。
    6. 接下来便会根据手机的鉴权方式一步步提取对应的鉴权秘钥与鉴权结果,直至最后将结果反馈给手机,手机端USIM会校验网络侧所发送鉴权结果的真伪。