Autopsie d'une trame ZigBee

Introduction

Cette page explique comment une trame ZigBee est construite. L'exemple utilisé sur cette page est une trame écoutée sur un réseau Xiaomi domotique composé d'une passerelle Xiaomi GateWay version 2 et d'un bouton Aqara sans fil :

Bouton Xiaomi Aquara utilisé pour disséquer une trame ZigBee

Le réseau a été espionné avec un AT86RF233 pour les trames brutes cryptées et une clé USB NXP OM15020 pour les trames décryptées comme expliqué sur cette page.

La clé de chiffrage (réseau) a été préalablement interceptée sur le réseau :

Network key: : AD 8E BB C4 F9 6A E7 00 05 06 D3 FC D1 62 7F B8

Trames brutes

Le matériel utilisé permet d'écouter les trames cryptées et décryptée. Voici la trame cryptée interceptée par l'AT86RF233. La trame se compose de 53 octets :

Trame brute cryptée : 61 88 64 47 24 00 00 8A 5C 48 02 00 00 8A 5C 1E 5D 28 E1 00 00 00 01 3C E8 01 00 8D 15 00 01 EA 59 DE 1F 96 0E EA 8A EE 18 5A 11 89 30 96 41 4E 05 A2 43 8A FB

Voici maintenant la même trame après déchiffrage (même longueur de 53 octets) :

Trame brute décryptée : 61 88 64 47 24 00 00 8A 5C 48 02 00 00 8A 5C 1E 5D 28 E1 00 00 00 01 3C E8 01 00 8D 15 00 01 00 01 12 00 04 01 01 62 18 C3 0A 55 00 21 01 00 AC 4C 76 AF 8A FB

Structure d'une trame

Cette trame est composée de 4 couches (MAC, NWK, APS et ZCL) qui sont encapsulée selon le schéma suivant :

Vue d'ensemble de l'encapsulation d'une trame ZigBee

Sur la figure suivante, les couches ont été séparées pour plus de clareté :

Schéma des couches d'une trame ZigBee (MAC, NWK, APS et ZCL)

En s'appuyant sur les diagrammes ci-dessus, il est possible de décomposer les 53 octets de la trames brute selon cette répartition :

MAC header

L'en-tête MAC (Medium access control / Contrôle d'accès au support) est composée de 9 octets (61 88 64 47 24 00 00 8A 5C) détaillés ci-dessous :


Frame Control: 0x8861
    ···· ···· ···· ·001 = Frame Type: [0x1] Data
    ···· ···· ···· 0··· = Security Enabled: [0x0] No
    ···· ···· ···0 ···· = Frame Pending: [0x0] No
    ···· ···· ··1· ···· = Acknowledgement Request: [0x1] Yes
    ···· ···· ·1·· ···· = Intra-PAN: [0x1] Yes
    ···· ··00 0··· ···· = Reserved: 0x0
    ···· 10·· ···· ···· = Destination Addr Mode: [0x2] 16-bit Short Address
    ··00 ···· ···· ···· = Reserved: 0x0
    10·· ···· ···· ···· = Source Addr Mode: [0x2] 16-bit Short Address
Sequence Number: 0x64 (100)
Destination PAN ID: 0x2447
Destination Address: 0x0000
Source Address: 0x5C8A

MAC payload

Les données utiles de la couche MAC sont copomposées de 42 octets qui contiennent la couche réseau :

NWK header

L'en-tête NWK (de la couche réseau) ets composée de 8 octets (48 02 00 00 8A 5C 1E 5D) détaillés ci-dessous :


NWK Header: 0x5D1E5C8A00000248
    Frame Control: 0x0248
        ···· ···· ···· ··00 = Frame Type: [0x0] Data
        ···· ···· ··00 10·· = Protocol Version: [0x2] Zigbee Pro
        ···· ···· 01·· ···· = Route Discovery: [0x1] Enabled
        ···· ···0 ···· ···· = Multicast Flag: [0x0] Unicast or Broadcast
        ···· ··1· ···· ···· = Security Enabled: [0x1] Yes
        ···· ·0·· ···· ···· = Source Route Included: [0x0] No
        ···· 0··· ···· ···· = Destination IEEE Address Included: [0x0] No
        ···0 ···· ···· ···· = Source IEEE Address Included: [0x0] No
        ··0· ···· ···· ···· = End Device Initiator: [0x0] No
        00·· ···· ···· ···· = Reserved: 0x0
    Destination Address: 0x0000
    Source Address: 0x5C8A
    Radius: 0x1E
    Sequence Number: 0x5D (93)

NWK aux header

L'en-tête réseau auxilière (ou l'en-tête de sécurité) est composée de 14 octets (28 (ou 2D) E1 00 00 00 01 3C E8 01 00 8D 15 00 01) détaillés ci-dessous :


NWK Aux Header: (14 bytes)
    Network Security Control: 0x28 (ou 0x2D)
        ···· ·000 = Network Security Level: [0x0] None (devrait être 101)
        ···0 1··· = Key NWK ID: [0x1] Network Key
        ··1· ···· = Extended Nonce: [0x1] Yes
        00·· ···· = Reserved: 0x0
    NWK Frame Counter: 0xE1 (225)
    Source Address: 00:15:8D:00:01:E8:3C:01
    NWK Key Sequence Number: 0x01 (1)

Notons que les 3 bits network security level ont été écrasés avant transmission et devraient être remplacés par le niveau de sécurité défini dans l'attribut nwkSecurityLevel du NIB (page 382 de la spécification ZigBee). Dans la trame présentée ici, le niveau de sécurité devrait être 0x05 (0b101 ou ENC-MIC-32) d'après la page 425de la spécification ZigBee).

NWK payload

Les données utiles de la couche réseau sont composées de 16 octets (00 01 12 00 04 01 01 62 18 C3 0A 55 00 21 01 00) qui encapsulent la couche APS (Application support sub-layer) :

APS header


APS Header: 0x6201010400120100
    Frame Control: 0x00
        ···· ··00 = Frame Type: [0x0] Data
        ···· 00·· = Delivery Mode: [0x0] Normal Unicast Delivery
        ···0 ···· = Acknowledgement Format: 0x0
            Format: [0x0] Data Frame
        ··0· ···· = Security Enabled: [0x0] No
        ·0·· ···· = Acknowledgement Request: 0x0
            Request: [0x0] No
        0··· ···· = Extended Header Present: [0x0] No
    Destination Endpoint: 0x01
    Cluster ID: [0x0012] General: Multistate Input (Basic)
    Profile ID: [0x0104] Zigbee Home Automation
    Source Endpoint: 0x01
    APS Counter: 0x62 (98)

APS payload

Les données utiles de la couche APS sont composée de 8 octets (18 C3 0A 55 00 21 01 00):

ZCL header

ZCL Header: 0x0AC318
    Frame Control: 0x18
        ···· ··00 = Frame Type: [0x0] Command Acts Across the Entire Profile
        ···· ·0·· = Manufacturer Specific: [0x0] Manufacturer Code Not Included in the ZCL Frame
        ···· 1··· = Direction: [0x1] From Server to Client
        ···1 ···· = Disable Default Response: [0x1] Yes
        000· ···· = Reserved: 0x0
    Transaction Sequence Number: 195
    Command ID: 0x0A
        General Command Frame: [0x0A] Report Attributes
ZCL payload
ZCL Payload: 0x0001210055
    Attributes 0: 0x0001210055
        Attribute ID: [0x0055] Present Value
        Data Type: [0x21] Unsigned 16-bit Integer
        Data: 0x0001
            Value: [1] Yes

NWK MIC

Le code d'intégrité du message (message integrity code / MIC) est utilisé pour vérifier l'intégrité de la trame dans le processus de sécurisation des données :


NWK MIC: 0xAC4C76AF

MAC Footer


MAC Footer: 0xFB8A
    Frame Check Sequence: 0xFB8A

Téléchargement


Dernière mise à jour : 19/02/2021