Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Reniflage de paquets avec Pyspinel

L'outil renifleur Pyspinel se connecte à un périphérique Thread NCP ou RCP et le convertit en un renifleur de paquets promiscuous, générant un flux pcap (capture de paquets) à enregistrer ou à envoyer directement dans Wireshark.

Wireshark est un outil open source capable de décoder les protocoles réseau de la pile Thread, tels que IEEE 802.15.4, 6LoWPAN, IPv6, MLE (Mesh Link Establishment), UDP et CoAP.

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

Pour utiliser le plugin Wireshark extcap pour le reniflage de paquets, consultez Reniflage de paquets à l'aide d'extcap .

Exigences

Matériel:

  • Une machine hôte pour servir de NCP et pour exécuter Pyspinel et Wireshark:
    • macOS - OS X 10.6 64 bits ou version ultérieure
    • Ubuntu
  • 1 périphérique OpenThread a flashé avec une version ot-ncp-ftd ou ot-rcp .

Logiciel:

  • Python 3 pour exécuter Pyspinel
  • Wireshark 2.4.1 ou plus récent pour la prise en charge du protocole Thread

Installation

Configurer l'environnement sniffer

Clonez et installez Pyspinel et ses dépendances:

  1. Installer les dépendances:
    sudo apt install python3-pip
    pip3 install --user pyserial ipaddress
  2. Cloner le référentiel Pyspinel:
    git clone https://github.com/openthread/pyspinel
  3. Installez Pyspinel:
    cd pyspinel
    python3 setup.py install

Vous pouvez également configurer l'environnement en installant le package pyspinel . Notez que ce package utilise la version Pyspinel v1.0.0a3 et non le dernier maître Pyspinel.

pip3 install --user pyspinel

Installez Wireshark

Linux

Ouvrez un terminal et exécutez les commandes suivantes pour télécharger et installer Wireshark:

sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark

Nous vous recommandons d'exécuter Wireshark en tant qu'utilisateur non root. Pour ce faire, reconfigurez le package:

sudo dpkg-reconfigure wireshark-common

Lorsque vous obtenez la boîte de dialogue demandant "Les non-super-utilisateurs doivent-ils pouvoir capturer des paquets?", Sélectionnez Oui , puis ajoutez l'utilisateur de wireshark et mettez à jour les autorisations de fichier:

sudo adduser $USER wireshark
sudo chmod +x /usr/bin/dumpcap

macOS

Téléchargez et installez Wireshark pour macOS.

Construisez le renifleur

Construisez et flashez un périphérique NCP pour servir de renifleur, en utilisant la sortie binaire ot-rcp .

Nordic nRF52840

Pour configurer l'exemple Nordic nRF52840 pour l'utiliser comme renifleur:

  1. Cloner OpenThread et configurer l'environnement de construction:
    git clone https://github.com/openthread/openthread
    cd openthread
    ./bootstrap
    
  2. Créez l'exemple OpenThread nRF52840, en utilisant une vitesse de transmission UART de 460800:
    make -f examples/Makefile-nrf52840 CFLAGS="-DUART_BAUDRATE=NRF_UART_BAUDRATE_460800"
    
  3. Convertissez la sortie binaire ot-rcp en hexadécimal:
    arm-none-eabi-objcopy -O ihex output/nrf52840/bin/ot-rcp ot-rcp.hex
    
  4. ot-rcp.hex fichier ot-rcp.hex sur la carte nRF52840 comme détaillé dans Flasher le nRF52840 .
  5. Désactivez le périphérique de stockage de masse (MSD) sur le nRF52840 pour éviter les problèmes de corruption ou de perte de données 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 de threads

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 exécuter le renifleur Pyspinel.

Préfixe local de maillage

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

  1. Utilisation de l'interface de ligne de commande OpenThread:
    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    
  2. Utilisation de wpanctl avec un NCP:
    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    
  3. À l'aide de l'interface graphique Web OTBR, sélectionnez État . Le préfixe local de maillage est répertorié comme IPv6: MeshLocalPrefix similaire à wpanctl .

