Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Sécurisation de l’Internet des objets

Définitions et présentation

Dans le domaine de l’informatique embarquée, les processeurs ARM (Advanced Risc Machine) basés sur des architectures externes de type RISC relativement plus simples que les autres familles de processeurs, existant en 32 bits ou 64 bits, apportent une réponse à de nombreux problèmes domotiques ou de téléphonie mobile. En effet, ils consomment moins d’électricité et permettent d’équiper la plupart des appareils téléphoniques Android, iOS, Symbian ou autres. Or, ce genre d’architecture a vu alors l’essor d’un type de machine appelé « Raspberry Pi » sous forme d’un micro-ordinateur monocarte à base de processeur ARM. Cela a favorisé le développement de la programmation informatique permettant ainsi de résoudre certains problèmes domotiques et/ou robotiques. Cette machine, pas plus grande qu’une carte de crédit, est construite à partir de variantes du système d’exploitation GNU/Linux Debian et des logiciels compatibles. Il s’agit donc d’une alternative légère des distributions pouvant se révéler incomplètes ou, au contraire, trop volumineuses et pas assez ciblées. Ce genre de développement a permis alors l’essor des objets connectés, que l’on connaît aujourd’hui sous l’appellation d’IoT (Internet of Things), souvent assimilé comme étant l’évolution logique d’Internet (noté d’ailleurs Web 3.0).

1. Qu’est-ce que l’IoT ?

L’Internet des objets est probablement responsable de l’accroissement exponentiel du volume de données générées sur le réseau public que l’on a alors appelé le "big data". Mais on est en droit de se demander ce qu’est vraiment l’IoT et ce que cela apporte, en termes de service. Nous pouvons définir l’Internet des objets comme un vaste réseau de réseaux, permettant d’identifier sans ambiguïté l’ensemble des entités numériques et des appareils physiques, grâce à des systèmes d’identification électroniques normalisés sans fil, dans le but de récupérer...

Protocole de distribution

1. Le protocole MQTT

