
Déploie des bancs d'essai SCADA/ICS virtuels et réalistes avec des nœuds IEC 60870-5-104 et OPC-UA, permettant des simulations d'attaques, la génération de paquets légitimes et des exercices de sécurité en équipe rouge.
Un framework évolutif pour déployer automatiquement, localement (ou à distance), un certain nombre de machines virtuelles répliquant un réseau de supervision, contrôle et acquisition de données (SCADA) est proposé. Cela inclut plusieurs hôtes virtuels émulant des capteurs et des actionneurs, avec une interface homme-machine (IHM) contrôlant les hôtes. Le framework présenté contient une collection de scripts d'automatisation qui construisent et déploient un nombre variable de machines virtuelles, préconfigurées pour faire office d'unité terminale distante (RTU), d'IHM ou d'historien de données. Le travail présenté comprend une implémentation conforme aux normes de l'IEC 60870-5-104 (IEC104) et de l'OPC Unified Architecture (OPC-UA), avec la capacité de prendre en charge d'autres protocoles tels que Modbus-TCP (Modbus) et IEC61850.
Cela permet aux chercheurs de construire des bancs d'essai configurables pour répliquer des déploiements réels de réseaux SCADA. Le framework s'appuie sur des bibliothèques open source et est publié sous la licence approuvée par la Free Software Foundation, GNU General Public License version 3.
Génération de paquets : L'objectif du premier cas d'utilisation est de générer du trafic réseau à partir d'un grand nombre d'appareils, avec un niveau élevé de fidélité au domaine, où idéalement les informations de processus seraient incluses dans le trafic. Comme indiqué précédemment, la création d'ensembles de données à partir d'un système en production n'est pas toujours possible : c'est un travail intensif, il faut localiser un point de capture approprié et obtenir l'approbation des opérateurs de l'usine. Cela peut être limité par le fonctionnement et les politiques de l'usine, car une interférence avec un réseau en fonctionnement peut entraîner des circonstances imprévues et divulguer des informations identifiables. La génération de paquets peut être utilisée pour tester les modifications proposées au réseau SCADA avant leur déploiement dans le système en production. Elle peut également effectuer des tests de stress des appareils en utilisant des paquets d'apparence légitime. Les cas d'utilisation de recherche intéressants incluent l'expérimentation de différents paradigmes réseau, tels que l'ICN ou l'IPv6, qui n'ont pas été appliqués aux réseaux ICS.
Simulations d'attaques : Ce cas considère la simulation d'attaques complexes sur les systèmes SCADA, et vise à effectuer une analyse des risques d'un réseau ICS répliqué, sans affecter négativement le système en production. Le banc d'essai peut être utilisé par des red teams pour tenter de compromettre les nœuds du banc d'essai, tout en analysant les conséquences et en obtenant une analyse complète des captures de paquets. En cas de succès, le processus peut être rejoué avec des contre-mesures supplémentaires en place, permettant de tester les nouvelles contre-mesures dans le contexte de la sécurité et de leur impact potentiel sur les processus du site. Les captures réseau de l'exercice de la red team peuvent être publiées comme ensembles de données ouverts pour vérifier les IDS, reproductibles et permettant à d'autres chercheurs de confirmer les résultats.
Benchmarking d'agents : L'objectif de ce cas d'utilisation est de prendre en charge l'évaluation comparative des systèmes hôtes basés sur des agents, qui ne sont généralement pas effectuée sur des systèmes en production en raison des restrictions des fournisseurs. À moins que l'agent ne soit approuvé par les fournisseurs, son déploiement est souvent interdit, avec un risque de rupture de contrat. En utilisant un banc d'essai qui représente fidèlement le site industriel réel, il est possible de surveiller l'utilisation de logiciels basés sur des agents sans provoquer de perturbations. À condition que le banc d'essai soit librement modifiable, fonctionnellement précis et puisse s'intégrer à du matériel physique, il serait possible d'effectuer un benchmark de l'agent.
Extension de matériel limité : Le dernier cas consiste à étendre un banc d'essai physique existant pour inclure des protocoles de communication et des configurations qui n'étaient pas possibles avec le matériel existant. Cela pourrait nécessiter l'utilisation d'émulateurs réseau pour étendre les équipements réseau, et de simulateurs de processus pour étendre les équipements de contrôle des processus. En couplant le matériel virtuel et physique, il est possible de créer un banc d'essai complexe et très réaliste, permettant de créer et d'analyser de grands déploiements combinant plusieurs protocoles et appareils. Ce cas d'utilisation peut être utilisé en complément des autres pour améliorer leurs résultats.
Clonez le dépôt et installez les dépendances requises :
git clone --recurse-submodules [email protected]:PMaynard/ICS-TestBed-Framework.git
sudo apt install openjdk-8-jdk maven
Compilation :
mvn clean package
mvn package -DskipTests # Skip tests.
Démarrer une RTU :
java -jar node/target/node-1.0.jar
shell> rtu
shell> rtu-iec104port 2404
shell> rtu-listen 127.0.0.1
shell> run
Démarrer une IHM :
java -jar node/target/node-1.0.jar
shell> hmi
shell> hmi-interval 1000
shell> remote-hosts 127.0.0.1
shell> run
Le profil de configuration par défaut déploiera 1 IHM et 4 RTU. L'IHM intégrera les RTU en utilisant l'IEC104 et l'OPC-UA. Les RTU sont configurées pour renvoyer des données de processus aléatoires.
Utilisez la dernière version de Vagrant plutôt que les paquets préconstruits/distribués, car ces scripts utilisent des fonctionnalités des dernières versions de Vagrant. Cela devrait fonctionner avec Ubuntu 18.04.1 LTS.
git clone https://github.com/mitchellh/vagrant.git /opt/vagrant
cd /opt/vagrant
bundle install
bundle --binstubs exec
ln -sf /opt/vagrant/exec/vagrant /usr/local/bin/vagrant
Ceci est une étape de développement facultative. Elle construit une image de machine virtuelle, préconfigurée pour exécuter les nœuds du banc d'essai. Si vous ne souhaitez pas créer la dernière version, l'option par défaut consiste à obtenir une image stable depuis le dépôt d'images de Vagrant, qui reste en phase avec la branche master.
Packer est utilisé pour créer une image de machine virtuelle adaptée à VirtualBox et Vagrant :
cd vagrant_image
packer build vagrant-node.json
vagrant box add testbed-node vagrant.box
AVERTISSEMENT Vous aurez besoin d'au moins 4 Go de RAM libre.
Mettez à jour le Vagrantfile avec toute information supplémentaire, comme l'adresse IP statique et l'utilisation de la RAM.
Les paramètres IP par défaut sont 10.50.50.*. .200 est utilisé pour l'IHM et 101-105 pour les RTU. La RAM allouée par défaut à chaque machine virtuelle est de 512 Mo.
vagrant up
vagrant ssh hmi
vagrant ssh rtu-1 # 1-5
vagrant halt
vagrant destroy
Un exemple de jeu de données a été créé avec la configuration de déploiement par défaut. Les PCAP peuvent être téléchargés ici. Le MITM IEC104 a été réalisé à l'aide du plugin ettercap disponible ici
[Host-SCAN 13:45] : Reconnaissance réseau de base à l'aide d'un Nmap scan réseau global. CMD : 'nmap -sn 10.50.50.*'
[Host-SCAN 13:47] : Reconnaissance réseau de base à la recherche de serveurs [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} accessibles. CMD : 'nmap 10.50.50.* -p 2404'
[Host-SCAN 13:47] : Scan complet des ports des nœuds [RTUs]{acronym-label="RTU" acronym-form="plural+short"} identifiés. CMD : 'nmap 10.50.50.101-105 -A'
[Host-SCAN 13:49] : Un scan actif [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} qui sonde les nœuds à l'aide du [IEC104]{acronym-label="IEC104" acronym-form="singular+short"} protocole[^1]. CMD : 'nmap -Pn -n -d --script iec-identify.nse --script-args='iec-identify.timeout=500' -p 2404 10.50.50.101-105'
[Host-MITM 14:19] : Effectue un [MITM]{acronym-label="MITM" acronym-form="singular+short"} sur RTU-1 et l'IHM. CMD : 'ettercap -i enp0s8 -T -M arp -P spoof_104 /10.50.50.101/ /10.50.50.150/'
Une ventilation numérique du jeu de données est présentée ci-dessous :
Veuillez citer ce framework en utilisant le format suivant :
@conference{
author = "Peter Maynard and Kieran McLaughlin and Sakir Sezer",
title = "An Open Framework for Deploying Experimental SCADA Testbed Networks",
journal = "5th International Symposium for ICS & SCADA Cyber Security Research",
year = "2018"
}
Le jeu de données peut être cité en utilisant le DOI : 10.6084/m9.figshare.6133457.v1
L'article complet est disponible à l'adresse : https://petermaynard.co.uk/publication/an-open-framework-for-deploying-experimental-scada-testbed-networks/
| Hôte | IP | IEC104 | OPC-UA | Autre | Total |
|---|
| HMI | 10.50.50.150 | 26,158 | 0 | 17,688 | 43,846 |
| Historian | 10.50.50.151 | 0 | 14,695 | 14,927 | 29,622 |
| RTU-1 | 10.50.50.101 | 3,592 | 2,940 | 5,543 | 12,075 |
| RTU-2 | 10.50.50.102 | 3,665 | 2,941 | 5,876 | 12,482 |
| RTU-3 | 10.50.50.103 | 3,668 | 2,940 | 5,793 | 12,404 |
| RTU-4 | 10.50.50.104 | 3,690 | 2,940 | 5,771 | 12,404 |
| RTU-5 | 10.50.50.105 | 3,576 | 930 | 7,933 | 12,442 |
| MITM | 10.50.50.99 | 2,390 | 0 | 3,449 | 5,839 |
| SCAN | 10.50.50.3 | 15 | 0 | 28,351 | 28,366 |