LORAWAN : déploiement d’une infrastructure de test – Partie 2/2

2.3 Installation d’un nœud

Nous allons déployer un nœud en mode OTAA ; nous observerons ainsi les différentes étapes d’activation d’un nœud et pourrons traiter les paquets reçus. Afin de faciliter les tests, les éléments suivants sont sélectionnés selon une méthode triviale permettant de s’en souvenir pour les paramétrer à différents endroits. Toute ressemblance avec des faits existants ou ayant existé dans un environnement en production …

2.3.1 Configuration du nœud sur le serveur applicatif

Il est nécessaire de configurer notre nœud dans le serveur applicatif. Pour cela, sur l’interface, il suffit de cliquer sur le bouton Create Node, de remplir les champs et de valider par un clic sur Submit.

Figure 4 : Configuration d’un nœud dans le serveur applicatif.


2.3.2 Configuration du nœud sous Windows

Les logiciels de contrôle du nœud fonctionnent sous Windows. Ils nécessitent la création d’un compte afin d’être téléchargés. Ils peuvent être installés dans une machine virtuelle supportant la connexion de périphériques USB. Ils nécessitent l’installation d’un driver [FTDI].  Le logiciel WiMOD LoRaWAN EndNode Studio téléchargeable ici [STULW] permet le paramétrage du firmware LoRaWAN.

Attention
Au premier démarrage, les nœuds sont susceptibles de fonctionner avec un firmware LoRa. Auquel cas, il sera nécessaire de télécharger WiMod LoRa Studio [STULR] ainsi qu’un firmware LoRaWAN [FIRM]. Dans WiMod LR Studio, dans le menu Configuration > Device Information il est nécessaire d’utiliser le bouton Update Firmware afin de modifier le firmware présent sur le nœud. Une fois cette opération effectuée, il est possible de relancer WiMOD LoRaWAN Endnode Studio pour configurer le nœud.

Chaque nœud LoRaWan possède un identifiant unique DevEUI. La plateforme de test SK-iM880B permet la reconfiguration de ce champ. Pour cela, il est nécessaire dans le menu Extras de reconfigurer l’Operation mode du nœud en Customer mode et d’appliquer le changement avec le bouton Set Operation mode.

Une fois ce mode activé, il est possible de modifier le DevEUI du nœud avec le bouton Set Device EUI. Une fois un DevEUI choisi et configuré, il est nécessaire de repasser le nœud en mode Application en validant avec Set Operation Mode comme indiqué dans l’image 3.

Figure 5 : Reconfiguration du DevEUI.


Il est possible dans l’onglet
Network Service de configurer les différents éléments selon le mode d’activation choisi. Dans notre situation, le menu Device Activation Over The Air nous permet de définir l’ApplicationEUI et l’Application Key à utiliser ; une fois ces paramètres validés avec Set Join Parameter, le bouton Join Network déclenche l’activation. Si celle-ci s’est bien déroulée, Network Status indiquera Active (OTAA) comme sur la capture d’écran.

Pour vérifier que l’association s’est bien déroulée, il est possible aussi de consulter les logs renvoyés par les différents services Lora.

Figure 7 : Interface de configuration des paramètres LoRaWAN.


Dans l’interface web du LoraServer, on doit alors pouvoir consulter que l’activation s’est bien déroulée en cliquant sur notre nœud puis sur le bouton
Node session / ABP et en vérifiant que des clés de sessions ont bien été générées en même temps qu’une adresse DevAddr.

Le bouton Send U-Data nous permet dès lors d’envoyer des données qui seront chiffrées au moyen des clés de session. En adaptant le script Monitor.py, il est possible de s’abonner à la file de notre nœud pour s’assurer que les données ont bien été reçues et déchiffrées.

3. Capture et analyse de trafic

Cette infrastructure permet la capture et l’analyse de trafic LORAWAN. Les messages reçus par la passerelle sont stockés dans des files MQTT auxquelles il est possible de s’abonner avec le script Monitor.py.