Le protocole Message Queuing Telemetry Transport (autrement nommé MQTT), est un protocole réseau TCP/IP que l’on peut construire facilement et qui se prête parfaitement à l’envoi et à la réception de messages en flux continu (aussi appelé streaming). Il a été mis au point en 1999 et s’est, depuis lors, largement déployé dans le monde de l’industrie et des applications domestiques. En 2011, les firmes IBM et Eurotech annoncent leur participation à un projet commun. C’est à cette occasion que le cœur du projet MQTT est intégré au développement du projet Eclipse Paho, une plateforme open source de messagerie. En 2014, le protocole est ensuite accepté comme standard OASIS et obtient des ports d’écoute auprès de l’IANA (l’organisme Internet Assigned Numbers Authority chargé de réserver les ports de services des applications. Les ports TCP/1883 et UDP/1883 ainsi que TCP/8883 et UDP/8883 deviennent alors les ports de services du protocole MQTT et MQTTS respectivement. La spécification complète de MQTT est accessible sur le site de l’OASIS : https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.pdf.

L’architecture du protocole est très simple. Elle est fondée sur un serveur MQTT, également appelé "broker" et deux catégories de clients :

  • les producteurs d’information (appelés les producers)

  • les consommateurs d’information (appelés les consumers)

Le broker sert à relayer sélectivement les données circulant entre producteurs et consommateurs. Chaque message transmis par un producteur est labellisé avec un sujet (appelé topic). Les consommateurs choisissent alors de s’y abonner ou non et peuvent ainsi choisir un ou plusieurs thèmes et ne recevoir alors que les messages sélectionnés. Nous pouvons schématiser cette chaîne logique par le graphe suivant :

Schéma expliquant le protocole MQTT

Les sujets souscrits se présentent sous forme d’arborescences, comme pour la plupart des systèmes de fichiers.

Exemple

Arborescence de sujets


/topic1/subtopic1/..., /topic1/subtopic2/...
 

Il est alors possible de s’abonner à n’importe quelle partie de l’arborescence...

Évolution de la cryptographie

En effet, nous l’avons vu précédemment, les protocoles utilisés pour la transmission d’informations, ainsi que les modes d’utilisation des objets eux-mêmes, font qu’il est nécessaire de prendre de nombreuses précautions lorsque l’on active ainsi un réseau d’objets connectés. Mais voyons plus en détail certaines des infections pouvant survenir lors de l’interconnexion de ces réseaux LoRa.

1. Infections de l’IoT

a. Fonctionnement d’un botnet

En raison de tout ce qui a été vu dans la section précédente, nous pouvons affirmer que les objets connectés peuvent être effectivement infectés. Même si l’on imagine mal une caméra ou un t-shirt connecté être victime de virus, il faut pourtant s’en persuader et prendre alors les précautions nécessaires. Nous allons donc détailler le fonctionnement de quelques-uns des plus célèbres botnets. Mais avant d’aller plus loin peut-être serait-il judicieux d’expliquer ce qu’est un botnet et comment cela fonctionne ? Un botnet (venant de la contraction de robot et réseau exprimés en anglais) est un réseau de robots informatiques, de programmes connectés à Internet communiquant entre eux au travers d’autres programmes similaires afin d’exécuter des tâches bien précises.

Pour la petite histoire, le terme botnet désignait les réseaux de robots IRC. Puis, le sens a été étendu aux réseaux de machines zombies, utilisées pour des usages malveillants : envoi de spam, virus informatiques, ou attaques par déni de service (abrégé en DDoS).

Les premières dérives ont été constatées sur des réseaux IRC où des botnets IRC ont été utilisés pour prendre le contrôle du canal d’échange. Aujourd’hui, ce genre de pratique s’est généralisée à n’importe quel type de machines zombies. Nous pouvons citer PrettyPark, ciblant les environnements Windows 32 bits, qui s’est alors développé avec d’autres processus tels qu’Agobot ou SpyBot. Ainsi, toute...

Mise en œuvre d’objets connectés

Le plus souvent, les objets connectés manipulent une grande quantité d’informations. Un des moyens de s’assurer de leur qualité et de leur intégrité consiste à les visualiser graphiquement, qu’il s’agisse de données issues de plateforme Arduino, Raspberry Pi ou autre ESP, on peut fabriquer de beaux tableaux de bord en s’appuyant sur le triplet :

  • pile Tick

  • base de données InfluxDB

  • présentation visuelle Grafana

Pour disposer de données, vous pouvez utiliser, soit un ou plusieurs objets connectés, soit utiliser l’un des capteurs de pression, de température ou d’hygrométrie permettant de remonter suffisamment d’informations pour être traitées ultérieurement. L’objectif ici n’est pas d’expliquer comment mettre en place ce genre de plateforme, mais de démontrer à quel point l’assemblage de plusieurs outils des dépôts officiels peut servir à sécuriser la donnée.

Lorsque le capteur est connecté, vous pouvez utiliser la commande lsmod afin de vérifier les différents modules connectés à la plateforme Raspberry Pi. Si vous disposez d’un capteur de type BMExxx, vous pouvez également implémenter l’utilitaire i2ctools permettant de vérifier la présence dudit capteur au format ligne de commande. Cela facilitera alors le scripting des différentes commandes :


$ sudo i2cdetect -y 1
 

Vous devriez alors visualiser l’affichage ci-dessous indiquant que sur le port I2C, en position 76, on détecte bien l’équipement :

Affichage de d'une mise en œuvre d’objets connectés

En termes de sécurité, si vous souhaitez éviter d’utiliser l’utilitaire i2tools en tant que root, vous pouvez ajouter l’utilisateur pi au groupe i2c :


$ sudo adduser pi i2c
 

Vous pouvez alors installer le module Python RPi.bm (accessible depuis GitHub à l’adresse suivante https://github.com/rm-hull/bme280) :


$ sudo pip install RPi.bm280
 

Il est alors possible d’écrire le script Python ci-dessous afin de mettre en place l’affichage des métriques récupérées :


import smbus2 
import bme280 
 
port = 1 
address = 0x76 
bus = smbus2.SMBus(port) ...