« Hacking:GSM hack France » : différence entre les versions

De HackBBS
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 145 : Ligne 145 :


Au fichier */mnt/dltKraken/tables.conf* behemoth va inclure les indexes de chaque offset pour chaque table sur le(s) disque(s).
Au fichier */mnt/dltKraken/tables.conf* behemoth va inclure les indexes de chaque offset pour chaque table sur le(s) disque(s).
   Table: 0 100 61391195
#Devices:  dev/node max_tables
   Table: 0 324 102313103
Device: /dev/mapper/Zanorg-root 40
   Table: 0 372 92083796
 
   Table: 0 420 51159177
#Tables: dev id(advance) offset
   Table: 0 172 10229859
   Table: 0 132 10235086
   Table: 0 500 71620051
   Table: 0 324 286566544
   Table: 0 238 122782426
   Table: 0 172 40969789
   Table: 0 108 112548115
   Table: 0 388 235403561
   Table: 0 276 143241494
   Table: 0 396 173999725
   Table: 0 212 40925806
   Table: 0 404 194467391
   Table: 0 268 20463152
   Table: 0 260 143291756
   Table: 0 164 30695372
   Table: 0 412 153536985
   Table: 0 396 81853546
   Table: 0 364 122825759
   Table: 0 348 133012367
   Table: 0 180 296801556
   Table: 0 492 153470574
   Table: 0 292 102363709
   Table: 0 132 92105823
   Table: 0 220 399139151
   Table: 0 412 122856754
   Table: 0 372 112596452
   Table: 0 388 143324460
   Table: 0 428 0
   Table: 0 356 102376597
   Table: 0 436 71667455
   Table: 0 404 71633752
   Table: 0 500 30736294
   Table: 0 428 10230895
   Table: 0 188 245637901
   Table: 0 124 61395110
   Table: 0 492 327502453
   Table: 0 188 81866011
   Table: 0 100 266108608
   Table: 0 436 133090367
   Table: 0 164 20505860
   Table: 0 196 153558800
   Table: 0 196 255877713
   Table: 0 332 40922624
   Table: 0 140 184229975
   Table: 0 180 20465981
   Table: 0 204 347961807
   Table: 0 250 51154849
   Table: 0 156 61435100
   Table: 0 220 30694865
   Table: 0 212 317269082
   Table: 0 380 112608311
   Table: 0 420 51203082
   Table: 0 116 30717010
   Table: 0 348 163770598
   Table: 0 292 92104793
   Table: 0 148 337732312
   Table: 0 230 102337536
   Table: 0 356 225171847
   Table: 0 260 10234365
   Table: 0 230 358191796
   Table: 0 204 40948946
   Table: 0 340 378658386
   Table: 0 140 20479594
   Table: 0 380 388890708
   Table: 0 340 81872471
   Table: 0 108 133057445
   Table: 0 148 51178935
   Table: 0 238 81901548
   Table: 0 156 71640116
   Table: 0 116 214939911
   Table: 0 364 61408430
   Table: 0 268 92131489
   Table: 0 332 368426161
   Table: 0 276 276337464
   Table: 0 250 204699650
   Table: 0 124 307030440
 
 
Behemoth va générer les index de ces tables(extension en .idx) dans le répertoire /mnt/dltKraken/kraken
Behemoth va générer les index de ces tables(extension en .idx) dans le répertoire /mnt/dltKraken/kraken

Version du 9 août 2013 à 12:48

Matériel requis

 * RTL-SDR (R820T)

Le Rtl-Sdr est un recepteur TNT. Il s'achète pour 20$ en chine. Lorsque l'on exploite le tuneur de ce recepteur, il est possible de capter les fréquences de 24 à 1766 MHz.

Device proposé pour les tests

 * Samsung Galaxy S

Les pré-requis

Menu caché du SGS

 *#*#197328640#*#*
 *#0011#

Voici les étapes pour intercepter des trames GSM

Dans le cadre de nos tests nous allons intercepter la voix et les sms d'un Samsung Galaxy S 1.

Afin de nous caler sur une fréquence qui peut etre capté par le rtl-sdr nous allons forcer le GSM à utiliser la bande 900. Le GSM 900 utilise la bande 880-915 MHz pour l'envoi de la voix ou des données depuis le mobile et la bande 925-960 MHz pour la réception des informations venant du réseau.

Le téléphone dispose d'un menu secret permettant de forcer l'utilisation d'une bande:

 *#*#197328640#*#*

Puis on accède au menu

 [1] DEBUG SCREEN -> [8] PHONE CONTROL -> [7] NETWORK CONTROL -> [2] BAND SELECTION -> [3] GSM BAND[*] -> Puis on active [3] GSM 900 [*]

Nous pouvons vérifier que nous utilisons bien cette bande avec le menu secret:

 *#0011#

Ok, maintenant le téléphone est sur la bande GSM900. Nous devons maintenant sniffer sur un canal particulier, c'est l'arfcn. En effet, une bande est découpé en canaux. Chacune de ces bandes comprend 175 porteuses (canaux) de 200 kHz chacune ; elles sont, en France réparties entre 4 opérateurs (voir fréquences GSM en France). La modulation utilisée sur ces porteuses est la GMSK, qui permet d'éviter les chevauchements de porteuses.

Pour découvrir sur quel canal se trouve le téléphone, nous pouvons utiliser un autre menu secret:

 [1] DEBUG SCREEN -> [4] NEIGHBOUR CELL

Lors de ce test, le canal ayant le niveau de puissance le plus fort est:

 Arfcn_Num ; 37 , rxlev: 38
 [1] DEBUG SCREEN -> [1] BASIC INFORMATION

Le BcchFrq nous donne le numéro du canal Arfcn.


Nous pouvons donc calculer la fréquence corespondant à ce canal avec l'outil arfcncalc:

 arfcncalc -a 37 -b 900 -d

La fréquence est donc de 942.4Mhz

Sinon un outil en ligne permet de le calculer: www.cellmapper.net/arfcn?net=GSM&ARFCN=8&MNC=0

Avec gqrx, nous pouvons visualiser le spectre, et se caler sur le signal le plus fort. La fréquence est donc de 942.36Mhz. Nous pouvons sniffer cette fréquence et générer un fichier cfile avec gnuradio-companion. Voici le schema gsm.grc utilisé.

Nous pouvons ensuite visualiser les trames gsm dans wireshark à l'aide de gsm_receiver_rtl.py de la suite airprobe. Dans un premier temps, lancer la version patché de wireshark qui permet de filtrer les trames gsmtap et écouter sur l'interface lo. Ensuite analyser le dump.cfile avec gsm_receive_rtl.py

 /hack/phreaking/Radio/airprobe/gsm-receiver/src/python$ ./gsm_receive_rtl.py -I /tmp/dump.cfile  -d 1 B0

Les trames s'affichent alors dans wireshark.

Todo: Dechiffrement avec Kraken

 * S'inspirer de  www.mail-archive.com/a51@lists.reflextor.com/msg01114.html
 * lists.srlabs.de/pipermail/a51/2010-July/000683.html
 * Renommer tous les dlt en xxx.dlt (ex: 100.dlt)
 * Les placer à la racine d'un disque
 * Se servir de Behemoth.py

Behemoth va créer un indexe de ces rainbowtable(table d'échange, ou table arc-en-ciel). Il va alors générer un fichier tables.conf contenant les disques utilisées, et les offset sur le disque du début de chaque table.

Une table est l'ensemble de tout les hash possible pour un charset donné. Un charset est constitué d'un ensemble de caractère comme [ az-AZ ]. C'est une sorte de dictionnaire.

Behemoth.py va chercher des fichier du type [09]+.dlt Il faut donc placer les 40 tables et les renommer.

 #!/bin/bash
 for f in *.dlt; do
  echo "Processing $f file...";
  new=`echo $f| cut -d'_' -f 3`
  ln $f $new
 done

Voici un script pour controler que les tables de hash sont parfaites.

 #!/bin/bash
 control["100"]="6d36bca865ad5f5b3b95e50be5555f0a";   
 control["108"]="d89f2f62a471734fc86844261e709719";   
 control["116"]="9db534d5866cc6c8b18eef0bbf6aceae";   
 control["124"]="0c93864ad638b531dedf10d85880ee79";   
 control["132"]="f0dbac482c9f6d6626a70bf8115515b4";   
 control["140"]="15768f7f5af4e5467304c7162688425d";   
 control["148"]="55b1bed783fd94a1feb06e70af5cd789";   
 control["156"]="cec43159aa1d7ca4982f1c7417b8dd09";   
 control["164"]="9558f5a7152ab8dddc6e5ff819a3fa5f";   
 control["172"]="307cc99d1724bd1b460d7f39d6121048";   
 control["180"]="0cbd427fb98dc9cec05bc8cd9eec53c5";   
 control["188"]="8771eba46785c636e606560265efcb6f";   
 control["196"]="7f4fcaec2da609dd794ecff07f1ad890";   
 control["204"]="69b40dc68cd9d26006f9b1f70ab676ad";   
 control["212"]="9e9861bd2272b58737629b7c34eb1064";  
 control["220"]="032414372c864417a502ef1eaaa42454";   
 control["230"]="6afc1ca6c0005bf2df6782371c56700d";   
 control["238"]="c6a95cda3e55079295cf97706dc9de2e";   
 control["250"]="f54c106d3ea9ef442330c5156c14c832";   
 control["260"]="2cf1377b93139fb2a7ec9f687b272d3c";   
 control["268"]="af8167abdfd178a01b2bb3a2ee4f59c8";   
 control["276"]="d422218e33cb6c421108469940c03d41";   
 control["292"]="6995a5445330b78380b3ba16642318e9";   
 control["324"]="2ecc836a993a3f71cd710c4455e9780e";   
 control["332"]="75340dda19dc1b1ada8108d47461562a";  
 control["340"]="1cc82ad35788afc4acab95f481e3de9d";   
 control["348"]="183a3427843105942e9b0ab0a852c7db";   
 control["356"]="771ec801ac043291b9f134f75f82a31d";   
 control["364"]="59913ab26509afaecd8861a6877b06c6";   
 control["372"]="1bbceb9afda870b76b7e9928409183de";   
 control["380"]="435e2d2755aa5ce9357889bef5ee534f";   
 control["388"]="fabeaa1792045a0ab5471aeac7271481";   
 control["396"]="98de5b58c98fafc5ada3897eddf7f31a";   
 control["404"]="5bc5814694b412cfb4ba52198492ba1b";   
 control["412"]="4518baa2a1156451cbc0952eb216cb5f";   
 control["420"]="3985446a74105d15f6c4b8bd0467771b";   
 control["428"]="44f06b97410bda5b029754de9cc87db4";   
 control["436"]="c3c48ba123a1ebd9ea6f0abaa56ac475"; 
 control["492"]="a0006b7b58e01b97d6bce1b43b015343";  
 control["500"]="fa47f2242230b69c5ae7a1196ea0311f"
 
 for f in "${!control[@]}"; do
   export hash=`md5sum $f.dlt`;
   export expected="${control[$f]}  $f.dlt";
   if [ [ $expected != $hash ] ] 
    then echo "/!\ Different Fichier $f hash:$hash control:${control[$f]}"
   fi
 done 

On peut alors lancer Behemoth.py de Kraken. Il va falloir 4To en tout. Les 2To de fichier .dlt et 2To de fichier .idx qui vont être généré avec Behemoth. On va utiliser un disque vierge de 2To /dev/sde1 qui contiendra nos fichiers dlt.

 mount /dev/sde1 /mnt/dltKraken
 

On va placer Kraken sur ce disque.

 cd /mnt/dltKraken 
 cp -rf /source/kraken /mnt/dltKraken/

Il faut un fichier /mnt/dltKraken/tables.conf pour Behemoth qui va contenir le node de ce disque de destination(2To):

 Device: /dev/sdd1 40

/!\ Le disque de destination va être réécrit en grande partie. Les données seront écrasées.

On doit monter ce disque:

 mount /dev/sdd1 /mnt/dst    /!\ Le disque doit-il vraiment être monté?

On peut ensuite lancer Behemoth en lui indiquant où il va trouver les sources en .dlt

 /mnt/dltKraken/$ sudo ./indexes/Behemoth.py /mnt/dltKraken

Au fichier */mnt/dltKraken/tables.conf* behemoth va inclure les indexes de chaque offset pour chaque table sur le(s) disque(s).

  1. Devices: dev/node max_tables

Device: /dev/mapper/Zanorg-root 40

  1. Tables: dev id(advance) offset
 Table: 0 132 10235086
 Table: 0 324 286566544
 Table: 0 172 40969789
 Table: 0 388 235403561
 Table: 0 396 173999725
 Table: 0 404 194467391
 Table: 0 260 143291756
 Table: 0 412 153536985
 Table: 0 364 122825759
 Table: 0 180 296801556
 Table: 0 292 102363709
 Table: 0 220 399139151
 Table: 0 372 112596452
 Table: 0 428 0
 Table: 0 436 71667455
 Table: 0 500 30736294
 Table: 0 188 245637901
 Table: 0 492 327502453
 Table: 0 100 266108608
 Table: 0 164 20505860
 Table: 0 196 255877713
 Table: 0 140 184229975
 Table: 0 204 347961807
 Table: 0 156 61435100
 Table: 0 212 317269082
 Table: 0 420 51203082
 Table: 0 348 163770598
 Table: 0 148 337732312
 Table: 0 356 225171847
 Table: 0 230 358191796
 Table: 0 340 378658386
 Table: 0 380 388890708
 Table: 0 108 133057445
 Table: 0 238 81901548
 Table: 0 116 214939911
 Table: 0 268 92131489
 Table: 0 332 368426161
 Table: 0 276 276337464
 Table: 0 250 204699650
 Table: 0 124 307030440


Behemoth va générer les index de ces tables(extension en .idx) dans le répertoire /mnt/dltKraken/kraken