Canal

Pour obtenir le canal d'un appareil du réseau Thread cible:

  1. Utilisation de l'interface de ligne de commande OpenThread:
    channel
    15
    
  2. Utilisation de wpanctl avec un NCP:
    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    
  3. À l'aide de l'interface graphique Web OTBR, sélectionnez État . Le canal est répertorié comme NCP: canal similaire à wpanctl .

Passe-partout

La clé principale du réseau Thread est utilisée par Wireshark pour déchiffrer les paquets après la capture. Pour obtenir la clé principale d'un appareil du réseau Thread cible:

  1. Utilisation de l'interface de ligne de commande OpenThread:
    masterkey
    33334444333344443333444433334444
    
  2. Utilisation de wpanctl avec un NCP:
    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

La clé principale du réseau Thread n'est pas disponible dans l'interface graphique Web OTBR.

Configuration de Wireshark - Protocoles

Wireshark doit être configuré pour afficher correctement les paquets Thread.

Sélectionnez Préférences ... dans Wireshark et développez la section Protocoles .

6LoWPAN

Sélectionnez 6LoWPAN dans la liste des protocoles et vérifiez ou modifiez les paramètres suivants:

  1. Décochez la case Dériver l'ID selon RFC 4944 .
  2. Mettez à jour le contexte 0 avec le préfixe local de maillage pour le réseau Thread cible.
OT Sniffer Wireshark 6LoWPAN

Wireshark utilise des configurations de contexte pour analyser l'adresse IPv6 compressée et afficher correctement les adresses source et de destination IPv6.

Pour afficher les adresses des autres préfixes sur maillage configurés sur la passerelle, mettez à jour les autres ID de contexte avec ces préfixes.

Pour obtenir l'ID de contexte pour un préfixe spécifique sur maillage, affichez le TLV Thread Network Data dans n'importe quel message de réponse MLE Data. Par exemple:

Context 1: fd00:7d03:7d03:7d03::/64

CoAP

