Paquet reniflant avec du pyspinel

Afficher le code source sur GitHub

Ce guide explique comment configurer Wireshark et exécuter Pyspinel pour renifler des paquets à partir d'un réseau Thread.

Si vous souhaitez utiliser le plug-in Wireshark extcap pour le sniffing de paquets, consultez la section Sniffing de paquets à l'aide de extcap.

Configurer l'environnement de détection

Avant de commencer, procédez comme suit:

Créer le sniffer

Compilez et flashez un appareil NCP en tant que outil de détection à l'aide de la sortie binaire ot-rcp.

Nordic nRF52840

Pour configurer l'exemple nordique nRF52840 à utiliser comme sniffer, clonez openthread/ot-nrf528xx et configurez l'environnement de compilation:

git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap

Définissez le débit en bauds sur 460 800. Recherchez la ligne #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 dans src/nrf52840/transport-config.h et remplacez-la par #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Créez le binaire:

./script/build nrf52840 UART_trans

Convertissez la sortie binaire ot-rcp en hexadécimal:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

Flashez le fichier ot-rcp.hex sur la carte nRF52840, comme expliqué dans la section Flash nRF52840.

Désactivez le périphérique de stockage de masse sur le nRF52840 pour éviter les problèmes de corruption de données ou de pertes lors de l'utilisation du port de débogage:

expect <<EOF
spawn JLinkExe
expect "J-Link>"
send "msddisable\n"
expect "Probe configured successfully."
exit
EOF
spawn JLinkExe
SEGGER J-Link Commander V6.42b (Compiled Feb  5 2019 17:35:31)
DLL version V6.42b, compiled Feb  5 2019 17:35:20
 
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan  7 2019 14:07:15
Hardware version: V1.00
S/N: 683411111
VTref=3.300V
 
Type "connect" to establish a target connection, '?' for help
J-Link>msddisable
Probe configured successfully.

Propriétés du réseau Thread

Avant de continuer, obtenez les propriétés suivantes pour le réseau Thread que vous souhaitez renifler. Vous en aurez besoin pour la configuration de Wireshark et pour l'exécution du outil de détection de Pyspinel.

Préfixe local du réseau maillé

Pour obtenir le préfixe local du réseau maillé à partir d'un appareil du réseau Thread cible:

  1. À l'aide de la CLI OpenThread :

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. Utiliser wpanctl avec un NCP :

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. À l'aide de l'IUG OTBR, sélectionnez État. Le préfixe local du réseau maillé est répertorié comme IPv6:MeshLocalPrefix comme wpanctl.

Chaîne

Pour obtenir la chaîne depuis un appareil du réseau Thread cible:

  1. À l'aide de la CLI OpenThread :

    channel
    15
    

  2. Utiliser wpanctl avec un NCP :

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. À l'aide de l'IUG OTBR, sélectionnez État. Le canal est répertorié en tant que NCP:Channel semblable à wpanctl.

Clé réseau

Wireshark utilise la clé de réseau Thread pour déchiffrer les paquets après la capture. Pour obtenir la clé réseau à partir d'un appareil du réseau Thread cible:

  1. À l'aide de la CLI OpenThread :

    networkkey
    33334444333344443333444433334444
    

  2. Utiliser wpanctl avec un NCP :

    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

La clé réseau Thread n'est pas disponible dans l'IUG Web OTBR.

Options de détection

Options
-u or --uart
Valeur par défaut
Aucun : à utiliser si vous utilisez un appareil avec une connexion série et non une connexion socket.
Description
L'option -u ou --uart suivie d'un chemin d'accès à l'appareil tel que /dev/ttyUSB0.
-c or --channel
Valeur par défaut
11
Description
L'option -c ou --channel suivie du canal configuré sur votre réseau de threads, sur lequel intercepter les paquets
--no-reset
Valeur par défaut
Cette option remplace le comportement par défaut.
Description
L'option --no-reset est nécessaire si votre appareil NCP est connecté à l'hôte via la connexion USB native.
--crc
Valeur par défaut
Cette option remplace le comportement par défaut.
Description
L'option --crc est nécessaire pour les plates-formes telles que TI et Nordic Semiconductor Thread. L'option recalcule le CRC afin d'éviter un avertissement "FCS incorrect" (séquence de vérification de l'image) dans Wireshark.
-b or --baudrate
Valeur par défaut
115200
Description
L'option -b ou --baudrate permet de remplacer le débit en bauds par défaut. Définissez cette valeur sur le même débit en bauds que celui utilisé pour votre build NCP (nous recommandons 460800).
--rssi
Valeur par défaut
Cette option remplace le comportement par défaut.
Description
L'option --rssi permet de garantir que la RSSI est incluse dans la sortie pcap. Vous devez utiliser cet indicateur si l'option TI CC24xx FCS est activée dans Wireshark.
--tap
Valeur par défaut
Cette option remplace le comportement par défaut.
Description
L'option --tap spécifie DLT_IEEE802_15_4_TAP(283) pour le format de cadre, avec un pseudo-en-tête contenant des fichiers TLV avec des métadonnées (par exemple, FCS, RSSI, LQI, Channel). Si aucune valeur n'est spécifiée, DLT_IEEE802_15_4_WITHFCS(195) est utilisé par défaut avec les flux RSSI et LQI supplémentaires qui suivent directement le cadre PHY, comme dans le format FCS TI CC24xx. Vous devez utiliser cette option si l'option ITU-T CRC-16 est activée dans Wireshark. Si cette option n'est pas activée dans Wireshark, n'utilisez pas cette option.

Exécuter le sniffer

Veillez à utiliser le chemin d'accès de l'appareil spécifique de votre réseau NCP ainsi que le canal du réseau de thread que vous tentez de détecter.

Si vous suivez ce guide, le nRF52840 DK doit être connecté à la machine hôte par le port de débogage, comme décrit dans la section Flash le nRF52840. Pour exécuter l'outil de détection de Pyspinel, utilisez l'option -b pour spécifier le débit en bauds (s'il a été modifié par défaut) et omettez l'option --no-reset.

Si vous configurez Wireshark pour afficher le RSSI, vous devez également inclure l'indicateur --rssi lorsque vous exécutez l'outil de détection. Par exemple, pour renifler sur la chaîne 15 à l'aide d'un appareil installé sur /dev/ttyACM0 avec RSSI inclus dans la sortie Wireshark:

cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -

Vous devriez maintenant pouvoir afficher les paquets et les protocoles associés pour cette configuration dans Wireshark:

Wireshark Capture

Pour plus d'informations sur l'exécution du détection Pyspinel, reportez-vous à la documentation de référence Spinnaker.

Connexion USB native

Pour utiliser le port USB nRF52840 DK, vous devez créer le binaire OpenThread ot-rcp avec le port USB_trans :

./script/build nrf52840 USB_trans

python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -

Ressources

Pour obtenir des outils nordiques supplémentaires, consultez la page Nordic Semiconductor – Thread Sniffer basé sur nRF52840 avec Wireshark.