Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Packet Sniffing com Pyspinel

A ferramenta Pyspinel sniffer se conecta a um dispositivo Thread NCP ou RCP e o converte em um sniffer de pacote promíscuo, gerando um fluxo pcap (captura de pacote) a ser salvo ou direcionado diretamente para o Wireshark.

Wireshark é uma ferramenta de código aberto que pode decodificar protocolos de rede na pilha de Thread, como IEEE 802.15.4, 6LoWPAN, IPv6, MLE (Estabelecimento de link de malha), UDP e CoAP.

Este guia cobre como configurar o Wireshark e executar o Pyspinel para detectar pacotes de uma rede Thread.

Para usar o plugin extcap do Wireshark para farejar pacotes, consulte Farejar pacotes usando extcap .

Requisitos

Hardware:

  • Uma máquina host para servir como um NCP e executar o Pyspinel e o Wireshark:
    • macOS - OS X 10.6 de 64 bits ou posterior
    • Ubuntu
  • 1 dispositivo OpenThread piscou com uma construção ot-ncp-ftd ou ot-rcp .

Programas:

  • Python 3 para executar Pyspinel
  • Wireshark 2.4.1 ou mais recente para suporte de protocolo Thread

Instalação

Configure o ambiente sniffer

Clone e instale Pyspinel e dependências:

  1. Instale dependências:
    sudo apt install python3-pip
    pip3 install --user pyserial ipaddress
  2. Clone o repositório Pyspinel:
    git clone https://github.com/openthread/pyspinel
  3. Instale Pyspinel:
    cd pyspinel
    python3 setup.py install

Como alternativa, configure o ambiente instalando o pacote pyspinel . Observe que este pacote usa a versão Pyspinel v1.0.0a3 e não o mestre Pyspinel mais recente.

pip3 install --user pyspinel

Instale o Wireshark

Linux

Abra um terminal e execute os seguintes comandos para baixar e instalar o Wireshark:

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

Recomendamos executar o Wireshark como um usuário não root. Para fazer isso, reconfigure o pacote:

sudo dpkg-reconfigure wireshark-common

Quando você receber a caixa de diálogo perguntando "Os não superusuários podem capturar pacotes?", Selecione Sim , depois adicione o usuário wireshark e atualize as permissões do arquivo:

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

Mac OS

Baixe e instale o Wireshark para macOS.

Construir o farejador

Construa e atualize um dispositivo NCP para servir como farejador, usando a saída binária ot-rcp .

Nordic nRF52840

Para configurar o exemplo Nordic nRF52840 para uso como um farejador:

  1. Clone OpenThread e configure o ambiente de construção:
    git clone https://github.com/openthread/openthread
    cd openthread
    ./bootstrap
    
  2. Crie o exemplo OpenThread nRF52840, usando uma taxa de transmissão UART de 460800:
    make -f examples/Makefile-nrf52840 CFLAGS="-DUART_BAUDRATE=NRF_UART_BAUDRATE_460800"
    
  3. Converta a saída binária ot-rcp em hex:
    arm-none-eabi-objcopy -O ihex output/nrf52840/bin/ot-rcp ot-rcp.hex
    
  4. ot-rcp.hex arquivo ot-rcp.hex para a placa nRF52840 conforme detalhado em Atualizar o nRF52840 .
  5. Desative o dispositivo de armazenamento em massa (MSD) no nRF52840 para evitar problemas com corrupção de dados ou quedas ao usar a porta de depuração:
    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.
    

Propriedades de rede de thread

Antes de continuar, obtenha as seguintes propriedades para a rede Thread que você deseja farejar. Você precisará deles para configurar o Wireshark e executar o sniffer Pyspinel.

Prefixo local da malha

Para obter o prefixo local da malha de um dispositivo na rede Thread de destino:

  1. Usando a CLI OpenThread:
    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    
  2. Usando wpanctl com um NCP:
    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    
  3. Usando o OTBR Web GUI, selecione Status . O prefixo local de malha é listado como IPv6: MeshLocalPrefix semelhante a wpanctl .

Canal

Para obter o canal de um dispositivo na rede Thread de destino:

  1. Usando a CLI OpenThread:
    channel
    15
    
  2. Usando wpanctl com um NCP:
    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    
  3. Usando o OTBR Web GUI, selecione Status . O canal está listado como NCP: Canal semelhante ao wpanctl .

Chave mestra

A chave mestra da rede Thread é usada pelo Wireshark para descriptografar pacotes após a captura. Para obter a chave mestra de um dispositivo na rede Thread de destino:

  1. Usando a CLI OpenThread:
    masterkey
    33334444333344443333444433334444
    
  2. Usando wpanctl com um NCP:
    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

A chave mestra da rede Thread não está disponível no OTBR Web GUI.

Configuração do Wireshark - protocolos

O Wireshark deve ser configurado para mostrar os pacotes Thread de maneira adequada.

Selecione Preferences ... no Wireshark e expanda a seção Protocols .

6LoWPAN

Selecione 6LoWPAN na lista de protocolos e verifique ou altere as seguintes configurações:

  1. Desmarque Derive ID de acordo com RFC 4944 .
  2. Atualize o contexto 0 com o prefixo local da malha para a rede Thread de destino.
OT Sniffer Wireshark 6LoWPAN

O Wireshark usa configurações de contexto para analisar o endereço IPv6 compactado e exibir os endereços de origem e destino IPv6 corretamente.

Para mostrar os endereços de outros prefixos em malha configurados no gateway, atualize outros IDs de contexto com esses prefixos.

Para obter o ID de contexto para um prefixo específico na malha, visualize o Thread Network Data TLV em qualquer mensagem de resposta de dados MLE. Por exemplo:

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

