La sécurisation des systèmes de contrôle industriel et des environnements OT contre les attaques à distance est plus critique que jamais, en particulier avec des vulnérabilités telles que CVE-2017-14469 et maintenant CVE-2021-22659 qui ciblent le contrôleur Micrologix 1400 de Rockwell Automation, largement utilisé. Les étudiants du programme de bourses OPSWAT ont testé cette vulnérabilité dans un environnement contrôlé, soulignant la nécessité de la sécurité.
Dans ce blog, nous explorons comment les étudiants ont démontré comment les attaquants pouvaient exploiter la vulnérabilité pour faire planter les systèmes et comment l'absence de validation correcte des entrées pouvait être exploitée pour perturber les opérations de l'automate.
Qu'est-ce qu'un automate ? Rockwell Automation Micrologix 1400 expliqué
Un automate programmable est un ordinateur industriel conçu pour automatiser des processus en contrôlant des machines et d'autres opérations industrielles. Il fonctionne dans des environnements difficiles et est programmé pour effectuer des tâches spécifiques en fonction des données fournies par les capteurs. Le contrôleur MicroLogix 1400 de Rockwell Automation est un automate compact et modulaire couramment utilisé dans les applications de petite et moyenne taille. Connu pour sa rentabilité et sa flexibilité, il prend en charge divers protocoles de communication et offre des options d'E/S numériques et analogiques pour l'interfaçage avec des appareils.
La programmation s'effectue généralement à l'aide du logiciel de Rockwell Automation par le biais de la logique en échelle, ce qui permet aux utilisateurs de créer des séquences de commande. Le MicroLogix 1400 est polyvalent et convient à des tâches telles que la commande de machines et l'automatisation de processus. Sa modularité permet aux utilisateurs d'étendre et de personnaliser le système en fonction des exigences spécifiques de l'application.
Introduction à CVE-2021-22659
En janvier 2021, Rockwell Automation a reçu un rapport de Parul Sindhwad et du Dr Faruk Kazi du COE-CNDS du Veermata Jijabai Technological Institute (VJTI), en Inde, concernant une vulnérabilité dans le contrôleur MicroLogix™ 1400. Ils ont identifié une faille de sécurité dans la version 21.6 et antérieure qui permet à un attaquant distant non authentifié d'envoyer un paquet Modbus spécialement conçu, permettant à l'attaquant de récupérer ou de modifier des valeurs aléatoires dans le registre. S'il est exploité avec succès, cela peut conduire à un débordement de la mémoire tampon, entraînant un déni de service. La LED FAULT clignote en ROUGE et les communications peuvent être perdues. Le rétablissement de la condition de déni de service nécessite que le défaut soit supprimé par l'utilisateur.
NVD a évalué cette faille de sécurité comme étant de sévérité élevée.
Phases d'attaque
Un attaquant distant non authentifié disposant d'un accès réseau à l'automate MicroLogix 1400 vulnérable pourrait envoyer un paquet spécialement conçu pour modifier les valeurs du registre. Cela pourrait potentiellement provoquer un déni de service pour l'appareil, entraînant une corruption du système et un temps d'arrêt. Un tel incident peut perturber de manière significative les opérations de fabrication et les autres activités de l'entreprise.
Protocole Modbus
Développé par Modicon en 1979, le protocole Modbus est une structure de messagerie conçue pour établir une communication client-serveur entre des dispositifs intelligents. Conçu à l'origine pour être utilisé avec les automates programmables de Modicon, il est devenu depuis un protocole de communication standard pour la communication entre les appareils électroniques industriels.
Il existe des protocoles Modbus pour Ethernet (Modbus TCP) et pour les lignes série (Modbus RTU et Modbus ASCII). Modbus R TU (Remote Terminal Unit) transmet directement les données sous forme binaire par le biais d'une communication série, et Modbus TCP (Transmission Control Protocol) incorpore les données du protocole Modbus dans des paquets TCP pour les transmettre sur les réseaux TCP/IP.
Structure des messages Modbus
Modbus est un protocole demande-réponse dans lequel le client transmet une demande à un dispositif Modbus, qui fournit ensuite une réponse.
Un message Modbus envoyé d'un primaire à un secondaire contient l'adresse du secondaire, la "commande" (par exemple "lire le registre" ou "écrire le registre"), les données et une somme de contrôle (LRC ou CRC).
Les adresses de données sont utilisées dans les messages d'interrogation Modbus lors de la lecture ou de la modification des données. Modbus définit quatre types de données : Bobine, état d'entrée, registre d'entrée et registre de maintien. Deux d'entre eux stockent des valeurs tout ou rien (1 bit) appelées bobines et entrées discrètes, et deux stockent des valeurs numériques sous forme de mots de 16 bits appelés registres. Chaque type de données est en lecture seule ou en lecture/écriture.
Type de données | Accès | Description |
Bobine | Lecture-écriture | Sorties à bit unique. |
Entrée discrète | Lecture seule | Entrées à bit unique. |
Registre d'entrée | Lecture seule | Registres d'entrée de 16 bits. |
Registre de maintien | Lecture-écriture | Registres de sortie de 16 bits. |
Il existe trois catégories de codes de fonction Modbus :
- Codes de fonction publique - De 1 à 127, sauf pour les codes définis par l'utilisateur.
- Codes de fonction définis par l'utilisateur - en deux gammes, de 65 à 72 et de 100 à 110.
- Codes de fonction réservés - Utilisés par certaines entreprises pour des produits anciens et non disponibles pour un usage public.
Type de fonction | Nom de la fonction | Code de fonction | ||
Accès aux données | Accès aux bits | Entrées discrètes physiques | Lecture des entrées discrètes | 2 |
Bits internes ou bobines physiques | Lire les bobines Écriture d'une seule bobine Écriture de plusieurs bobines | 1 5 15 | ||
Accès à 16 bits | Registres d'entrées physiques | Lecture des registres d'entrée | 4 | |
Registres internes ou registres de sortie physique | Lecture de registres de maintien multiples Écriture d'un registre de maintien unique Écriture de registres de maintien multiples Lecture/écriture de plusieurs registres Registre d'écriture du masque File d'attente FIFO de lecture | 3 6 16 23 22 24 | ||
Accès aux dossiers | Lecture d'un enregistrement de fichier Écriture d'un enregistrement de fichier | 20 21 | ||
Diagnostics | Lecture de l'état de l'exception Diagnostic Obtenir le compteur d'événements Com Obtenir le journal des événements de la Com Rapport sur l'ID de l'esclave Lire l'identification de l'appareil | 7 8 11 12 17 43 | ||
Autres | Transport d'interface encapsulé | 43 |
Type de fonction : Accès aux données Sous-type : Accès aux bits Catégorie : Physical Discrete Inputs Nom de la fonction : Read Discrete Inputs Code de la fonction : 2 |
Type de fonction : Accès aux données Sous-type : Accès aux bits Catégorie : Internal Bits or Physical Coils Nom de la fonction : Read Coils Code de la fonction : 1 |
Type de fonction : Accès aux données Sous-type : Bit access Catégorie : Bits internes ou bobines physiques Nom de la fonction : Write Single Coil Code de la fonction : 5 |
Type de fonction : Accès aux données Sous-type : Bit access Catégorie : Bits internes ou bobines physiques Nom de la fonction : Write Multiple Coils Code de la fonction : 15 |
Type de fonction : Accès aux données Sous-type : 16-bit access Catégorie : Physical Input Registers Nom de la fonction : Read Input Registers Code de la fonction : 4 |
Type de fonction : Accès aux données Sous-type : Accès 16 bits Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Read Multiple Holding Registers Code de la fonction : 3 |
Type de fonction : Accès aux données Sous-type : 16-bit access Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Write Single Holding Register Code de la fonction : 6 |
Type de fonction : Accès aux données Sous-type : 16-bit access Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Write Multiple Holding Registers Code de la fonction : 16 |
Type de fonction : Accès aux données Sous-type : Accès 16 bits Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Read/Write Multiple Registers Code de la fonction : 23 |
Type de fonction : Accès aux données Sous-type : 16-bit access Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Mask Write Register Code de la fonction : 22 |
Type de fonction : Accès aux données Sous-type : Accès 16 bits Catégorie : Internal Registers or Physical Output Registers Nom de la fonction : Read FIFO Queue Code de la fonction : 24 |
Type de fonction : Accès aux données Sous-type : Accès aux enregistrements de fichiers Nom de la fonction : Read File Record Code de la fonction : 20 |
Type de fonction : Accès aux données Sous-type : Accès aux enregistrements de fichiers Nom de la fonction : écriture d'un enregistrement de fichier Code de la fonction : 21 |
Type de fonction : Diagnostics Nom de la fonction : Lire l'état de l'exception Code de la fonction : 7 |
Type de fonction : Diagnostics Nom de la fonction : Diagnostic Code de la fonction : 8 |
Type de fonction : Diagnostics Nom de la fonction : Get Com Event Counter Code de la fonction : 11 |
Type de fonction : Diagnostics Nom de la fonction : Get Com Event Log Code de la fonction : 12 |
Type de fonction : Diagnostics Nom de la fonction : Report Slave ID Code de la fonction : 17 |
Type de fonction : Diagnostics Nom de la fonction : Lire l'identification de l'appareil Code de la fonction : 43 |
Type de fonction : Autre Nom de la fonction : Encapsulated Interface Transport Code de la fonction : 43 |
Exploitation
Analyse de la vulnérabilité
Par le biais d'une analyse, nos boursiers diplômés d'OPSWAT ont découvert que lors de la communication Modbus TCP, le protocole manque d'authentification et de cryptage pour les paquets transmis. En outre, la validation des entrées dans l'automate MicroLogix 1400 n'est pas correctement mise en œuvre. Par conséquent, un attaquant distant peut analyser le paquet Modbus TCP via le reniflage de paquets et envoyer n'importe quelle requête à l'automate sans authentification via le protocole Modbus TCP. En raison de l'absence de validation des entrées dans l'automate MicroLogix 1400, un attaquant distant authentifié pourrait envoyer un grand nombre de paquets avec des valeurs aléatoires, ce qui pourrait provoquer un crash de l'automate.
Écrasement du registre
Dans un premier temps, nous avons tenté de capturer les paquets Modbus TCP utilisés pour lire ou écrire des registres sur l'automate. Pour ce faire, nous avons examiné les paquets générés par une application appelée Modbus Poll, qui facilite la lecture et l'écriture des registres sur l'automate MicroLogix 1400.
En utilisant Wireshark pour capturer tous les paquets de l'interface réseau, nous avons pu identifier le paquet Modbus TCP pour l'écriture d'un seul registre :
Sur la base de la structure des paquets sniffés, nous avons développé un simple script Python pour envoyer des paquets TCP demandant l'écriture d'un registre sur l'automate cible. Dans ce scénario, l'adresse IP de l'automate est 192.168.93.89.
Le registre de l'automate a été modifié après avoir reçu notre paquet malveillant non authentifié.

Dans la Micro Logix 1400, la plupart des instructions mathématiques utilisent trois paramètres : Source A, Source B et Destination
Les valeurs de la source A et de la source B peuvent provenir de deux registres de 16 bits appelés N13:3 et N13:4. En outre, les valeurs de ces registres de 16 bits, tels que N13:3 et N13:4, sont limitées à une plage comprise entre -32 768 et +32 767. Si les valeurs de N13:3 et N13:4 sont élevées, le résultat de l'instruction de correspondance peut dépasser la plage maximale du type de données, ce qui peut entraîner un blocage de l'automate. Par conséquent, pour provoquer un crash de l'automate, il est nécessaire d'écrire de grandes valeurs aléatoires dans tous les registres, y compris N13:3 et N13:4. Pour ce faire, nous avons modifié notre script Python comme suit :
Simuler l'attaque
Pour simuler une attaque réelle, nos boursiers diplômés OPSWAT ont tenté de provoquer une panne de l'automate MicroLogix 1400 situé dans les laboratoires CIP d'OPSWAT , en partant du principe que l'attaquant et l'automate se trouvent sur le même réseau et sont capables de communiquer entre eux.
Dans l'état de fonctionnement normal de l'automate MicroLogix 1400 d'OPSWAT Labs, avec l'automate en mode REMOTE RUN, toutes les valeurs de registre sont valides et se situent dans la plage désignée pour leurs types de données, ce qui indique que le programme de l'utilisateur fonctionne correctement.
Lors de l'exécution de notre script Python, de nombreux paquets Modbus TCP seront envoyés à l'automate, demandant l'écriture de grandes valeurs aléatoires dans tous les registres sans authentification :
Après avoir reçu ces demandes de paquets malveillants, les valeurs de tous les registres, y compris N13:3 et N13:4, sont fixées à 16 990. Le résultat de l'opération ADD sur les registres N13:3 et N13:4 dépasse la plage valide d'un registre 16 bits. Ce problème entraîne un dépassement de l'entier, ce qui provoque un défaut et interrompt le fonctionnement de l'automate, comme l'indique l'état FAULTED.
Nos boursiers diplômés d'OPSWAT ont réussi à faire planter l'automate MicroLogix 1400 en exploitant CVE-2021-22659.
Remédiation
Face à des vulnérabilités telles que CVE-2021-22659, une remédiation complète est cruciale pour protéger les systèmes OT et cyber-physiques. Voici quelques-unes des stratégies clés qui peuvent être employées pour empêcher la propagation des attaques :
- Détection des CVE connus : Analyser régulièrement les réseaux pour détecter les vulnérabilités telles que CVE-2021-22659.
- Surveillance des comportements anormaux : Signalement des augmentations inhabituelles de la fréquence des communications avec l'automate Micrologix 1400, qui pourraient suggérer une attaque en cours ou un transfert de données non autorisé.
- Identifier les connexions de nouveaux appareils : Le système doit détecter lorsqu'un nouvel appareil se connecte à l'automate.
- Segmentation du réseau : L'isolement des dispositifs affectés peut contribuer à empêcher la propagation latérale des attaques, ce qui en minimise l'impact.
MetaDefender OT Security d'OPSWATrépond à ces besoins en détectant les CVE, en surveillant en permanence le réseau pour détecter les comportements inhabituels et en identifiant les connexions non autorisées. Grâce à l'IA, il apprend les schémas de trafic normaux, établit un comportement de référence et met en œuvre des politiques d'alerte en cas d'anomalie. Cela permet de réagir instantanément et en connaissance de cause aux menaces potentielles.
Dans le cas d'une attaque exploitant CVE-2021-22659, MetaDefender OT Security s'intègre à MetaDefender Industrial Firewall pour bloquer les communications suspectes sur la base de règles définies. Le pare-feu utilise l'IA pour apprendre les schémas de trafic réguliers et appliquer des règles pour empêcher les connexions non autorisées.
En combinant ces capacités de détection, d'alerte et de segmentation du réseau, MetaDefender OT Security devient le mécanisme de défense idéal pour les environnements industriels, réduisant de manière significative le risque et l'impact des cyber-menaces dans les environnements technologiques opérationnels.
Découvrez comment la plateforme de cybersécurité de défense en profondeur d'OPSWATpeut améliorer et faire évoluer votre posture. Contactez un expert dès aujourd'hui pour une démonstration gratuite.