Cyrus - Automated CYbeR secUrity teSting for Cyber Physical System

Cyrus - Automated CYbeR secUrity teSting for Cyber Physical System

Cet article de blog est le second d’une série d’articles consacrés au projet Cyrus et à la plateforme du même nom. Cet article se concentre sur l’architecture actuelle de la plateforme Cyrus et sur comment elle peut être utilisée afin de vérifier le niveau de protection d’un système ou d’un produit. Le premier article est disponible ici : https://www.cetic.be/security-for-cps.

Date: 18 octobre 2024

Expertises:

Ingénierie des systèmes IT complexes 

Domaine: Secteur numérique 

Thème d'innovation: Cyber Sécurité 

A propos du projet: CYRUS 

Architecture

La plateforme Cyrus est le compagnon du Hacker Éthique qui permet de rassembler et de stocker toutes les informations sur le SUT (System Under Test), le système qu’on veut tester, pendant la durée du processus de test Cyrus.

Composants de la plateforme Cyrus

Une partie importante du processus de test Cyrus est faite à l’aide d’outils communautaires externes :

NodeRED, une plateforme de développement orientée flux sur laquelle sont exécutés des flux, flows, (scripts) qui scannent les SUT et envoient les résultats à la plateforme Cyrus. Créer des flux est assez facile grâce aux flows existants et peuvent être facilement partagés. Site https://nodered.org/

Greenbone/OpenVAS, un scanner de vulnérabilités pour les systèmes physiques que les testeurs utilisent pour scanner le SUT et dont ils importent les vulnérabilités proposées par Greenbone/OpenVAS dans Cyrus. Site https://www.greenbone.net/

Kiwi TCMS (Test Control and Monitoring System), un système de gestion des cas de test, fort utilisé pour la gestion de tests de tout type (fonctionnel, performance, …), dans lequel les testeurs créent et exécutent les tests de pénétration sur le SUT pour confirmer ou infirmer la présence des vulnérabilités. Ils importent ensuite les résultats des tests dans Cyrus. Site https://kiwitcms.org/

Robot Framework, un outil d’automatisation des tests pour exécuter des tests utilisant un format de fichier spécifique décrivant des cas de test et que l’on peut lancer depuis Kiwi TCMS. Site https://robotframework.org/

Jasper Report, un outil de génération de rapports, permettant d’extraire les informations collectées pendant le processus de test et de personnaliser le rapport sans demander de la programmation. Site https://www.jaspersoft.com/

Enfin, un autre outil externe libre est utilisé pour sécuriser le serveur Cyrus API :

Keycloack (serveur d’authentification open source). Site https://www.keycloak.org/