Il est possible de se constituer une boîte à outils LoRaWAN avec les éléments suivants :

  • Lora-wan-parser [LWP] : ce programme permet de générer et valider des requêtes LoRaWAN et s’avère ainsi être un outil de débogage lors du développement d’autres outils.
  • Monitor.py : ce script surveille les files MQTT du serveur LoRa afin d’afficher les paquets interceptés par notre passerelle. Il permet l’extraction des différents paramètres nécessaires pour utiliser les autres outils.
  • LoRaskeys : ce programme réimplémente la génération des clés de sessions AppSKey et NwkSKey à partir d’un aléa « DNonce » connu et de la réponse Join-Request reçue qui contient un aléa « ANonce ».
  • Loracrypt : ce programme permet de réaliser des expérimentations sur la dérivation des blocs utilisés pour chiffrer les données envoyées.

Les trois derniers outils sont récupérables sur le [Github].

3.1 Génération des clés NwkSKey et AppSKey

Le script Monitor.py surveille les paquets échangés par la passerelle LoRa et le serveur applicatif afin d’en afficher les principaux champs. Dans le cas d’une activation over the air, une requête Join-Request capturée permettra de connaître les informations suivantes : AppEUI, DevEUI ainsi que l’aléa « DNonce ». Ce dernier est utilisé pour générer les clés de sessions.

Capture de paquets LoRaWAN.

La capture d’une réponse Join-Accept permettra d’en déchiffrer le contenu à partir d’une AppKey connue et d’en extraire en cas de succès un autre aléa « ANonce » utilisé pour générer les clés de session. Ce message contient par ailleurs la valeur de l’adresse « DevAddr » attribuée au nœud.

En capturant un échange d’activation Join-Request et Join-Accept, il devient possible de générer les clés NwkSKeys et AppSKeys à partir de l’aléa « DNonce » et du message Join-Accept dont est extrait l’aléa « ANonce ».

Il est possible par la suite en capturant les messages dont l’adresse « DevAddr » correspond à celle de la réponse Join-Accept précédente de les valider au moyen du programme lora-wan-parser. Il est nécessaire pour cela de spécifier les clés NwkSKey et AppSKey. En cas de succès, les données seront déchiffrées.

Il est ainsi possible pour un attaquant écoutant du trafic LoRaWAN de tenter de bruteforcer des clés de session. C’est réalisable en premier lieu si elles ont été choisies de façon non aléatoire par exemple lors d’une activation ABP. Par ailleurs, si un échange par activation OTAA est capturé, il devient possible de bruteforcer l’AppKey. En cas de succès, il est possible de dériver les clés de sessions utilisées.

La passerelle que nous avons testée dans Paris pour une durée de huit jours nous a permis de capturer du trafic LoRaWAN au sein duquel une douzaine de flux différents ont été identifiés. Cependant, sur l’ensemble du trafic capturé, aucune requête Join-Request n’a été interceptée. Par ailleurs, aucun des paquets reçus n’a pu être validé au cours des tests avec des clés de session triviales.

3.2 Cryptanalyse de la séquence des blocs de chiffrement

Parmi les vulnérabilités évoquées dans les publications en début d’article, l’usage non optimal d’AES a été souligné. En effet, le chiffrement utilise une opération Xor associée à une séquence de blocs de chiffrement qui peut être générée à partir de la clé de session ainsi que des valeurs connues de DevAddr et de sequenceNumber. Ce dernier est un entier sur 16 bits. Lorsqu’il boucle, la séquence de blocs de chiffrement est réutilisée.

Le programme Loracrypt permet de chiffrer un message à partir d’une AppSKey, du DevAddr et du sequenceCounter (Fcnt) qui sont connus. Il permet de visualiser la génération de la séquence des blocs de chiffrement.

Chiffrement de deux messages similaires pour une clé, un devAddr et un sequenceCounter connus.

Dès lors que des paquets chiffrés avec la même clé seront capturés, si les clés de session ne sont pas réinitialisées, selon la nature des données et leur variabilité, il sera possible de procéder à une opération xor bloc par bloc afin d’extraire des éléments de la clé « courante » de la séquence de chiffrement. Ces informations agrégées dans le temps peuvent faciliter une cryptanalyse.

Lors de nos tests, il a été possible de capturer des envois de données assez réguliers, de l’ordre d’un paquet toutes les trente secondes. À supposer que ce périphérique ne soit pas réinitialisé, il faudrait environ 22 jours avant que le sequenceCounter boucle. C’est le temps requis pour commencer à envisager une attaque par cryptanalyse.

Celle-ci ne serait par ailleurs pas garantie selon la nature des données encodées : texte ou binaire. Il serait nécessaire de disposer de plus d’informations sur le périphérique émettant ces paquets, éventuellement en l’identifiant par son DevEUI si on a pu le capturer.

Conclusion

Les moyens techniques mis en place dans notre solution permettent la capture de paquets LoRaWAN émis par nos nœuds, mais aussi par d’autres nœuds dans l’environnement. Au cours des tests réalisés, il a été montré qu’il était possible de réaliser des attaques par bruteforce sur les différentes clés utilisées.

La sécurité LoRaWAN repose en partie sur la méthodologie implémentée dans le choix des clés. En effet, si certaines des clés sont facilement devinables lors d’une activation ABP, elles pourront faire l’objet de tentatives de bruteforce sur les paquets capturés par un attaquant. L’activation OTAA permet de s’assurer que les clés de sessions seront aléatoires. Cependant, la capture éventuelle de Join-Request et Join-Accept permet aussi d’attaquer la clé AppKey utilisée pour générer les clés de session. Il est donc nécessaire de s’assurer que ces clés sont générées de façon aléatoire.

Cependant, au-delà de ces vulnérabilités facilement évitables, l’implémentation correcte d’un environnement LoRaWAN nécessite le respect des recommandations quant au renouvellement fréquent des clés de session et à la non-réutilisation de valeurs aléatoires utilisées dans la génération des clés. Dans le cas contraire, la nature et la quantité des données échangées ainsi que la connaissance de leur structure par un attaquant, qui aurait procédé à l’analyse d’un équipement semblable, peuvent mener à la compromission du trafic via une cryptanalyse de celui-ci étalée sur une période se comptant en semaines.

Remerciements

L’auteur remercie la société LEXFO pour les moyens mis à disposition ainsi que pour les conseils, l’aide apportée et la relecture.

Références

[MWR] LoRa Security : https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-LoRa-security-guide-1.2-2016-03-22.pdf
[REN] LoRaWAN vulnerabilities : http://hardwear.io/renaud-lifchitz-speaker/
[ORAN] Déploiement Orange : https://www.orange.com/fr/Engagements/Responsabilite/Environnement/Changement-climatique/Folder/Orange-et-la-COP/Folder/LoRa
[BOUY] Réseau Bouygues : http://www.objetconnecte.com/tout-savoir-reseau-lora-bouygues/
[01net] LoRaWan vulnérable : http://www.01net.com/actualites/objets-connectes-les-reseaux-lorawan-vulnerables-aux-attaques-de-hackers-1042538.html
[LORA] LoRaWAN Specification : https://www.lora-alliance.org/portals/0/specs/LoRaWAN%20Specification%201R0.pdf
[STH] Implémentation Semtech : https://github.com/Lora-net/
[MQTT] MQ Telemetry Transport : https://en.wikipedia.org/wiki/MQTT
[TTN] TheThingsNetwork : https://www.thethingsnetwork.org
[LIBLG] Lib Lora Gateway : https://github.com/TheThingsNetwork/lora_gateway
[Gate] Concentrateur LoRa : https://wireless-solutions.de/products/long-range-radio/ic880a.html
[Node] StarterKit LoRaWan : http://webshop.imst.de/sk-im880b-starter-kit-for-im880b-l.html
[LWP] LoraWanParser : https://github.com/JiapengLi/lorawan-parser
[FTDI] Drivers FTDI : http://www.ftdichip.com/Drivers/CDM/CDM21224_Setup.zip
[STULR] WiMod LoRa Studio : http://www.wireless-solutions.de/images/stories/downloads/Radio%20Modules/iM880B/WiMOD_LR/WiMOD_LR_Studio_V1_18_4.zip
[FIRM] LoRaWAN Firmware : http://www.wireless-solutions.de/images/stories/downloads/Radio%20Modules/iM880B/WiMOD_LoRaWAN/WiMOD_LoRaWAN_EndNode_Firmware_V1_17.zip
[STULW] WiMod LoRaWAN Studio : http://www.wireless-solutions.de/images/stories/downloads/Radio%20Modules/iM880B/WiMOD_LoRaWAN/WiMOD_LoRaWAN_EndNode_Studio_V0_33_0.zip
[APPS] LoRaServer : https://docs.loraserver.io/loraserver/
[GitHub] Attacking LoraWan : http://github.com/AttackingLoraWan

Sébastien ROY

Retrouvez cet article (et bien d’autres) dans MISC Hors-Série n°15, disponible sur la boutique et sur la plateforme de lecture en ligne Connect !