Hacking:Communications GSM

De HackBBS
Aller à la navigation Aller à la recherche

Définitions

  • GSM : Global System for Mobile Communications
  • Mobile Station (MS) : équipement des utilisateurs du réseau.
  • Base Transceiver Station (BTS) : équipement en charge de communiquer directement avec les MS.

Bandes de fréquence GSM

Les communications GSM en Europe se font sur les bandes des 900MHz et 1800MHz.

La bande des 900MHz

  • les fréquences entre 880MHz et 915MHz sont utilisées pour le lien montant (MS -> BTS).
  • les fréquences entre 925MHz et 960MHz sont utilisées pour le lien descendant (BTS -> MS).

Chacune des ces deux bandes de 35MHz est divisée en 174 canaux de 200kHz appelés Absolute Radio-Frequency Channel Number (ARFCN) et numérotés de 0 à 125 et de 975 à 1023.

ARFCN Lien Montant Lien Descendant
975 880,2 MHz 925,2 MHz
976 880,4 MHz 925,4 MHz
977 880,6 MHz 925,6 MHz
---
1021 889,4 MHz 934,4 MHz
1022 889,6 MHz 934,6 MHz
1023 889,8 MHz 934,8 MHz
0 890 MHz 935 MHz
1 890,2 MHz 935,2 MHz
2 890,4 MHz 935,4 MHz
---
122 914,4 MHz 959,4 MHz
123 914,6 MHz 959,6 MHz
124 914,8 MHz 959,8 MHz

Les ARFCN entre 125 et 974 ne sont pas utilisées ou sur d'autres bandes de fréquences (GSM 450, GSM 480 et DSC 1800).

Les 174 canaux contiennent chacun 8 Time Slot (TS) d'environs 577 μs numérotés de 0 à 7.


Ces canaux sont utilisés pour transmettre la voix ou la signalisation.

Ils contiennent des données divisées en 3 catégories :

  • Traffic CHannels (TCHs)
    • Full rate Traffic CHannel (TCH/F)
    • Half rate Traffic CHannel (TCH/H)
  • Dedicated Control CHannels (DCCHs)
    • Standalone Dedicated Control CHannel (SDCCH)
    • Fast Associated Control CHannel (FACCH)
    • Slow Associated Control CHannel (SACCH)
  • Common Control CHannels (CCCHs)
    • Broadcast Control CHannel (BCCH)
    • Access Grant CHannel (AGCH)
    • Random Access CHannel (RACH)
    • Paging CHannel (PCH)
    • Synchronization CHannel (SCH)
    • Frequency Correction CHannel (FCCH)


TCHs : Canaux point à point. Équivalent du canal B du RNIS.

- Utilisés pour transporter la voix ou des données.

DCCHs : Canaux point à point. Équivalent du canal D du RNIS.

- SDCCH est utilisé pour la mise en place des appels et le transfert de SMS.

- FACCH et SACCH sont essentiellement utilisés pour la signalisation pendant les appels.

CCCHs : Canaux de diffusion et point à point. Pas d’équivalent RNIS. Utilisés presque exclusivement pour l'aspect radio.

- BCCH est utilisé par la BTS pour diffuser des infirmations sur le réseau.

- RACH est utilisé par les MS pour demander un canal à la BTS.

- AGCH est utilisé pour la BTS pour répondre aux demandes faites via le RACH.

- PCH est le canal par lequel la MS est informée qu’elle reçoit un appel.

La bande des 1800MHz

  • les fréquences entre 1 710MHz et 1 785MHz sont utilisées pour l'envoi des données depuis le terminal mobile (upload).
  • les fréquences entre 1 805MHz et 1 880MHz sont utilisées pour la réception des informations (download).

Le GSM 1800 est également appelé DCS 1800 (Digital Communication System).

Chiffrement

La confidentialité des communications est garantie par le chiffrement A5/1.

L'A5/2 a été utilisé dans certains pays mais reste trop faible et donc globalement abandonné.

L'A5/3 est censé remplacer l'A5/1 mais est utilisé pour les communications 3G.

Donc l'utilisation du chiffrement A5/1 reste important.

Gr-GSM

Gr-GSM est un projet libre.

Il utilise GNU Radio et est basé sur une partie du projet Airprobe : gsm-receiver.

Gr-GSM fournit des outils permettant de recevoir, décoder et déchiffrer des flux GSM.

Il est composé de 5 sous programmes:

  • grgsm_scanner
  • grgsm_livemon
  • grgsm_channelize
  • grgsm_capture
  • grgsm_decode

grgsm_capture

Ne nécessite que deux arguments: la fréquence ou l'ARFCN et un fichier de capture.

$ grgsm_capture -f 951e6 -c capture_951.cfile
linux; GNU C++ version 6.3.0 20170221; Boost_106200; UHD_003.009.005-0-unknown

gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.10
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy soapy redpitaya
Found Rafael Micro R820T tuner
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!

$ ls *file
capture_951.cfile
$ grgsm_capture -b capture_a80.bfile -c capture_a80.cfile
linux; GNU C++ version 6.3.0 20170221; Boost_106200; UHD_003.009.005-0-unknown

gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.10
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy soapy redpitaya
Found Rafael Micro R820T tuner
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!

$ ls *file
capture_951.cfile  capture_a80.bfile  capture_a80.cfile

-f ou --fc= fréquence désirée (exprimée en puissance de dix). On peut utiliser l'ARFCN plutôt que la fréquence. -a ou --arfcn= (dans ce cas, la fréquence du lien descendant sera sélectionnée).

Deux sortie possibles:

  • -b ou --burst-file= forme burst?
  • -c ou --cfile= fichier ne contenant que les données

Possibilité d'utiliser l'un, l'autre, ou les deux en même temps.

De plus,

  • fréquence d'échantillonnage avec -s ou --samp-rate=
  • correction de fréquence avec -p ou --ppm=
  • gain avec -g ou --gain=

Augmenter la fréquence d'échantillonnage permet d'augmenter la largeur de la bande capturée (pour utiliser avec grgsm_channelize).

  • -T ou --rec-length= permet de spécifier la durée de la capture en secondes

grgsm_channelize

Utile lorsqu'une communication vocale utilise des sauts de fréquence.

Il permet de séparer une capture à large bande en plusieurs fichiers contenant chacun une ARFCN.

$ ls *.cfile                                                               
capture_951.5_2M.cfile                                                     
$ grgsm_channelize.py -c capture_951.5_2M.cfile -f 951.5e6 -d . 80 85      
Input sample rate: 2M                                                      
Output sample rate: 1M                                                     
==> using resample rate of 0.5                                             
Extracting channels [80, 85], given that the center frequency is at 951.5M 
ARFCN 80 is at 951.5MHz -500KHz                                            
ARFCN 80 is at 951.5MHz 500KHz                                            
Done!                                                                      
$ ls *.cfile                                                               
capture_951.5_2M.cfile  out_80.cfile  out_85.cfile

Cette commande va générer deux fichiers, un pour l'ARFCN 80 et un pour l'ARFCN 85 à partir d'une capture centrée sur la fréquence 951MHz avec une fréquence d'échantillonnage de 2MHz.

À l'issue on voit que 2 fichier sont créés avec une fréquence d'échantillonnage divisée par 2.

Il est ensuite possible de les décoder grâce à grgsm_decode.

grgsm_decode

grgsm_livemon

Outil graphique permettant de surveiller en temps réel les données transmisent sur une fréquence donnée.

Peut également renvoyer les données vers un fichier Wireshark au format GSMTAP sur l'interface loopback sur le port UDP 4729.

$ sudo wireshark-gtk -k -f udp -Y gsmtap -i lo &

Cette commande exécute wireshark (en root(nécessaire?)) avec capture immediate (-k) sur l'interface loopback (-i lo). On active également un filtre de capture sur les paquets UDPs (-f udp) et un filtre d'affichage suyr les paquets de type GSMTAP (-Y gsmtap). Le & à la fin de la commande permet de garder la main sur le shell.

Pour des raisons de sécurité il n'est pas recommandé de lancer wireshark en tant que root en dehors d'un environnement test

Une fois wieshark lancé on peut exécuter grgsm_livemon et choisir graphiquement la fréquence qui nous intéresse.

Options:

  • fréquence d'échantillonnage (-s ou --samp-rate=)
  • correction de fréquence (-p ou --ppm=)
  • gain (-g ou --gain=) (La valeur par défaut du gain est de 30.)
  • fréquence initialle par laquelle le logiciel démarre (-f ou --fc=) Attention, la fréquence se spécifie en notation scientifique avec 'e' pour exprimer en puissance de 10. Ce qui fait que 951MHz = 951e6.

On vérifie donc grâce à grgsm_livemon que l'on a bien des données qui transitent sur la fréquence que l'on voudrait capturer.

grgsm_scanner

grgsm_scanner permet de scanner (entre autres) la bande GSM.

Il affiche les informations des BTS (Base Transceiver Station) environnantes.

$ grgsm_scanner
ARFCN:  975, Freq:  925.2M, CID: 16473, LAC: 22530, MCC: 208, MNC:  20, Pwr: -54
ARFCN:  985, Freq:  927.2M, CID: 16473, LAC: 22530, MCC: 208, MNC:  20, Pwr: -43
ARFCN: 1017, Freq:  933.6M, CID:  4954, LAC: 22530, MCC: 208, MNC:  20, Pwr: -55
ARFCN:    5, Freq:  936.0M, CID: 10603, LAC:  4352, MCC: 208, MNC:   1, Pwr: -43
ARFCN:   15, Freq:  938.0M, CID:     0, LAC:     0, MCC:   0, MNC:   0, Pwr: -51

