的完整交互)
手把手调试用Wireshark抓包分析5G NAS安全模式命令的完整交互当你在实验室或现网环境中捕获到5G注册流程的pcap文件时面对密密麻麻的十六进制NAS消息是否感到无从下手本文将以Security Mode Command消息为切入点带你在Wireshark中逐字节解析5G安全协商的关键细节。我们将通过真实抓包案例演示如何从原始数据中提取加密算法、完整性保护参数等核心安全要素。1. 实验环境准备与数据捕获1.1 搭建5G测试环境要分析Security Mode Command交互首先需要获取真实的5G NAS信令数据。推荐以下三种捕获方案商用测试网络通过专业测试手机连接运营商网络在注册流程中抓包实验室模拟环境使用开源5G核心网项目如UERANSIM构建本地测试网现网镜像端口在运营商网络接口部署分光器捕获信令面流量注意捕获数据前需确保设备时间同步建议使用NTP服务器校准时间戳1.2 Wireshark基础配置在开始分析前需要优化Wireshark的5G协议解析能力# 更新最新版Wireshark≥3.6 sudo add-apt-repository ppa:wireshark-dev/stable sudo apt update sudo apt install wireshark # 加载5G NAS协议解析器 git clone https://github.com/5G-Analyzer/5G-NAS-Dissector.git cp -r 5G-NAS-Dissector /usr/share/wireshark/plugins/关键配置参数配置项推荐值作用GTP-U解码启用正确解析N3接口用户面5G NAS偏好设置开启全部IE解析显示完整信息元素时间显示格式相对时间便于分析消息时序2. Security Mode Command消息定位2.1 过滤NAS信令流在Wireshark中使用显示过滤器快速定位目标消息# 基本过滤语法 nas-5gs !(nas_5gs.message_type 0x7e) # 排除心跳消息 # 精确定位Security Mode Command nas_5gs.security_header_type 0x01 nas_5gs.message_type 0x5d典型消息序列示例Registration Request (UE → AMF)Authentication Request (AMF → UE)Authentication Response (UE → AMF)Security Mode Command (AMF → UE)Security Mode Complete (UE → AMF)2.2 关键字段快速定位在Packet Details面板展开5GS NAS消息树重点关注以下字段Security Header Type值为3表示integrity protected with new security contextMessage Type0x5D对应Security Mode CommandProtocol Discriminator应显示为5GS mobility management messages3. 深度解析Security Mode Command3.1 安全算法协商机制在消息的Selected NAS security algorithms字段中AMF会明确指定选择的加密和完整性算法// 典型算法编码示例 Selected NAS security algorithms: Ciphering: 0x02 (5G-EA2-128) Integrity: 0x01 (5G-IA1-128)常见算法对应表算法ID加密算法完整性算法0x005G-EA05G-IA00x01-5G-IA10x025G-EA2-0x035G-EA35G-IA33.2 UE安全能力验证AMF会通过Replayed UE security capabilities字段回显UE上报的安全能力调试时需要对比前后消息是否一致# 提取Registration Request中的原始能力 tshark -r 5g_reg.pcap -Y nas_5gs.message_type 0x41 -T fields -e nas_5gs.ue_security_capability常见不一致场景UE支持5G-EA3但AMF只配置了5G-EA2完整性算法不匹配导致Security Mode Reject3.3 关键信息元素解析展开Additional 5G security information字段重点关注两个标志位RINMR (Retransmission Initial NAS Message Request)置1表示要求UE在Security Mode Complete中重发初始注册消息常见于AMF无法解密原始Registration Request时HDP (Horizontal Derivation Parameter)置1表示需要重新推导Kamf密钥在跨AMF切换场景下常见4. 完整性保护验证实战4.1 MAC值计算原理Security Mode Command的完整性校验需要以下输入参数新鲜度参数COUNT值方向标识0表示下行密钥Kamf推导的KNASint消息负载去除安全头部的原始数据# 伪代码示例 def calculate_mac(): count_bytes struct.pack(I, nas_count) bearer 0x00 direction 0x00 sb count_bytes bearer direction plain_pdu mac cmac(knas_int, sb)[:4] # 取前4字节作为MAC4.2 Wireshark验证技巧在Packet Bytes面板选择完整消息后通过右键菜单选择Protocol Preferences → Validate MAC可自动校验完整性。常见错误包括COUNT值不同步AMF与UE的计数器不一致密钥版本错误ngKSI指向的安全上下文不匹配算法实现差异厂商特定实现与标准有偏差4.3 典型故障排查当MAC校验失败时建议按以下步骤排查确认AMF和UE的ngKSI值指向相同安全上下文检查COUNT值是否被意外重置验证Kamf密钥推导过程是否符合TS 33.501规范对比UE和AMF的算法支持列表是否兼容5. 交互流程完整分析案例5.1 正常流程解码以某商用网络抓包为例完整Security Mode Command交互包含AMF发送Security Mode Command选择算法5G-EA2 5G-IA1设置RINMR0, HDP0携带ABBA参数0x0000UE响应Security Mode Complete包含IMEISV49015420323751NAS COUNT重置为0成功启用新安全上下文5.2 异常场景分析场景一算法不匹配拒绝AMF选择5G-EA3 5G-IA3 UE响应Security Mode Reject 原因值#24 Security mode rejected, unspecified场景二完整性校验失败UE收到Security Mode Command后 1. 计算预期MACA1B2C3D4 2. 实际消息MACE5F6G7H8 3. 丢弃消息并触发注册流程回退6. 高级调试技巧6.1 自定义Lua解析器对于厂商私有字段可扩展Wireshark的解析能力-- 示例解析自定义ABBA扩展字段 local abba_ext_proto Proto(5g-abba-ext, 5G ABBA Extension) local f_ext ProtoField.uint16(abba.ext, Vendor Extension) abba_ext_proto.fields {f_ext} function abba_ext_proto.dissector(buf, pinfo, tree) local ext_tree tree:add(abba_ext_proto, buf(2,2)) ext_tree:add(f_ext, buf(2,2)) end register_postdissector(abba_ext_proto)6.2 关联多接口信令在NSA组网下需要关联LTE和NR信令通过gtp.teid字段匹配N2接口消息使用rrc.TransactionIdentifier关联控制面流程基于nas_5gs.ue_ngap_id跨接口跟踪UE上下文6.3 性能优化建议处理大规模抓包文件时# 使用tshark预处理 tshark -r full_capture.pcap -Y nas_5gs -w nas_only.pcap # 启用多线程处理 editcap -c 100000 large_file.pcap split.pcap7. 安全分析实践通过对比3GPP标准与现网实现我们发现几个值得关注的差异点算法优先级部分厂商AMF优先选择EA2而非EA3ABBA处理某些实现未严格校验ABBA参数长度时间同步COUNT值同步机制存在厂商特定实现在最近一次跨厂商互通测试中我们捕获到当AMF设置HDP1时某型号UE未能正确推导Kamf导致后续流程失败。通过Wireshark的专家信息功能Analyze → Expert Info可以快速定位此类协议一致性问