Redirection LTE / 5G-NSA → 2G
Forcer un téléphone d'un réseau 4G / 5G-NSA à redescendre en 2G, où il n'authentifie plus le réseau — rouvrant la porte à l'IMSI catcher et au cassage A5/1. Travail cité en recherche académique (Gdańsk, 2021).
Cadre légal. Émettre sur les bandes cellulaires et manipuler le trafic d’unabonné sont strictement encadrés. Ce projet est pédagogique et réservé à larecherche / au pentest autorisé / à la démonstration légale (cage de Faraday,SIM de test). Toute interception non autorisée est illégale.
Le principe
En 2G, un téléphone s'accroche à la cellule la plus forte sans authentifier le réseau — d'où l'IMSI catcher. En 4G/5G, ce n'est plus possible : l'eNodeB doit s'authentifier mutuellement avec l'UE. La faille est donc en amont de l'authentification : les messages RRC / NAS initiaux ne sont pas protégés en intégrité. On s'en sert pour downgrader l'UE vers la 2G.
Deux leviers, complémentaires :
- TAU Reject — avant de s'authentifier, l'UE envoie un Tracking Area Update Request. Un faux eNodeB répond un TAU Reject (« pas de 4G ici ») et pousse l'UE à chercher de la 2G.
-
RRCConnectionRelease +
redirectedCarrierInfo— on relâche la connexion RRC en désignant explicitement une cellule GERAN (ARFCN 2G) vers laquelle rediriger l'UE.
Implémentation — patch OpenLTE
Le PoC d'origine est un patch sur OpenLTE (openlte_v00-20-05) qui apprend au faux eNodeB à gérer le TAU et à injecter le redirectedCarrierInfo :
-
liblte_rrc.cc— ajoute leredirectedCarrierInfo(GERAN, ARFCN 514, DCS1800) dans le RRC Connection Release ; -
LTE_fdd_enb_mme.cc— ajoutesend_tracking_area_update_reject()avecemm_cause = UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK; -
radio — support BladeRF (
BLADERF_TX_X1) et SoapySDR (type == "soapy").
Le cœur de la redirection — injecter la cible GERAN dans le message RRC :
// Release cause
liblte_value_2_bits(con_release->release_cause, &msg_ptr, 2);
+// redirectedCarrierInfo → GERAN (choice)
+liblte_value_2_bits(1, &msg_ptr, 4);
+// ARFCN de la cellule 2G cible
+liblte_value_2_bits(514, &msg_ptr, 10);
+// bande DCS1800
+liblte_value_2_bits(0, &msg_ptr, 1);
…et ça marche.
🎥 PoC — redirection
Versions modernes (conteneurisées)
Le PoC OpenLTE historique (LTE-Redirection_Attack) a été refait sur srsRAN_4G patché + Osmocom, prêt à l'emploi :
| Dépôt | Cible |
|---|---|
| NSA_LTE_redirect_to_EDGE | environnement SDR complet LTE(4G) → EDGE(2G), conteneurisé |
| redirect0r | redirection LTE/5G-NSA → EDGE/GSM en docker compose
|
| redir5Gted2Gsm | 5G-NSA → GSM (base srsRAN) |
| srslte_to_gsm | downgrade d'un LTE srsLTE vers GSM |
| openLTE2GSM | workflow d'installation LTE → GSM |
Cité en recherche académique
M. Gronau et al., « Evaluation of 4G-LTE security and realization of a test stand for redirection attack », Gdańsk University of Technology (2021) — le travail utilise l'image Docker publiée et cite le GitHub en référence [29]. Voir aussi la vue d'ensemble des attaques radio et le cours GSM étape par étape.
Impersonnate — relayer l'authentification 2G
Se faire passer pour un abonné sans jamais extraire son Ki : un relais MITM entre le vrai réseau et le vrai téléphone, qui transfère le défi d'authentification et le Kc. Projet : HeArTbReAkEr.
🎥 PoC — impersonation (Kc connu)
Cadre légal. Relayer l’authentification d’un abonné revient à usurper sonidentité réseau : à réserver à la recherche / au pentest autorisé / à ladémonstration légale (SIM et abonné de test, cage de Faraday).
Le principe
En 2G, la BTS n'authentifie pas la MS — mais la MS, elle, s'authentifie auprès du réseau : SRes = f(Ki, RAND) et Kc = f(Ki, RAND, key_seq). Le Ki vit dans la SIM et ne s'extrait pas (puce sécurisée). On ne le casse donc pas — on relaie le défi d'authentification à travers un homme du milieu.
L'attaquant est authentifié comme la victime auprès du vrai réseau, sans connaître le Ki : le calcul reste fait par la vraie SIM, on ne fait que transporter défi et réponse.
Le montage — Evil-BTS + Evil-MS
Deux conteneurs reliés par socket : l'Evil-BTS (OpenBSC patché) et l'Evil-MS (osmocom-bb sur Motorola C1xx), aux adresses fixes 172.17.0.3 / 172.17.0.2.
# sur l'hôte : conflit connu avec brltty
sudo apt remove brltty
# 1) MS (172.17.0.2) — à lancer EN PREMIER
sudo docker run -it --privileged --cap-add ALL -v /dev/bus/usb:/dev/bus/usb bastienbaranoff/ms-final:hell_yeah
# 2) BTS (172.17.0.3)
sudo docker run -it --privileged --cap-add ALL -v /dev/bus/usb:/dev/bus/usb bastienbaranoff/bts-final:hell_yeah
Dans le conteneur BTS : service pcscd start puis ./evil-bts.sh. Dans le conteneur MS : bash trx.sh, puis ./evil-ms.sh — en réglant l'IMSI dans OpenBSC (telnet) et dans ~/.osmocom/bb/mobile.cfg.
Matériel : un Motorola C1xx (baseband Calypso, pour l’Evil-MS viaosmocom-bb) et une SIM de test. Voir aussi l’émulation du basebandCalypso pour faire tourner ce firmware sansmatériel.
→ Démo : PoC (FR) · PoC (EN) · dépôt HeArTbReAkEr.