Le Location Area Code (LAC) permet de grouper des cellules appartenant à une même zone afin d'optimiser la signalisation.

Le Mobile Country Code (MCC) correspond au code du pays. 208 en France.

Le Mobile Network Code (MNC) permet d'identifier le réseau d'un opérateur.

  • Orange : 1 et 2;
  • SFR : 10 et 13;
  • Free : 15;
  • Bouygues Telecom : 20 et 88.

Ici on constate que l'on capte des signaux de 5 cellules:

  • 3 cellules de Bouygues (MNC: 20);
  • 1 cellule de Orange (MNC: 1);
  • 1 cellule inconnue?

La cellule Orange utilise les fréquences à 936MHz (ARFCN: 5) et a un identifiant unique (CID).

Les cellules Bouygues utilisent les fréquences à 925,2MHz (ARFCN: 975), à 927,2MHz (ARFCN: 985) et à 933,6MHz (ARFCN: 1017).

  • Elles partagent le même LAC.
  • Deux partagent le même identifiant (CID) on en déduit que la même cellule émet sur deux bandes.
  • La troisième a bien un identifiant unique.

grgsm_scanner indique également la puissance du signal reçu.

La MS (Mobile Station) se connecte à la cellule qu'il capte le mieux (celle dont le signal est le plus important).

Pour un abonné Bouygues, la cellule 16473.


Arguments possibles :

  • fréquence d'échantillonnage avec -s ou --samp-rate= La valeur par défaut est 2000000.
  • correction de fréquence avec -p ou --ppm= La valeur par défaut est zéro. Permet de palier des défauts matériels du récepteur.
  • gain avec -g ou --gain= Valeur par défaut est 24. Augmenter cette valeur en cas de mauvaise réception.
  • vitesse de scan avec --speed= La valeur par défaut est 4 (entre 0(min) et 5(max))
  • -v permet d'obtenir des informations supplémentaires (configuration CCCH, ARFCN de la cellule et de celles environnantes).


$ grgsm_scanner -s 2e6 -p 0 -g 50 --speed=3 -v
ARFCN: 1021, Freq:  934.4M, CID: 16474, LAC: 22530, MCC: 208, MNC:  20, Pwr: -49 
  |---- Configuration: 1 CCCH, not combined                                      
  |---- Cell ARFCNs: 1016, 1021                                                  
  |---- Neighbour Cells: 979, 982, 985, 986, 1011, 1017, 1018, 1019, 1022        
ARFCN:   15, Freq:  938.0M, CID: 10628, LAC:  4352, MCC: 208, MNC:   1, Pwr: -41 
  |---- Configuration: 1 CCCH, not combined                                      
  |---- Cell ARFCNs: 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 47, 48, 49          
  |---- Neighbour Cells: 5, 6, 10, 15                                            
ARFCN:  115, Freq:  958.0M, CID: 23906, LAC: 26530, MCC: 208, MNC:  10, Pwr: -42 
  |---- Configuration: 1 CCCH, not combined                                      
  |---- Cell ARFCNs: 113, 115                                                    
  |---- Neighbour Cells: 76, 77, 80, 82, 87, 116, 118, 120, 124                  
ARFCN:  118, Freq:  958.6M, CID:     0, LAC: 26530, MCC: 208, MNC:  10, Pwr: -50 
  |---- Configuration: Unknown                                                   
  |---- Cell ARFCNs: 75, 118                                                     
  |---- Neighbour Cells: 76, 78, 80, 82, 87, 115, 120, 124                       
ARFCN:   -1, Freq:  960.6M, CID:     0, LAC: 26530, MCC: 208, MNC:  10, Pwr: -51 
  |---- Configuration: Unknown                                                   
  |---- Cell ARFCNs: 75, 118                                                     
  |---- Neighbour Cells:                                                         


Cet outil va permettre de savoir quelles ARFCNs ou fréquences sont utilisées par les BTS environnantes et ainsi permettre de connaître les fréquences qu'il est utile de tenter de capturer.

Pour fonctionner avec le Hackrf:

$ grgsm_scanner --args=hackrf

Références

https://connect.ed-diamond.com/MISC/mischs-016/interception-passive-et-decodage-de-flux-gsm-avec-gr-gsm

https://lemnet.fr/blog/post/interception-passive-sans-imsi-catcher-et-decodage-de-flux-gsm-avec-gr-gsm