Wavestone possède depuis plusieurs années des démonstrateurs sur la sécurité des systèmes industriels. En particulier, vous avez peut-être déjà rencontré notre maquette de train et bras robotiques avec un capture the Flag physique !
Cette maquette de train est principalement utilisée pour des workshops dans des conférences de sécurité (Black Hat Europe 2014, BruCON 2015 & 2017, DEF CON 2016 & 2018, Bsides LV, etc.), ou des cours en école d’ingénieurs (EPITA, Mines, ESIEA, Télécom Sud Paris, etc.).
En plus des conférences et des cours en école, nous avons tourné cet été une vidéo de la maquette afin de présenter les principales attaques sur les systèmes industriels, et en particulier l’insécurité des protocoles industriels.
La première partie de la vidéo rappelle ce que sont les systèmes industriels et présente les principales familles de risques et vulnérabilités sur ces systèmes :
- Des défauts d’organisation et de sensibilisation des acteurs
- L’absence de supervision de sécurité
- L’absence de mécanismes de sécurité dans les équipements et les protocoles
- La non-maitrise des sous-traitants et de la maintenance
- La ségrégation inexistante des réseaux
- L’absence de patch management
La seconde partie de la vidéo rentre plus dans la pratique, avec tout d’abord la présentation de la maquette : les automates, la supervision ainsi que le fonctionnement général.
L’objectif est d’attaquer les automates : il faut arrêter le train et attraper son drapeau à l’aide des bras robotiques.
Différents outils de lecture et écriture de registres sont alors présentés :
- S7getDB pour les automates Siemens
- Mbtget pour les automates Schneider
Enfin, nous concluons sur le fait qu’il est relativement
facile de piloter les automates de manière illégitime avec des outils
implémentant les protocoles de communication industriel. Par ailleurs, bien que
de nouvelles gammes d’automates, plus robustes, existent chez certains
constructeurs, la première étape de sécurisation consiste à cloisonner et
filtrer ses réseaux industriels
- Outils pour la lecture et l’écriture de registres (Modbus ou S7)
- Mbtget – outil perl pour les requêtes de lecture/écriture Modbus https://github.com/sourceperl/mbtget
- S7get et S7getDB – outil python pour les requêtes de lecture/écriture sur les automates Siemens développé par Wavestone : https://github.com/wavestone-cdt/s7-get
- Modbusclient – module Metasploit pour les requêtes de lecture/écriture Modbus (contribution Wavestone) : https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/scada/modbusclient.rb
- Outils utilisant la fonction 90 de Modbus pour l’administration (un article détaillé est par ailleurs disponible ici : https://www.securityinsider-wavestone.com/2018/02/fun-with-modbus-0x5a.html
- Modicon_command_CTv2 – module Metasploit pour arrêter/démarrer une CPU (contribution Wavestone) : https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_command_CTv2.rb
- Modicon_stux_transfer_ASO – module Metasploit pour télécharger le programme d’un automate (contribution Wavestone) : https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_stux_transfer_ASO.rb
- Schneider – module pour forcer les entrées / sorties d’un automate développé par Wavestone : https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/schneider.rb