首页
社区
课程
招聘
[原创]LTE RRCConnectionRelease Redirect问题分析
发表于: 2020-9-22 22:48 6198

[原创]LTE RRCConnectionRelease Redirect问题分析

2020-9-22 22:48
6198

好长时间没在看雪上发文章了,写了这个发现还不好确定放在哪个板块~~~。 这个问题是在16年被国内研究员发现提出,并实现了完整的攻击。因为这是一个很经典的问题,在学习LTE/5G安全过程中复现一下也是很有必要的。我大概是在今年初分析复现这个问题,下面分享一下整个过程,和大家交流一下。
RRCConnectionRelease在5GNR中是RRCRelease.
RRCConnectionRelease正常的使用是:

由基站发给UE,作用包括释放一个rrc connection...

当在nas层reject当前连接后,ue接收后,会触发基站发送rrcconnectionrelease给UE,此时UE会对rrcconnectionrelease包进行解析,因为本身也是连接出现问题才会触发rrcconnectionrelease,即有可能是就是基站层丢失了一开始注册入网的key等信息。因此协议上最开始的描述,UE接收后并不会对rrcconnectionrelease的完整性进行校验,而直接接收解析。

在rrcconnectionrelease中可以携带redirectedCarrierInfo结构,可以直接查看asn文件中对该结构的定义:

可以发现redirectedCarrierInfo其实是给UE提供了一个/多个可选的频率/频道/arfcn。当UE收到后会根据该信息选择一个合适的cell。(The procedure can also be used to release and redirect a UE to another frequency)

不影响现网,因此用oai和openair-cn搭建一个LTE网。用正常手机(UE)连接。(USRP B210+笔记本)

选用的是通过核心网/MME发送的attach reject来触发基站的RRCConnectionRelease.

初始状态的测试,attach reject选用cause 17,network failure,比较“弱”的一个cause。

oai代码不动,默认RRCConnectionRelease中是不携带redirectedCarrierInfo。修改openair-cn,当接收到第一次attach request时候,发送attach reject,cause 17;而第二次将正常处理attach request(即accept)。

搭建一个2G环境,保持运行状态。(一个Linux虚拟机+limesdr mini)

现象:UE在第一次attach reject之后,继续向LTE网络发起attach request,然后正常连接LTE网络。

oai在asn1_msg.c中,do_RRCConnectionRelease函数中,是用来构造RRCConnectionRelease包,添加redirectedCarrierInfo结构。比如我的添加:

arfcn和频率对应可以参考,保持和你搭建的伪基站一致即可:

https://wenku.baidu.com/view/55e2d6677cd184254a35355b.html

现象是在一次attach reject之后直接连接到了搭建的2G伪基站上。

很早就发现的问题,但3GPP协议文档却很晚才体现添加修复。测试用的一款19年底的手机也是受影响的。

当UE收到RCCConnectionRelease/RRCRelease时,处理流程上36331和38331都有相关修改。比如36331描述如下:

描述中在AS Security之后必须得有完整性保护;如果在AS Security之前的话,携带redirectedCarrierInfo字段是不会被处理的。其实也还有这么一个条件if upper layers indicate that redirect to GERAN 所以和基带的实现也有很大关系。

而在38331中,到了release 15.6.0(19年6月)才额外添加一句ignore:

[1] Forcing a Targeted LTE Cellphone into an Eavesdropping Network
[2] seeker: 伪基站高级利用技术——彻底攻破短信验证码
[3] LTE RRC: TS 36331
[4] 5G RRC: TS 38331

 
typedef struct LTE_RRCConnectionRelease_r8_IEs {
    LTE_ReleaseCause_t     releaseCause;
    struct LTE_RedirectedCarrierInfo    *redirectedCarrierInfo;    /* OPTIONAL */
    struct LTE_IdleModeMobilityControlInfo    *idleModeMobilityControlInfo;    /* OPTIONAL */
    struct LTE_RRCConnectionRelease_v890_IEs    *nonCriticalExtension;    /* OPTIONAL */
 
    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
} LTE_RRCConnectionRelease_r8_IEs_t;
//////
typedef enum LTE_RedirectedCarrierInfo_PR {
    LTE_RedirectedCarrierInfo_PR_NOTHING,    /* No components present */
    LTE_RedirectedCarrierInfo_PR_eutra,
    LTE_RedirectedCarrierInfo_PR_geran,
    LTE_RedirectedCarrierInfo_PR_utra_FDD,
    LTE_RedirectedCarrierInfo_PR_utra_TDD,
    LTE_RedirectedCarrierInfo_PR_cdma2000_HRPD,
    LTE_RedirectedCarrierInfo_PR_cdma2000_1xRTT,
    /* Extensions may appear below */
    LTE_RedirectedCarrierInfo_PR_utra_TDD_r10,
    LTE_RedirectedCarrierInfo_PR_nr_r15
} LTE_RedirectedCarrierInfo_PR;
//////
typedef struct LTE_RedirectedCarrierInfo {
    LTE_RedirectedCarrierInfo_PR present;
    union LTE_RedirectedCarrierInfo_u {
        LTE_ARFCN_ValueEUTRA_t     eutra;
        LTE_CarrierFreqsGERAN_t     geran;
        LTE_ARFCN_ValueUTRA_t     utra_FDD;
        LTE_ARFCN_ValueUTRA_t     utra_TDD;
        LTE_CarrierFreqCDMA2000_t     cdma2000_HRPD;
        LTE_CarrierFreqCDMA2000_t     cdma2000_1xRTT;
        /*
         * This type is extensible,
         * possible extensions are below.
         */
        LTE_CarrierFreqListUTRA_TDD_r10_t     utra_TDD_r10;
        LTE_CarrierInfoNR_r15_t     nr_r15;
    } choice;
 
    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
} LTE_RedirectedCarrierInfo_t;
typedef struct LTE_RRCConnectionRelease_r8_IEs {
    LTE_ReleaseCause_t     releaseCause;
    struct LTE_RedirectedCarrierInfo    *redirectedCarrierInfo;    /* OPTIONAL */
    struct LTE_IdleModeMobilityControlInfo    *idleModeMobilityControlInfo;    /* OPTIONAL */
    struct LTE_RRCConnectionRelease_v890_IEs    *nonCriticalExtension;    /* OPTIONAL */
 
    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
} LTE_RRCConnectionRelease_r8_IEs_t;
//////
typedef enum LTE_RedirectedCarrierInfo_PR {
    LTE_RedirectedCarrierInfo_PR_NOTHING,    /* No components present */
    LTE_RedirectedCarrierInfo_PR_eutra,
    LTE_RedirectedCarrierInfo_PR_geran,
    LTE_RedirectedCarrierInfo_PR_utra_FDD,
    LTE_RedirectedCarrierInfo_PR_utra_TDD,
    LTE_RedirectedCarrierInfo_PR_cdma2000_HRPD,
    LTE_RedirectedCarrierInfo_PR_cdma2000_1xRTT,
    /* Extensions may appear below */
    LTE_RedirectedCarrierInfo_PR_utra_TDD_r10,
    LTE_RedirectedCarrierInfo_PR_nr_r15
} LTE_RedirectedCarrierInfo_PR;
//////
typedef struct LTE_RedirectedCarrierInfo {
    LTE_RedirectedCarrierInfo_PR present;
    union LTE_RedirectedCarrierInfo_u {
        LTE_ARFCN_ValueEUTRA_t     eutra;
        LTE_CarrierFreqsGERAN_t     geran;
        LTE_ARFCN_ValueUTRA_t     utra_FDD;
        LTE_ARFCN_ValueUTRA_t     utra_TDD;
        LTE_CarrierFreqCDMA2000_t     cdma2000_HRPD;
        LTE_CarrierFreqCDMA2000_t     cdma2000_1xRTT;
        /*
         * This type is extensible,

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 1044
活跃值: (1273)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
文章赞,竟然没人回复,看来国内研究通信的人还真比较少  
2020-11-21 14:28
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持
2020-11-23 08:01
0
游客
登录 | 注册 方可回帖
返回
//