Sélectionnez CoAP dans la liste des protocoles et définissez le Port UDP CoAP sur 61631. Cela garantit que les messages TMF (comme la sollicitation d'adresse) sont affichés.

IEEE 802.15.4

Sélectionnez IEEE 802.15.4 dans la liste des protocoles et vérifiez ou modifiez les paramètres suivants:

  1. Définissez 802.15.4 Ethertype (en hexadécimal) sur "0x809a".
  2. Réglez Security Suite sur «AES-128 Encryption, 32-bit Integrity Protection».
  3. Cliquez sur le bouton Modifier ... à côté de Clés de décryptage , où vous ajoutez la clé principale du réseau Thread pour le décryptage des paquets.
    1. Cliquez sur + pour ajouter une clé de déchiffrement .
    2. Entrez la clé principale du réseau Thread dans la colonne Clé de déchiffrement .
    3. Entrez "1" comme index de clé de déchiffrement .
    4. Sélectionnez Thread hash dans la zone de liste de la colonne Key hash .
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. Cliquez sur OK pour enregistrer la clé de déchiffrement.

Fil

Sélectionnez Thread dans la liste des protocoles et vérifiez ou modifiez les paramètres suivants:

  1. Entrez "00000000" pour le compteur de séquence de threads .
  2. Décochez Utiliser l'ID PAN comme les deux premiers octets de la clé principale .
  3. Cochez Acquérir automatiquement le compteur de séquence de threads .

Cliquez sur le bouton OK pour enregistrer les modifications de protocole.

Certains trafics Thread peuvent être analysés en tant que protocole ZigBee. Pour afficher correctement ces deux protocoles, modifiez les protocoles activés dans Wireshark:

  1. Dans Wireshark, accédez à Analyser > Protocoles activés .
  2. Décochez les protocoles suivants:
    1. LwMesh
    2. ZigBee
    3. ZigBee Green Power

Configuration de Wireshark - RSSI

Pour afficher RSSI dans Wireshark:

  1. Allez dans Préférences > Protocoles > IEEE 802.15.4 .
  2. Définissez le format FCS :
    • Si IEEE 802.15.4 TAP est désactivé: métadonnées TI CC24xx .
    • Si IEEE 802.15.4 TAP est activé: ITU-T CRC-16 . Voir l' indicateur --tap pour plus d'informations.
  3. Cliquez sur OK pour enregistrer et revenir au menu Préférences .
  4. Dans Préférences , sélectionnez Apparence > Colonnes .
  5. Ajouter une nouvelle entrée:
    • Titre: RSSI
    • Type: Personnalisé
    • Champs: wpan.rssi
OT Sniffer Wireshark RSSI

Options de renifleur

Options
-u or --uart
Valeur par défaut
Aucun - doit être fourni si vous utilisez un appareil avec une connexion série et non une connexion socket.
La description
L'indicateur -u ou --uart suivi d'un chemin de périphérique tel que /dev/ttyUSB0 .
-c or --channel
Valeur par défaut
11
La description
L'indicateur -c ou --channel suivi du canal configuré sur votre Thread Network, sur lequel renifler les paquets.
--no-reset
Valeur par défaut
Cet indicateur remplace le comportement par défaut.
La description
L'indicateur --no-reset est nécessaire si votre périphérique NCP est connecté à l'hôte avec la connexion USB native.
--crc
Valeur par défaut
Cet indicateur remplace le comportement par défaut.
La description
L'indicateur --crc est nécessaire pour les plates-formes telles que les cartes TI et Nordic Semiconductor Thread. L'indicateur recalcule le CRC pour éviter un avertissement «Bad FCS» (séquence de vérification de trame) dans Wireshark.
-b or --baudrate
Valeur par défaut
115200
La description
L'indicateur -b ou --baudrate est utilisé pour remplacer la vitesse de transmission par défaut. Définissez cette valeur sur la même vitesse de transmission utilisée avec votre build NCP (nous recommandons 460800).
--rssi
Valeur par défaut
Cet indicateur remplace le comportement par défaut.
La description
L'indicateur --rssi est utilisé pour s'assurer que RSSI est inclus dans la sortie pcap. Vous devez utiliser cet indicateur si l'option de format TI CC24xx FCS est activée dans Wireshark.
--tap
Valeur par défaut
Cet indicateur remplace le comportement par défaut.
La description
L'indicateur --tap spécifie DLT_IEEE802_15_4_TAP(283) pour le format de trame, avec un pseudo-en-tête contenant des TLV avec des métadonnées (telles que FCS, RSSI, LQI, Channel). S'il n'est pas spécifié, DLT_IEEE802_15_4_WITHFCS(195) serait utilisé par défaut avec les RSSI et LQI supplémentaires suivant directement la trame PHY, comme dans le format TI CC24xx FCS. Vous devez utiliser cet indicateur 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 cet indicateur.

Exécutez le renifleur

Assurez-vous d'utiliser le chemin de périphérique spécifique pour votre NCP et le canal du réseau Thread que vous essayez de renifler.

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 Flash le nRF52840 . Pour exécuter le renifleur Pyspinel, utilisez l'indicateur -b pour spécifier le débit en bauds (s'il a été modifié par rapport à la valeur par défaut) et omettez l'indicateur --no-reset .

Par exemple, pour renifler sur le canal 15 à l'aide d'un périphérique monté 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 voir les paquets et les protocoles associés pour cette configuration dans Wireshark:

Capture de Wireshark

Voir la référence du renifleur Spinel pour plus d'informations sur l'exécution du renifleur Pyspinel.

Connexion USB native

L'utilisation du port USB nRF52840 DK nécessite que le binaire OpenThread ot-rcp soit construit avec l'indicateur USB=1 :

make -f examples/Makefile-nrf52840 USB=1

Flashez le nRF52840 DK, connectez-le à la machine hôte par le port USB , puis utilisez l'indicateur --no-reset mais omettez l'indicateur -b lors de l'exécution du sniffer:

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

Ressources

Pour plus d'informations sur l'utilisation de Pyspinel et Wireshark, consultez les éléments suivants: