近日,以色列网络安全公司Check Point Research在对摩托罗拉Moto G20手机内的紫光展锐T700芯片上的LTE协议栈的逆向工程中,发现一个被命名为CVE-2022-20210的漏洞,并公告了出来。
智能手机的调制解调器负责电话、短信和移动互联网等通讯功能,也是黑客攻击的主要目标。攻击调制解调器,就有可能破坏手机的通话、联网等能力,或通过 SMS 、无线电数据包远程对手机通讯进行监听。这个漏洞影响的正是调制解调器部分,这意味着,攻击者将能够通过该漏洞,向用户发送损坏的网络数据包,从而禁用或中断设备的网络连接。该机构认为,该漏洞可能影响全球十分之一的安卓手机,如果该漏洞被不法人士利用,可能导致某区域通讯信号大范围瘫痪。Check Point Research是如何发现这个漏洞的呢?要从3GPP 电信标准组织引入演进分组系统 (EPS) 的概念说起,它是 LTE 技术的高级架构。这种架构由三个关键组件组成:用户设备 (UE)、演进的 UMTS 陆地无线接入网络 (E-UTRAN) 和演进的分组核心 (EPC),它们都是互连的。LTE 网络的 EPS 架构。(图自Check Point Research)E-UTRAN 组件只有一个栈,即 eNodeB 站,它控制 UE 和 EPC 之间的无线电通信。UE 一次可以连接到一个 eNodeB。EPC 组件由四个堆栈组成,其中之一是移动管理实体(MME)。MME 控制 LTE 网络中移动设备的高级操作,它发送与安全控制相关的信令消息、跟踪区域管理、维护不同 3GPP 接入网络之间的移动性以及 EPS 承载管理。这里的UE,就以带有展锐调制解调器的智能手机为例。在Check Point Research的研究中,专注于通过 EPS 会话管理 (ESM) 和 EPS 移动性管理 (EMM) 协议发生的 MME 堆栈和 UE 堆栈之间的消息传递。在下图中,可以看到调制解调器协议栈,非接入层 (NAS) 层承载 EPS 和 EMM 信令消息。LTE 协议栈。(图自Check Point Research)NAS 协议以高级结构运行,攻击者可创建格式错误的 EMM 数据包并将其发送到目标设备。当新的 NAS 消息到达时,调制解调器对其进行解析并根据接收到的数据创建内部对象。攻击者可以使用解析代码中的错误来远程使调制解调器崩溃,这可能导致拒绝服务 (DoS) 或远程代码执行 (RCE)。关于调制解调器和 MME 之间的消息传递 ,可以在 3GPP TS 24.301 文档中找到 NAS 协议的完整技术规范。对于协议的概念,让我们看一下将设备添加到 LTE 网络的过程。它涵盖了最常见的 EMM 消息。在下图中,可以看到智能手机连接到 LTE 网络时的 NAS 流量片段。网络连接流。(图自Check Point Research)在示例中,调制解调器的 IP 为 10.90.10.1,MME 的 IP 为 10.201.150.41。通信流程遵循下图 中的方案。消息交换方案。 (图自Check Point Research)当设备连接到 LTE 网络时,MME 服务器负责设备身份验证、建立承载等。要连接到网络,智能手机调制解调器必须支持(提供处理程序)数十条 NAS 消息。Check Point Research就是从这些处理程序中发现了错误。在探讨 NAS 消息处理程序在调制解调器中如何运行之前,他们还介绍了这些处理程序在一个流行开源 LTE 项目(如 srsRAN)中的情况,因为处理源代码比反汇编更容易。用户端的 堆栈技术已经很长时间没有更新了,各家芯片厂的实现都非常相似。此外,也是因为srsRAN 项目中实现的一些 NAS 处理程序函数存在漏洞,这些漏洞理论上可以在调制解调器中复制。srsRAN是EPS组件最流行的开源实现,其中也包括这次的重点UE栈。srsue/src/stack/upper/nas.cc模块代表了NAS层,在那里可以找到处理 NAS 消息的函数。每个处理函数以数据 blob 的形式接收消息,需要先将其解析为内部结构,然后系统才能对其做出反应。解析函数在 lib/src/asn1/liblte_mme.cc 模块中实现。下图是 ATTACH_ACCEPT EMM 消息的示例。此消息包含跟踪区域标识符列表、GPRS 计时器、ESM 消息容器和十几个可选对象,例如移动身份、紧急号码、协议配置选项等。附加接受消息。(图自Check Point Research)如此一来,就有大量的杂项信息必须反序列化。liblte_mme.cc 模块为每种内容类型包含一个单独的解包(解析)函数,展锐的调制解调器代码就具有类似的功能。srsRAN 项目的 ATTACH_ACCEPT 消息处理程序有几个漏洞,以其中一个为例:liblte_mme_unpack_emergency_number_list_ie 函数从消息数据中提取紧急号码。紧急列表的最大长度为 12。但是,省略了 idx 值小于 12 的检查。MME 可以将 sent_length 值设置得足够大,以导致超过 12 个循环的 while 循环,从而用任意值覆盖 emerg_num_list->emerg_num 数组。此问题会导致堆栈溢出。liblte_mme_unpack_protocol_config_options_ie 函数中存在类似的漏洞,该函数解析用于传递有关网络的附加信息的协议配置选项。支持的选项的最大数量是83,但是没有检查MME发送的选项数量有没有超过这个最大值。溢出选项数组会导致堆栈溢出。在知道了 NAS 消息解析函数是什么,也有代码供参考后,需要做的就是找到展锐调制解调器固件中的NAS数据解析功能。在Check Point Research的研究中,使用的测试设备是带有2022 年 1 月更新 (RTAS31.68.29) Android系统的摩托罗拉 Moto G20 (XT2128-2) 。该设备基于紫光展锐T700芯片。Moto G20 出厂更新设置可从网络上下载,无需 root 设备。在更新文件中,调制解调器固件由 SC9600_sharkl5pro_pubcp_modem.dat 镜像表示。该镜像具有专有结构,但很容易重建,区块头的结构如下:偏移值(offset value)是镜像文件中块开始的字节偏移量,长度是块大小。在下图中可以看到Check Point Research测试设备的调制解调器镜像包含两个数据块。第一个块的类型是 0x402,大概意思是“解析库”;第二个块的类型为 0x301,它是调制解调器二进制文件。Modem image header (图自Check Point Research)从镜像中剪切出两个数据块。其中解析库块是一个 7-zip 存档,包含用于测试(解析和跟踪)来自外部机器的网络消息传递的库。例如,lteps_air_msg_dll.dll 库(为 x86 编译)实现了打包和解包 NAS 消息的功能。调制解调器二进制块是具有专有格式的文件,标头大小为 0x600 字节。在标头之后,调制解调器代码(ARM 指令)开始。Check Point Research用 ELF32 标头包装了这段代码,并将 0x8B000600 指定为代码段的基地址,此外还添加了一个从 0x8D0C0000 开始的空数据段。结果显示,生成的二进制文件可以很容易地反编译。在调制解调器固件中实现的日志消息包含当前源模块的名称。这使Check Point Research能够快速找到 NAS 消息处理程序。NAS 相关模块名称以“lnas_air_msg”开头。例如,PS/stack/nas/emm/msg_codec/msg_emm/lnas_air_msg_emm_att_acc.c统一的函数格式可以轻松地实现对 NAS 解析函数进行模糊测试的工具。在Check Point Research的研究中,使用 AFL 和 QEMU 的经典组合在 PC 上模糊调制解调器二进制文件。该机构修补了调制解调器二进制文件以将 malloc 调用重定向到 libc 等效项, fuzzer 对 NAS 消息数据进行排列,并将其作为输入缓冲区传递给解析函数。可选的 ATTACH_ACCEPT 字段之一是移动身份。调制解调器固件实现解包功能,如 srsRAN 中的liblte_mme_unpack_mobile_id_ie 从 NAS 消息中提取移动身份。身份数据块以身份的长度开始。如果设备由国际移动用户标识 (IMSI) 表示,则长度为 2 字节的消息数据将作为 IMSI 编号复制到输出缓冲区。这里省略了确保提供的长度值大于 1 的检查。因此,如果长度字段值为零,则 0-2 = 0xFFFFFFFE 字节从 NAS 消息复制到堆内存,从而导致 DoS。在下图中可以看到导致溢出的 ATTACH_ACCEPT 消息。格式错误的 NAS 消息。(图自Check Point Research)突出显示的 0x23 值表示后面的数据是消息标识块,其中第一个 0x01 是长度,第二个 0x01 是 IMSI 类型。本次用于实验的调制解调器将 CVE-2022-20210 分配给此漏洞。此外,当 NAS 处理函数从 NAS 消息外部读取数据时,Check Point Research还发现了几个越界读取问题。5月时,Check Point Research已经向紫光展锐提交了发现的漏洞,紫光展锐官方也积极反馈,确定漏洞的存在并将其划分为9.4级的严重漏洞(CVSS 漏洞评分系统满级为10),同时承诺将针对该问题进行修补。对于上述漏洞可能造成的影响,紫光展锐对媒体表示,该问题只会发生于运营商网络被黑客攻破的情况下,在4G安全保密架构下,技术难度非常大,而且其他方案手机也会产生影响。另外用户对此的感知不强,现象是设备的通信功能出现短期故障,1-5秒内即可恢复,并不会造成用户终端的信息泄露和通信功能的不可恢复。如果黑客不重复攻破或者用户离开该区域,网络将恢复正常,手机可正常使用。“在实际的用户使用环境中,运营商4G网络本身已对此类风险进行了针对性的防范,用户不必过于担心。” 业内人士表示,“相信大家可以感受到,前些年在2/3G时代经常有伪基站电信诈骗事件发生,但进入4G时代后,这样的新闻就很少听到了。因为伪基站没有办法攻破运营商安全架构极高的4G核心网。”从本次该机构发布的公告可以看出,紫光展锐其实并非特例。仅以手机芯片厂商为例,之前5月份高通、4月份高通和联发科均已“中招”。Check Point Research还指出,谷歌方面也已经确认了该漏洞,并表示,针对它的补丁有望在下一个Android安全补丁中得到修复。6月8日午间,紫光展锐表示已完成相关排查,并登记在案(CVE-2022-20210,https://source.android.google.cn/security/bulletin/2022-06-01?hl=en#asterisk),验证完毕的相关补丁已于5月30日陆续更新至有关客户厂商。紫光展锐(UNISOC)成立于2001年,是中国集成电路设计产业的龙头企业,也是中国大陆目前公开市场唯一拥有5G芯片能力并已成功商用的主芯片平台提供者。根据调研机构Counterpoint发布的一季度智能手机应用处理器(AP)市场统计,展锐在低端手机市场(售价低于99美元)市占率从去年同期的20%飙升至47%,在100-199美元价格带也占据了8%份额。整体份额中,紫光展锐占全球移动处理器市场约11%,仅次于联发科、高通和苹果,主要覆盖亚洲和非洲销售的低价Android 手机。Check Point Research报告中提及,紫光展锐作为第四大手机芯片供应商,外界对其手机基带芯片相关安全研究资料较少,这也是该机构首次对展锐进行安全研究的原因。