Cyberattaques alimentées par l'IA : Comment détecter, prévenir et se défendre contre les menaces intelligentes

Lire la suite
Nous utilisons l'intelligence artificielle pour les traductions de sites et, bien que nous nous efforcions d'être précis, il se peut que les traductions ne soient pas toujours exactes à 100 %. Nous vous remercions de votre compréhension.

Protéger les systèmes OT contre les attaques à distance : Comment MetaDefender OT Security™ protège le contrôleur Micrologix™ 1400 contre CVE-2021-22659

par OPSWAT
Partager cet article
Participants au programme de bourses d'OPSWAT

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.

Image d'un dispositif OPSWAT utilisé pour la surveillance d'un système de contrôle industriel

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. 

métriques CVSS 3.x montrant un score de sévérité élevé de 8,6 selon le NIST NVD

Phases d'attaque

Diagramme illustrant les phases d'une cyberattaque PLC MicroLogix

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. 

Tableau comparatif de la pile Modbus et des couches OSI pour les protocoles de communication

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.

Diagramme montrant la communication de la transaction Modbus entre le client et le serveur

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).

Structure d'un message Modbus RTU avec en-têtes et codes de fonction

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éesAccèsDescription
BobineLecture-écritureSorties à bit unique.
Entrée discrèteLecture seuleEntrées à bit unique.
Registre d'entréeLecture seuleRegistres d'entrée de 16 bits.
Registre de maintienLecture-écritureRegistres 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 fonctionNom de la fonctionCode de fonction
Accès aux donnéesAccès aux bitsEntrées discrètes physiquesLecture des entrées discrètes2
Bits internes ou bobines physiques

Lire les bobines

Écriture d'une seule bobine

Écriture de plusieurs bobines

1

5

15

Accès à 16 bitsRegistres d'entrées physiquesLecture des registres d'entrée4
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

AutresTransport 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.

Capture d'écran montrant l'interface de l'outil Modbus Poll pour l'écriture de registres individuels

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 :

Capture de paquets montrant une transaction Modbus avec un code de fonction pour l'écriture d'un seul registre
Ventilation détaillée de la charge utile Modbus TCP, y compris les identifiants de transaction et de protocole

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.

Exemple de code Python pour initier une connexion Modbus TCP et envoyer une charge utile

Le registre de l'automate a été modifié après avoir reçu notre paquet malveillant non authentifié. 

Capture de paquets montrant le protocole Modbus/TCP avec un code de fonction d'écriture de registres multiples
Capture d'écran d'un diagramme logique ladder avec un bloc fonctionnel ADD pour l'ajout de valeurs source

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 : 

Script Python montrant la création d'une charge utile Modbus TCP pour l'écriture de plusieurs registres

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. 

Capture d'écran du fichier de données RSLogix 500 montrant les valeurs des données N13 en format décimal

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 :

Capture de paquets montrant des demandes répétées d'écriture de registres multiples par Modbus TCP

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.

RSLogix 500 affichant une condition de défaut et des valeurs de données pour les adresses N13

Nos boursiers diplômés d'OPSWAT ont réussi à faire planter l'automate MicroLogix 1400 en exploitant CVE-2021-22659.

Remédiation

Capture d'écran d'un tableau de bord des vulnérabilités d'un automate programmable (PLC) montrant les détails des CVE et les vulnérabilités critiques pour Rockwell Automation MicroLogix.

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 :

  1. Détection des CVE connus : Analyser régulièrement les réseaux pour détecter les vulnérabilités telles que CVE-2021-22659.
  2. 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é.
  3. Identifier les connexions de nouveaux appareils : Le système doit détecter lorsqu'un nouvel appareil se connecte à l'automate. 
  4. 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.

Restez à jour avec OPSWAT!

Inscrivez-vous dès aujourd'hui pour recevoir les dernières mises à jour de l'entreprise, de l'entreprise, des histoires, des informations sur les événements, et plus encore.