Un projet IOT open-source développé comme base pour des programmes de room control.
https://gitlab.com/CyrilGendarme/iot-room-control-securisation
Description du projet
Vous pouvez trouver un schéma technique du projet, un diagramme de la logique des scripts et une description exhaustive du projet dans le dossier “Description du projet”. Voici une liste des éléments mis en place dans le but de sécuriser une pièce et les biens à l’intérieur:
- Un système d’authentification double nécessitant la connaissance d’un mot de passe (la connexion se fait via un formulaire sur un site web) et la possession d’un badge RFID. La réponse à la tentative d’authentification sera affichée sur un écran LCD. Appuyer sur un bouton permet également de se déconnecter.
- Un capteur d’angle à placer sur une porte pour détecter quand elle est ouverte. De plus, un capteur de son (avec sensibilité préalablement calibrée) est utilisé pour déterminer s’il y a de l’activité dans la pièce. Ces deux éléments sont connectés à un ESP8266.
- Un “capteur de pression” (dans ce projet, c’est un bouton) et un capteur de distance, qui assurent une double sécurité pour un objet spécifique. En pratique, l’objet à protéger sera soit placé directement sur les capteurs, soit, s’il est trop petit, sur une petite plateforme. Ces deux capteurs sont connectés à un ESP32, qui communique via LoRa avec le Raspberry Pi (RPI).
- Une LED et un buzzer, qui sont activés lorsqu’une alarme est déclenchée. (Il s’agit d’un prototype ; le produit final utiliserait probablement une sirène stroboscopique à la place.)
- Lorsqu’une intrusion se produit, une photo de la pièce sécurisée et une image satellite (de l’extérieur) sont envoyées dans une salle Webex. Un SMS est envoyé à un numéro de référence, et un e-mail est envoyé à une adresse pré-spécifiée. (Il serait également possible de contacter immédiatement la police avec un message automatique contenant l’adresse du site. Cependant, cela n’est pas mis en œuvre dans ce prototype pour des raisons évidentes.)
- En pratique, un état (fermé, intrusion, personne authentifiée) est associé à la pièce en permanence. Cet état est visible sur un tableau de bord administratif, qui se compose d’une carte affichant les différents sites sécurisés, chacun associé à une couleur. En cas d’intrusion, l’administrateur a la possibilité de désactiver l’alarme. Ce tableau de bord permet également de consulter l’historique des changements d’état pour le site (stocké dans une base de données). Le client dispose également d’un tableau de bord (limité à son site) qui lui permet de se connecter (en utilisant le badge RFID pour entrer le mot de passe) et de désactiver l’alarme si nécessaire.
- Des vérifications régulières de l’état du RPI seront effectuées à l’aide de l’API Shodan, qui vérifiera l’état du port 80 sur l’adresse IP correspondante. En cas d’échec, l’administrateur sera notifié sur son tableau de bord.
- Une VM privée sera utilisée comme courtier, et un courtier public sera utilisé pour transmettre des informations sur les changements d’état du site à un administrateur (utilisé sur leur tableau de bord et avec la base de données) et pour accéder aux données de connexion pour la base de données. Les abonnés seront des nœuds Node-RED qui exécutent des scripts sur des VM/RPI (composants du protocole d’intrusion, réponse aux tentatives de connexion, etc.).
La solution proposée vise à englober des scénarios où le plus haut niveau de sécurité est requis, et inclut donc tous les éléments ci-dessus. Cependant, chacun de ces composants peut être considéré comme un “module” pouvant être utilisé en fonction de besoins spécifiques. Pour cela, les scripts Python seront aussi petits que possible et assemblés ensemble par l’exécution de plusieurs threads créés à partir des scripts situés dans un certain répertoire du système de fichiers.
Technologies
- Linux SysAdmin : 2 VM’s Ubuntu et un Raspeberry Pi (gestion dynamique des IP’s, sécurisation, installation de divers outils from source)
- Microcontrollers : ESP32 and ESP8266 (programmation effectuée par l’intermédiaire de l’IDE Arduino)
- MongoDB database
- MQTT protocol (authentication, topics and securisation)
- Cryptographie : Certificats asymétrique créés avec openssl
- Protocole LoRaWan
- Python, utilisé comme language de scripting
- Node-Red
- Divers API’s interfacées : Twilio, Teams Webex, NASA’s Earth, Shodan
