Analyse du protocole Zigbee : Sniffer CC2531

Le but de cet article est d’analyser le protocole sans fil Zigbee à l’aide d’un sniffer USB. Pour cela on va intercepter les communications entre une passerelle Xiaomi et un capteur de température et d’humidité avec un dongle USB. L’objectif étant d’arriver à lire les informations de température du capteur.
Cet article est inspiré d’un très bon article du Blog « Faire Soi-Même » (lien en bas de la page), mais en utilisant d’autre outils.

1. Achats

Tout d’abord, il faut acheter au minimum dongle USB avec le composant CC2531 et avec un câble de programmation :
L’original du fabricant TI à la référence CC2531EMK, mais il en existe des similaires sur des sites comme Amazon, AliExpress ou LeBonCoin
https://www.amazon.fr/gp/product/B07YDG4QHM
Ensuite, un programmateur CC DEBUG :
https://www.amazon.fr/gp/product/B07FP5XHPM
Et aussi un capteur avec sa passerelle qui vont communiquer avec le protocole Zigbee.
La passerelle :
https://www.amazon.fr/gp/product/B082XCWH71
Le capteur de température et d’humidité :
https://fr.aliexpress.com/item/32711728819.html

2. Installation

Installer le logiciel SmartRF Flash programmer de Texas Instruments. Ne pas utiliser la version V2 qui n’est pas compatible avec le CC DEBUGGER. Par exemple la version 1.12.8 du 31 Mai 2016.
Le logiciel est gratuit, mais il faut avoir un compte TI pour le télécharger.
https://www.ti.com/tool/FLASH-PROGRAMMER
Ensuite, il faut installer le driver pour le CC DEBUGGER :
https://www.ti.com/lit/zip/swrc212
Après avoir installer le driver, connecter le CC DEBUGGER au PC.Vérfier que le debugger est bien reconnu en ouvrant le « Gestionnaire de Périphériques » de Windows. Le debugger devrait apparaitre comme un « Cebal controlled device »

Vérification du driver du CC DEBUGGER

Si le driver, n’est pas installé correctement, vous pouvez installer le driver manuellement.
Installer le logiciel PACKET-SNIFFER. (Pas la v2, la version v2.18.1 du 30 Juin 2014) pour récupérer un fichier dans
C:\Program Files (x86)\Texas Instruments\SmartRF Tools\Packet Sniffer\bin\general\firmware\sniffer_fw_cc2531.hex

3. Connecter le CC DEBUGGER

Brancher le CC DEBUGGER à un port USB du PC puis au dongle CC2131 qui lui même doit être connecté à un autre port USB du PC, comme sur la figure ci-dessous :

Branchements

Appuyer sur le bouton RESET du CC DEBUGGER, la LED devrait s’allumer en vert.

4.Programmation

Exécuter le logiciel Flash Programmer, dans la section Flash image, sélectionnez le fichier sniffer_fw_cc2531.hex dans le répertoire C:\Program Files (x86)\Texas Instruments\SmartRF Tools\Packet Sniffer\bin\general\firmware\
Cliquer sur « Perform actions »

TI Flash Programmer

4. Installation des logiciels

Télécharger le logiciel Wireshark et l’installer
https://www.wireshark.org/#download
Prendre une version v3.0.x et pas la dernière car elles ne sont pas toutes compatible avec les logiciels TI (Par exemple Wireshark-win64-3.0.12.exe)
Télécharger le logiciel SmartRF Packet Sniffer2, cette fois ci. (version v1.8.0 du 22 janvier 2020 par exemple) et l’installer.
https://www.ti.com/tool/PACKET-SNIFFER
Mais toujours pas pour l’utiliser mais pour récupérer certains fichiers dans C:\Program Files (x86)\Texas Instruments\SmartRF Tools\SmartRF Packet Sniffer 2\wireshark\plugins\3.0.x

Les copier dans le répertoire suivant :
C:\Program Files\Wireshark\plugins\3.0
Télécharger et installer TI Wireshark Packet Converter (TiWsPc) :
https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/158/TiWsPc.zip
Executer le logiciel TiWsPc.

Cliquer sur Device Configuration, sélectionner le canal et cliquer sur Start.
Le canal par défaut est le 13, mais dans certains cas, les équipements communiquent sur d’autres canaux, comme le 20 ici. Il faut les tester un par un et attendre de recevoir des « packets ».

Exécuter Wireshark :

Aller dans le menu Capture->Option

Puis cliquer sur « Gérer les interfaces… »

Puis l’onglet « Pipes », créer une entrée avec « \.\pipe\tiwspc_data »

Cliquer sur OK puis Démarrer.
Prendre la passerelle Xiaomi et le capteur de température. Faire une association entre les deux.
Les première trames Zigbee devraient apparaitre dans Wireshark. Mais elles sont cryptées. En effet, le protocole Zigbee utilise un système de cryptage AES 128.

5. Décodage des trames

Il est possible de décoder les trames.
Pour cela, il faut entrer une clé, la Trust Center Link Key dans le logiciel Wireshark.
Aller dans le menu Editer->Préférences

Rechercher « Protocols » puis « Zigbee ».

Cliquer sur Edit et entrer la clé :
5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39

Dans Wireshark, une parties des trames vont être automatiquement décryptées.

On peut voir une trame « Transport Key », qui contient la Network Key

Wireshark récupére directement cette clé et décrypte toutes les trames. La Network Key peut aussi être enregistrée dans Wireshark, comme la Trust Center Link Key (voir méthode ci-dessus) si on souhaite faire d’autres enregistrements plus tard.
Et voilà, maintenant on peut ainsi lire les informations utiles du capteur comme la température dans les trames ZCL (Zigbee Cluster Library) :


Liens utiles :
http://faire-ca-soi-meme.fr/domotique/2017/02/27/hack-xiaomi-mi-smart-temperature-and-humidity-sensor/
https://connect.ed-diamond.com/MISC/MISC-086/Tout-tout-tout-vous-saurez-tout-sur-le-ZigBee
https://lucidar.me/fr/zigbee/zigbee-sniffer/
https://www.ti.com/tool/CC2531EMK
https://www.zigbee2mqtt.io/how_tos/how_to_sniff_zigbee_traffic.html
https://sunmaysky.blogspot.com/2018/10/how-to-use-cc2531emk-and-wireshark-as.html