Les composants suivants ont été développés pour la plateforme Cyrus :

  • Cyrus APIs (Application Programming Interface), un serveur Python/Django exposant le modèle de données Cyrus, sous forme de points d’entrée REST, représentant le processus de test, connecté à une base de données PostgreSQL ;
  • Cyrus UI (User Interface), interface utilisateur, développée avec Drupal (un système de gestion de contenu open source, https://www.drupal.org/), proposant une interface conviviale pour consulter et enregistrer les données importantes au travers de Cyrus APIs ;
  • Cyrus OpenVAS broker, un serveur Python/Django publiant des APIs pour interfacer Greenbone/OpenVAS et le composant Cyrus APIs ;
  • Cyrus Kiwi broker, un server Python/Django publiant des APIs pour interfacer Kiwi TCMS et le composant Cyrus APIs.

Un set, prêt à l’emploi, de flux NodeRED et de fichiers cas de test Robot Framework est fourni par la plateforme Cyrus.

Déploiement de la plateforme Cyrus

La plateforme est déployée de la manière suivante :

  • une machine virtuelle spécifique à un projet de test sur laquelle tourne le serveur Cyrus APIs, le serveur Cyrus UI, le serveur de base de données, le serveur Keycloack, le serveur Kiwi TCMS et le serveur Jasper Report ;
  • une machine virtuelle tournant une distribution Linux Kali Linux (https://www.kali.org/), pour avoir une connexion physique avec le SUT, nécessaire pour les outils NodeRED, OpenVAS et Robot Framework, et qui permet d’aller sur le terrain et également de la connecter au serveur du projet pour télécharger toutes les données.

La plateforme Cyrus est fouine sous forme d’images Docker et déployée avec Docker Compose de manière à utiliser le même conteneur du serveur PostgreSQL :

  • Cyrus API ;
  • Drupal ;
  • Jasper Report ;
  • Keycloack ;
  • Kiwi TCMS.

Le diagramme ci-dessous présente l’ensemble des logiciels de la plateforme Cyrus et leurs interconnexions.

Les logiciels de la plateforme Cyrus et leurs interconnexions

Utilisation de la plateforme

Ce chapitre décrit les différentes interfaces que la plateforme offre à l’utilisateur (testeur) et comment elles sont utilisées pour effectuer des activités du processus de test générique défini par le projet Cyrus. Comme mentionné dans le premier article, le processus de test générique de Cyrus est divisé en plusieurs parties :

Données d’entrées / Coup d’envoi du projet
Dans cette phase initiale, le propriétaire du système à tester vient avec toutes les informations nécessaires pour démarrer le processus de test cyrus. Certaines sont obligatoires :

  • le SUT (System Under Test) qui est le système ou le produit qu’il veut tester ;
  • ses objectifs de tests et la surface de tests qu’il propose : confirmer l’efficacité des contre-mesures, évaluer le niveau global de sécurité, ...
  • et certains sont facultatifs :
  • la documentation et le code source sont utiles pour les essais en boîte blanche ou grise ;
  • une analyse des risques, si elle existe, peut aider à orienter l’essai sur les parties critiques.

Pour la plateforme Cyrus, cette phase implique plusieurs actions :

  • Si le propriétaire du SUT est nouveau, cela signifie qu’une nouvelle instance de la VM Cyrus sera créée ;
  • Lorsque l’instance du propriétaire est disponible, le SUT, sa version et les entrées telles que l’analyse des risques seront saisies dans la Cyrus UI (Interface utilisateur).

La définition du SUT et de l’analyse des risques est représentée à la figure 1.

Figure 1 : SUT and Risk analysis
Figure 1 : SUT et analyse de risque

Les autres informations telles que la documentation ou le code source ne sont pas directement entrées dans la plateforme mais sont utilisées dans la phase suivante : collecte d’informations.

Collecte d’informations
La collecte d’informations regroupe plusieurs actions pour l’utilisateur telles que :

  • Examiner le SUT ;
  • Lire la documentation ;
  • Vérifier le code source.

Toutes ces actions fourniront des informations sur les constituants du SUT et la façon dont ils communiquent. Ces renseignements doivent également être entrés dans la l’interface utilisateur de Cyrus.
Les constituants du SUT sont appelés “assets” dans la plateforme Cyrus et ils peuvent être de 2 types :

  • Les assets de type “components” sont des blocs fonctionnels : une caméra, un processeur, un PLC (Programmable Logic Controller), etc...
  • Les assets de type “interface” sont des communications entre ces blocs : une api REST https, communication bluetooth, etc...

Pour chaque constituants, différents types d’informations peuvent être collectées et stockées dans la plateforme Cyrus. Pour simplifier cette partie, elles sont stockées dans un tableau de « paramètres » qui peuvent être toute information jugée utile : adresse IP, fournisseur du composant, bande de fréquence utilisée, version TLS, etc...
Les constituants et leurs paramètres dans la plateforme Cyrus sont représentés à la figure 2.

Figure 2 : Constituants & Paramètres

Reconnaissance
La phase de reconnaissance est la première partie qui nécessite une connexion entre l’environnement de test Cyrus et le SUT. La reconnaissance peut être effectuée manuellement mais les principaux outils sont automatisés à l’aide de flux. Ces flux peuvent être lancés depuis l’interface graphique de Cyrus, ils peuvent utiliser des informations déjà recueillies précédemment et ils vont automatiquement pousser le résultat dans la plateforme Cyrus. Les flux sont représentés à la figure 3.

Figure 3 : Flux

Les résultats de flux poussés dans Cyrus apparaissent dans les exécutions de flux et les logs associés peuvent être visualisés directement depuis la plateforme Cyrus (voir Figure 4).

Figure 4 : Résultats des flux

Évaluation de la vulnérabilité
La phase d’évaluation de la vulnérabilité consiste à utiliser toutes les informations recueillies préalablement pour déterminer les vulnérabilités possibles sur le SUT. Il y a 2 façons d’interfacer la plateforme Cyrus pour cela :
Soit manuellement, en recherchant dans les bases de données des vulnérabilités connues sur la base des informations recueillies et en les entrant dans la plateforme Cyrus. Cette méthode est illustrée à la figure 5.

Figure 5 : Recherche de vulnérabilité manuelle

Ou en utilisant Greenbone/Openvas pour essayer de trouver les vulnérabilités sur le système de manière automatique. Cette méthode n’est pas exhaustive mais peut rapidement fournir des vulnérabilités utiles.
Cette méthode est illustrée à la figure 6.

Figure 6 : Recherche de vulnérabilité automatique

Tests
La phase de test est gérée entre 2 outils interconnectés à l’intérieur de la plateforme Cyrus. Pour chaque vulnérabilité que nous voulons tester dans le système, nous allons créer un test dans l’interface utilisateur de Cyrus. La création de ce test créera également un test dans l’outil Kiwi.
L’outil Kiwi sera utilisé ici pour gérer nos tests de pénétration à l’aide de plans de tests et de sessions de test. Il servira également à stocker les résultats des tests et les commentaires du testeur. Voir la figure 7.

Figure 7 : Tests et système de contrôle et de surveillance des tests

Rapports et recommandations
Cette partie conclut un cycle du processus de test Cyrus en effectuant les 2 dernières actions nécessaires : rédiger des recommandations par rapport aux événements qui ont eu lieu pendant le processus et générer le rapport de test.
L’utilisateur devra rédiger des recommandations pour chaque vulnérabilité confirmée et chaque test qui est en erreur dans l’interface utilisateur Cyrus. Il s’agit d’une étape très importante, car elle définit les mesures à prendre pour améliorer la sécurité du SUT ou pour améliorer les tests en vue d’un nouveau cycle de test.

Figure 8 : Recommandations

Après les recommandations, l’utilisateur peut maintenant générer le rapport de test contenant toutes les informations sur ce qui s’est passé pendant le processus de test. Pour cela, la plateforme de test va d’abord importer toutes les informations saisies dans Kiwi puis ouvrir le serveur JasperReport. JasperReport va générer le rapport à partir d’un modèle prédéfini qui peut être totalement personnalisé et de toutes les informations que la plateforme de test Cyrus enregistre sur le processus de test : les constituants, les vulnérabilités, leur lien avec les tests, etc...

Figure 9 : Génération de rapport

Conclusion

Dans cette seconde partie consacrée au projet Cyrus, nous avons voulu montrer l’architecture de la plateforme de test Cyrus ainsi que son utilisation. Cette plateforme permet de de dérouler le processus générique de test présenté lors du premier article. Dans le 3ème et dernier article de cette série, nous présenterons son utilisation sur un cas concret qui a permis de valider les choix d’architecture décrits ici.