CoAP

Selecione CoAP na lista de protocolos e defina a Porta UDP CoAP como 61631. Isso garante que as mensagens TMF (como solicitação de endereço) sejam exibidas.

IEEE 802.15.4

Selecione IEEE 802.15.4 na lista de protocolos e verifique ou altere as seguintes configurações:

  1. Defina 802.15.4 Ethertype (em hexadecimal) como "0x809a".
  2. Defina o Security Suite como "AES-128 Encryption, 32-bit Integrity Protection".
  3. Clique no botão Editar ... próximo a Chaves de descriptografia , que é onde você adiciona a chave mestra da rede Thread para descriptografar o pacote.
    1. Clique em + para adicionar uma chave de descriptografia .
    2. Insira a chave mestra da rede Thread na coluna da chave de descriptografia .
    3. Digite "1" como o índice da chave de descriptografia .
    4. Selecione Thread hash na caixa de listagem da coluna Key hash .
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. Clique em OK para salvar a chave de descriptografia.

Fio

Selecione Thread na lista de protocolos e verifique ou altere as seguintes configurações:

  1. Digite "00000000" para o contador de sequência de threads .
  2. Desmarque Usar PAN ID como os dois primeiros octetos da chave mestra .
  3. Marque Adquirir automaticamente o contador de sequência de linhas .

Clique no botão OK para salvar as alterações de protocolo.

Algum tráfego de Thread pode ser analisado como o protocolo ZigBee. Para exibir corretamente esses dois protocolos, edite os protocolos habilitados no Wireshark:

  1. No Wireshark, vá para Analyze > Enabled Protocols .
  2. Desmarque os seguintes protocolos:
    1. LwMesh
    2. ZigBee
    3. ZigBee Green Power

Configuração Wireshark - RSSI

Para exibir RSSI no Wireshark:

  1. Vá para Preferências > Protocolos > IEEE 802.15.4 .
  2. Defina o formato FCS :
    • Se IEEE 802.15.4 TAP desativado: metadados TI CC24xx .
    • Se IEEE 802.15.4 TAP habilitado: ITU-T CRC-16 . Veja o sinalizador --tap para obter mais informações.
  3. Clique em OK para salvar e retornar ao menu Preferências .
  4. Em Preferências , selecione Aparência > Colunas .
  5. Adicione uma nova entrada:
    • Título: RSSI
    • Tipo: personalizado
    • Campos: wpan.rssi
OT Sniffer Wireshark RSSI

Opções de sniffer

Opções
-u or --uart
Valor padrão
Nenhum - deve ser fornecido se você estiver usando um dispositivo com uma conexão serial e não uma conexão de soquete.
Descrição
O sinalizador -u ou --uart seguido por um caminho de dispositivo como /dev/ttyUSB0 .
-c or --channel
Valor padrão
11
Descrição
O sinalizador -c ou --channel seguido pelo canal configurado em sua Rede de Threads, sobre o qual farejar pacotes.
--no-reset
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O sinalizador --no-reset é necessário se o seu dispositivo NCP estiver conectado ao host com a conexão USB nativa.
--crc
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O sinalizador --crc é necessário para plataformas como TI e placas Nordic Semiconductor Thread. O sinalizador recalcula o CRC para evitar um aviso de 'Bad FCS' (sequência de verificação de quadro) no Wireshark.
-b or --baudrate
Valor padrão
115200
Descrição
O sinalizador -b ou --baudrate é usado para substituir a taxa de transmissão padrão. Defina este valor para a mesma taxa de transmissão usada com sua construção NCP (recomendamos 460800).
--rssi
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O sinalizador --rssi é usado para garantir que o RSSI seja incluído na saída do pcap. Você deve usar este sinalizador se a opção de formato TI CC24xx FCS estiver habilitada no Wireshark.
--tap
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O sinalizador --tap especifica DLT_IEEE802_15_4_TAP(283) para o formato de quadro, com um pseudo-cabeçalho contendo TLVs com metadados (como FCS, RSSI, LQI, Canal). Se não for especificado, DLT_IEEE802_15_4_WITHFCS(195) seria usado por padrão com o RSSI e LQI adicionais seguindo o quadro PHY diretamente, como no formato TI CC24xx FCS. Você deve usar este sinalizador se a opção ITU-T CRC-16 estiver habilitada no Wireshark. Se essa opção não estiver habilitada no Wireshark, não use este sinalizador.

Execute o farejador

Certifique-se de usar o caminho de dispositivo específico para seu NCP e o canal para a rede Thread que você está tentando farejar.

Se seguir este guia, o nRF52840 DK deve ser conectado à máquina host pela porta de depuração, conforme descrito no Flash do nRF52840 . Para executar o Pyspinel sniffer, use o sinalizador -b para especificar a taxa de transmissão (se ela foi alterada do padrão) e omite o sinalizador --no-reset .

Por exemplo, para farejar no Canal 15 usando um dispositivo montado em /dev/ttyACM0 com RSSI incluído na saída do Wireshark:

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

Agora você deve ser capaz de ver os pacotes e protocolos relacionados a esta configuração no Wireshark:

Captura Wireshark

Consulte a referência do sniffer Spinel para obter mais informações sobre como executar o sniffer Pyspinel.

Conexão USB nativa

O uso da porta USB nRF52840 DK requer que o binário OpenThread ot-rcp seja construído com o sinalizador USB=1 :

make -f examples/Makefile-nrf52840 USB=1

Atualize o nRF52840 DK, conecte-o à máquina host pela porta USB e use o sinalizador --no-reset mas omita o sinalizador -b ao executar o sniffer:

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

Recursos

Para obter mais informações sobre como usar o Pyspinel e o Wireshark, consulte o seguinte: