Sniffing del pacchetto con Pyspinel

Visualizza sorgente su GitHub

Questa guida illustra come configurare Wireshark ed eseguire Pyspinel per sniffare i pacchetti su una rete Thread.

Per utilizzare il plug-in extcap Wireshark per l'analisi del pacchetto, consulta l'articolo sullo sniffing del pacchetto utilizzando extcap.

Configurare l'ambiente webhook

Prima di iniziare, completa i seguenti passaggi:

Crea lo storyboard

Crea e flasha un dispositivo NCP da utilizzare come spammer, utilizzando l'output binario ot-rcp.

nRF52840 nordico

Per configurare l'esempio nRF52840 del Nordic per utilizzarlo come uno storyboard, clona openthread/ot-nrf528xx e configura l'ambiente di build:

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

Imposta baud rate come 460800. Trova la riga #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 in src/nrf52840/transport-config.h e sostituiscila con #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Crea il programma binario:

./script/build nrf52840 UART_trans

Converti l'output binario ot-rcp in esadecimale:

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

Esegui il flashing del file ot-rcp.hex sulla scheda nRF52840 come descritto in Flash con nRF52840.

Disabilita il dispositivo di archiviazione di massa (MSD) su nRF52840 per evitare problemi con danneggiamento o danneggiamento dei dati durante l'utilizzo della porta di debug

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.

Proprietà rete Thread

Prima di continuare, recupera le seguenti proprietà per la rete Thread che vuoi analizzare il traffico. Sono necessari per la configurazione di Wireshark e per l'esecuzione di Sniffernel Pyspinel.

Prefisso locale mesh

Per ottenere il prefisso locale mesh da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

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

  2. Utilizzo di wpanctl con un NCP:

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

  3. Utilizzando la GUI web di OTBR, seleziona Stato. Il prefisso locale mesh è elencato come IPv6:MeshLocalPrefix simile a wpanctl.

Canale

Per ottenere il canale da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

    channel
    15
    

  2. Utilizzo di wpanctl con un NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Utilizzando la GUI web di OTBR, seleziona Stato. Il canale è indicato come NCP:Canale simile a wpanctl.

Chiave di rete

La chiave di rete Thread viene utilizzata da Wireshark per decriptare i pacchetti dopo l'acquisizione. Per recuperare la chiave di rete da un dispositivo nella rete Thread di destinazione:

  1. Utilizzo dell'interfaccia a riga di comando OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Utilizzo di wpanctl con un NCP:

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

La chiave della rete di thread non è disponibile nella GUI web OTBR.

Opzioni snackni

Opzioni
-u or --uart
Valore predefinito
Nessuna: deve essere fornita se utilizzi un dispositivo con una connessione seriale e non una connessione socket.
Descrizione
Il flag -u o --uart seguito da un percorso dispositivo come /dev/ttyUSB0.
-c or --channel
Valore predefinito
11
Descrizione
Il flag -c o --channel seguito dal canale configurato sulla rete Thread, su cui si "sniffano" i pacchetti.
--no-reset
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --no-reset è necessario se il dispositivo NCP è connesso all'host con la connessione USB nativa.
--crc
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --crc è necessario per piattaforme come Schede TI e Nordic Semiconductor Thread. Il flag ricalcola il CRC per evitare un avviso "Bad FCS" (sequenza di controllo del frame) in Wireshark.
-b or --baudrate
Valore predefinito
115200
Descrizione
Il flag -b o --baudrate viene utilizzato per ignorare la velocità di trasmissione predefinita. Imposta questo valore sulla stessa velocità in baud utilizzata con la build NNC (consigliato 460800).
--rssi
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --rssi viene utilizzato per garantire che l'RSSI sia incluso nell'output pcap. Devi utilizzare questo flag se l'opzione Formato CC 24xx FCS è abilitata in Wireshark.
--tap
Valore predefinito
Questo flag sostituisce il comportamento predefinito.
Descrizione
Il flag --tap specifica DLT_IEEE802_15_4_TAP(283) per il formato del frame, con una pseudo-intestazione contenente i TLV con metadati (ad esempio FCS, RSSI, LQI, Channel). Se non specificato, DLT_IEEE802_15_4_WITHFCS(195) viene utilizzato per impostazione predefinita con i valori RSSI e LQI aggiuntivi dopo il frame PHY direttamente, come nel formato TI CC24xx FCS. Devi utilizzare questo flag se l'opzione ITU-T CRC-16 è abilitata in Wireshark. Se questa opzione non è abilitata in Wireshark, non utilizzare questo flag.

Esegui lo spammer

Assicurati di utilizzare il percorso del dispositivo specifico per il tuo NCP e il canale per la rete Thread che stai cercando di annusare.

Se segui questa guida, dRF52840 DK deve essere collegato alla macchina host tramite la porta di debug, come descritto in Flash nRF52840. Per eseguire lo spammer Pyspinel, utilizza il flag -b per specificare il baud rate (se è stato modificato rispetto all'impostazione predefinita) e ometti il flag --no-reset.

Se Configura Wireshark per visualizzare RSSI, devi includere anche il flag --rssi quando esegui lo strumento storyboard. Ad esempio, per annusare il canale 15 utilizzando un dispositivo montato su /dev/ttyACM0 con RSSI incluso nell'output Wireshark:

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

A questo punto, dovresti essere in grado di visualizzare i pacchetti e i relativi protocolli per questa configurazione in Wireshark:

Acquisizione con Wireshark

Fai riferimento allo Sniner di riferimento spionaggio per ulteriori informazioni sull'esecuzione dello storyboard Pyspinel.

Connessione USB nativa

Per usare la porta USB nRF52840 DK è necessario creare il programma binario OpenThread ot-rcp con USB_trans:

./script/build nrf52840 USB_trans
Eseguire il flashing di nRF52840 DK, collegarla alla macchina host sulla porta USB, quindi utilizza il flag --no-reset ma ometti il flag -b quando esegui lo storyboard:

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

Risorse

Per ulteriori strumenti nordici, consulta Nordic Semiconductor - Thread Sniffer basato su nRF52840 con Wireshark.