« Hacking:GSM hack France » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 28 : | Ligne 28 : | ||
Pour découvrir sur quel canal se trouve le téléphone, nous pouvons utiliser un autre menu secret: | Pour découvrir sur quel canal se trouve le téléphone, nous pouvons utiliser un autre menu secret: | ||
<strike> [1] DEBUG SCREEN -> [4] NEIGHBOUR CELL | |||
Lors de ce test, le canal ayant le niveau de puissance le plus fort est: | Lors de ce test, le canal ayant le niveau de puissance le plus fort est: | ||
Arfcn_Num ; 37 , rxlev: 38 | Arfcn_Num ; 37 , rxlev: 38</strike> | ||
[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: | Nous pouvons donc calculer la fréquence corespondant à ce canal avec l'outil arfcncalc: |
Version du 16 juin 2013 à 20:36
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` mv $f $new done
Voici un script pour controler que les tables de hash sont parfaites.
#!/bin/bash control="6d36bca865ad5f5b3b95e50be5555f0a 100.dlt d89f2f62a471734fc86844261e709719 108.dlt 9558f5a7152ab8dddc6e5ff819a3fa5f 164.dlt 307cc99d1724bd1b460d7f39d6121048 172.dlt 9e9861bd2272b58737629b7c34eb1064 212.dlt c6a95cda3e55079295cf97706dc9de2e 238.dlt af8167abdfd178a01b2bb3a2ee4f59c8 268.dlt 2ecc836a993a3f71cd710c4455e9780e 324.dlt 183a3427843105942e9b0ab0a852c7db 348.dlt 1bbceb9afda870b76b7e9928409183de 372.dlt 98de5b58c98fafc5ada3897eddf7f31a 396.dlt 3985446a74105d15f6c4b8bd0467771b 420.dlt a0006b7b58e01b97d6bce1b43b015343 492.dlt fa47f2242230b69c5ae7a1196ea0311f 500.dlt 0c93864ad638b531dedf10d85880ee79 124.dlt f0dbac482c9f6d6626a70bf8115515b4 132.dlt 0cbd427fb98dc9cec05bc8cd9eec53c5 180.dlt 8771eba46785c636e606560265efcb6f 188.dlt 7f4fcaec2da609dd794ecff07f1ad890 196.dlt 032414372c864417a502ef1eaaa42454 220.dlt f54c106d3ea9ef442330c5156c14c832 250.dlt d422218e33cb6c421108469940c03d41 276.dlt 75340dda19dc1b1ada8108d47461562a 332.dlt 771ec801ac043291b9f134f75f82a31d 356.dlt 435e2d2755aa5ce9357889bef5ee534f 380.dlt 5bc5814694b412cfb4ba52198492ba1b 404.dlt 44f06b97410bda5b029754de9cc87db4 428.dlt 9db534d5866cc6c8b18eef0bbf6aceae 116.dlt 15768f7f5af4e5467304c7162688425d 140.dlt 55b1bed783fd94a1feb06e70af5cd789 148.dlt cec43159aa1d7ca4982f1c7417b8dd09 156.dlt 69b40dc68cd9d26006f9b1f70ab676ad 204.dlt 6afc1ca6c0005bf2df6782371c56700d 230.dlt 2cf1377b93139fb2a7ec9f687b272d3c 260.dlt 6995a5445330b78380b3ba16642318e9 292.dlt 1cc82ad35788afc4acab95f481e3de9d 340.dlt 59913ab26509afaecd8861a6877b06c6 364.dlt fabeaa1792045a0ab5471aeac7271481 388.dlt 4518baa2a1156451cbc0952eb216cb5f 412.dlt c3c48ba123a1ebd9ea6f0abaa56ac475 436.dlt" echo "Control: $control" for f in *.dlt; do hash=$hash`md5sum $f`" " done echo "Hash: $hash" if [ [ $control != $hash ] ] then echo "/!\ Different" fi
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/sdd1.
mount /dev/sdd1 /mnt/table cd /mnt/table
On va placer Kraken sur ce disque.
cp -rf /source/kraken/* /mnt/table
Il faut un fichier tables.conf pour Behemoth qui va contenir le node du disque de destination: Voici un exemple de fichier généré lorsque l'on n'utilise qu'un seul disque:
Device: /dev/sdd1 40
On peut ensuite lancer Behemoth en lui indiquant où il va trouver les sources en .dlt korigan@Zanorg:/table$ sudo ./indexes/Behemoth.py /mnt/part4
Au fichier *tables.conf* behemoth va inclure les indexes de chaque offset pour chaque table sur le(s) disque(s).
Table: 0 100 61391195 Table: 0 324 102313103 Table: 0 372 92083796 Table: 0 420 51159177 Table: 0 172 10229859 Table: 0 500 71620051 Table: 0 238 122782426 Table: 0 108 112548115 Table: 0 276 143241494 Table: 0 212 40925806 Table: 0 268 20463152 Table: 0 164 30695372 Table: 0 396 81853546 Table: 0 348 133012367 Table: 0 492 153470574 Table: 0 132 92105823 Table: 0 412 122856754 Table: 0 388 143324460 Table: 0 356 102376597 Table: 0 404 71633752 Table: 0 428 10230895 Table: 0 124 61395110 Table: 0 188 81866011 Table: 0 436 133090367 Table: 0 196 153558800 Table: 0 332 40922624 Table: 0 180 20465981 Table: 0 250 51154849 Table: 0 220 30694865 Table: 0 380 112608311 Table: 0 116 30717010 Table: 0 292 92104793 Table: 0 230 102337536 Table: 0 260 10234365 Table: 0 204 40948946 Table: 0 140 20479594 Table: 0 340 81872471 Table: 0 148 51178935 Table: 0 156 71640116 Table: 0 364 61408430