O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Packet Sniffing com Pyspinel

Os Pyspinel Ligações de ferramentas do tubo aspirador para um segmento PCN ou dispositivo de RCP e converte-lo em um tubo aspirador de pacote promíscuo, gerando uma corrente de pcap (captura de pacotes) para ser guardado ou canalizada directamente para 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 (Mesh Link Establishment), UDP e CoAP.

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

Para usar o plug-in do Wireshark extcap para packet sniffing, consulte packet sniffing 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
  • Um dispositivo OpenThread brilhou com um ot-ncp-ftd ou ot-rcp compilação.

Programas:

  • Python 3 para a execução de Pyspinel
  • Wireshark 2.4.1 ou mais recente para o segmento de suporte protocolo

Instalação

Configure o ambiente sniffer

Clone e instale o Pyspinel e as dependências:

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

Alternativamente, configurar o ambiente, instalando o pyspinel pacote. Note-se que este pacote usa a liberação v1.0.0a3 Pyspinel e não o mais recente principal Pyspinel.

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ê começa o diálogo perguntando "deve não-superusuários ser capaz de capturar pacotes?", Selecione Sim, em seguida, adicione os wireshark permissões de usuário e arquivo de atualização:

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

Mac OS

Baixe e instale Wireshark para MacOS.

Construir o farejador

Desenvolver e piscar um dispositivo NCP para servir como o tubo aspirador, utilizando o ot-rcp saída binária.

Nórdico nRF52840

Para configurar o exemplo nRF52840 nórdico para uso como um farejador:

  1. Clone OpenThread / ot-nrf528xx e configurar o ambiente de compilação:
    git clone https://github.com/openthread/ot-nrf528xx --recursive
    ./script/bootstrap
    
  2. Definir taxa de transmissão como 460800. Encontre a linha #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 em src/nrf52840/transport-config.h , e substituí-lo com #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 .
  3. Construir o binário:
    ./script/build nrf52840 UART_trans
    
  4. Converter o ot-rcp saída binária em hexadecimal:
    arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
    
  5. Piscar o ot-rcp.hex arquivo para a placa nRF52840 conforme detalhado no flash do nRF52840 .
  6. Desativar Mass Storage Device (MSD) no nRF52840 para evitar problemas com a corrupção de dados ou cai quando usando 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 o OpenThread CLI:
    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. A malha prefixo local é listado como IPv6: MeshLocalPrefix semelhante ao wpanctl .

Canal

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

  1. Usando o OpenThread CLI:
    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 é listado como NCP: Canal semelhante ao wpanctl .

Chave de rede

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

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

A Thread Network Key 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 Preferências ... no Wireshark e expanda a seção Protocolos.

6LoWPAN

Selecione 6LoWPAN da lista de protocolos e verificar ou alterar as seguintes definições:

  1. Desmarque Derive ID de acordo com RFC 4944.
  2. Atualização Contexto 0 com a malha de prefixo local para a rede alvo Thread.
OT Sniffer Wireshark 6LoWPAN

O Wireshark usa configurações de contexto para analisar o endereço IPv6 compactado e exibir a origem e os endereços de 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 da lista de protocolos e definir Coap porta UDP para 61631. Isso garante mensagens TMF (como SOLICIT endereço) são exibidos.

IEEE 802.15.4

Selecione IEEE 802.15.4 da lista de protocolos e verificar ou alterar as seguintes definições:

  1. Definir 802.15.4 Ethertype (em hex) para "0x809a".
  2. Defina o Security Suite para "AES-128 criptografia, proteção de Integridade de 32 bits".
  3. Clique no botão Editar ... ao lado de descriptografia Chaves, que é onde você adicionar à rede Tópico Master Key para o pacote de descriptografia.
    1. Clique em + para adicionar uma chave de decodificação.
    2. Entrar na rede da linha Master Key na coluna Chave de decodificação.
    3. Digite "1" como o índice de chave descriptografia.
    4. Escolha um hash de rosca na caixa de listagem coluna de hash Key.
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. Clique em OK para salvar a chave de decodificação.

Fio

Selecione Tópico da lista de protocolos e verificar ou alterar as seguintes definições:

  1. Enter "00000000" para o contador seqüência Thread.
  2. Desmarque a opção Use PAN ID como o primeiro dois octetos de chave mestra.
  3. Verificar automaticamente adquirir Tópico contador de sequência.

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 Analisar> Protocolos habilitados.
  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 de FCS:
    • Se IEEE 802.15.4 TAP desativado: TI CC24xx metadados.
    • Se IEEE 802.15.4 TAP habilitado: ITU-T CRC-16. Veja a --tap bandeira para mais informações.
  3. Clique em OK para salvar e voltar 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 -u ou --uart bandeira seguido por um caminho de dispositivo, tais como /dev/ttyUSB0 .
-c or --channel
Valor padrão
11
Descrição
A -c ou --channel bandeira seguido pelo canal configurado no seu segmento de rede, sobre a qual os pacotes Sniff.
--no-reset
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --no-reset bandeira é necessário se o dispositivo NCP está ligado para o anfitrião com a conexão USB nativa.
--crc
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --crc flag é necessário para plataformas como TI e Nordic Semiconductor Placas de Tópicos. 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 -b ou --baudrate bandeira é usada para substituir a taxa de transmissão padrão. Definir este valor para a mesma taxa de transmissão utilizado com a sua construção NCP (recomendamos 460.800).
--rssi
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --rssi bandeira é usado para assegurar o RSSI está incluído na saída pcap. Você deve usar esse sinalizador se o formato de TI CC24xx FCS opção é ativada no Wireshark.
--tap
Valor padrão
Este sinalizador substitui o comportamento padrão.
Descrição
O --tap especifica bandeira DLT_IEEE802_15_4_TAP(283) para o formato de trama, com um pseudo-cabeçalho contendo TLVs com metadados (tais como FCS, RSSI, LQI, Channel). Se não for especificado, DLT_IEEE802_15_4_WITHFCS(195) seria utilizada como padrão com o RSSI adicional e LQI seguinte quadro PHY directamente, como no formato de TI CC24xx FCS. Você deve usar esse sinalizador se o ITU-T CRC-16 opção é ativada 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, após esta guia, a nRF52840 DK deve ser ligado a máquina hospedeira pela porta de depuração, tal como descrito em flash do nRF52840 . Para executar o Pyspinel sniffer, utilize o -b flag para especificar a taxa de transmissão (se foi alterado a partir do padrão) e omitir o --no-reset bandeira.

Por exemplo, para farejar no canal 15 por meio de um dispositivo montado em /dev/ttyACM0 com RSSI incluídos na saída 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

Veja a referência Spinel sniffer para mais informações sobre a execução do Pyspinel sniffer.

Conexão USB nativa

Usando a porta USB nRF52840 DK exige o OpenThread ot-rcp binário a ser construído com USB_trans :

./script/build nrf52840 USB_trans

Piscar o nRF52840 DK, conecte-o ao computador host pela porta USB , então use o --no-reset bandeira, mas omitir o -b flag 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: