Envío de registros, alertas y datos de telemetría a través de un diodo de datos

Descubre cómo
Utilizamos inteligencia artificial para traducir el sitio web y, aunque nos esforzamos por garantizar la precisión, es posible que las traducciones no sean siempre 100 % exactas. Agradecemos tu comprensión.

Protección de los sistemas OT frente a ataques remotos: cómo MetaDefender Security™ protege el controlador Micrologix™ 1400 frente a la vulnerabilidad CVE-2021-22659

By OPSWAT
Comparte esta publicación
Participantes en el Programa OPSWAT

Proteger los sistemas de control industrial y los entornos OT frente a ataques remotos es más importante que nunca, especialmente ante vulnerabilidades como CVE-2017-14469 y, ahora, CVE-2021-22659, que afectan al controlador Micrologix 1400 de Rockwell Automation, ampliamente utilizado. Los alumnos del Programa OPSWAT han probado esta vulnerabilidad en un entorno controlado, poniendo de relieve la necesidad de reforzar la seguridad. 

En este blog, analizamos cómo los estudiantes demostraron que los atacantes podrían aprovechar la vulnerabilidad para provocar el bloqueo de los sistemas y cómo la falta de una validación adecuada de las entradas podría utilizarse para interrumpir el funcionamiento de los PLC. 

¿Qué es un PLC? Explicación del Micrologix 1400 de Rockwell Automation

Un PLC (controlador lógico programable) es un ordenador industrial diseñado para automatizar procesos mediante el control de maquinaria y otras operaciones industriales. Funciona en entornos hostiles y está programado para realizar tareas específicas basadas en la información recibida de los sensores. El controlador MicroLogix 1400 de Rockwell Automation es un PLC compacto y modular que se utiliza habitualmente en aplicaciones de pequeño y mediano tamaño. Conocido por su rentabilidad y flexibilidad, es compatible con diversos protocolos de comunicación y ofrece opciones de E/S digitales y analógicas para la interconexión con dispositivos.

Imagen de un OPSWAT utilizado para la supervisión de sistemas de control industrial

La programación se realiza normalmente mediante el software de Rockwell Automation a través de la lógica de escalera, lo que permite a los usuarios crear secuencias de control. El MicroLogix 1400 es versátil y resulta adecuado para tareas como el control de máquinas y la automatización de procesos. Su modularidad permite a los usuarios ampliar y personalizar el sistema en función de los requisitos específicos de cada aplicación.

Introducción a CVE-2021-22659

En enero de 2021, Rockwell Automation recibió un informe de Parul Sindhwad y el Dr. Faruk Kazi, del COE-CNDS del Instituto Tecnológico Veermata Jijabai (VJTI) de la India, sobre una vulnerabilidad en el controlador MicroLogix™ 1400. Identificaron un fallo de seguridad en la versión 21.6 y anteriores que permite a un atacante remoto no autenticado enviar un paquete Modbus especialmente diseñado, lo que le permite recuperar o modificar valores aleatorios en el registro. Si se aprovecha con éxito, esto podría provocar un desbordamiento del búfer, lo que daría lugar a una condición de denegación de servicio. El LED de FALLO parpadeará en ROJO y es posible que se pierda la comunicación. Para recuperarse de la denegación de servicio, el usuario debe borrar el fallo. 

El NVD ha calificado esta vulnerabilidad de seguridad como de gravedad alta

Métricas CVSS 3.x que muestran una puntuación de gravedad alta de 8,6 según el NIST NVD

Fases de ataque

Diagrama que ilustra las fases de un ciberataque contra un PLC MicroLogix

Un atacante remoto sin autenticación que tenga acceso a la red del PLC MicroLogix 1400 vulnerable podría enviar un paquete especialmente diseñado para modificar los valores del registro. Esto podría provocar una situación de denegación de servicio en el dispositivo, lo que daría lugar a daños en el sistema y a un tiempo de inactividad. Un incidente de este tipo puede perturbar significativamente las operaciones de fabricación y otras actividades comerciales de la organización.

Protocolo Modbus

Desarrollado por Modicon en 1979, el protocolo Modbus es una estructura de mensajería diseñada para establecer la comunicación cliente-servidor entre dispositivos inteligentes. Aunque en un principio se diseñó para su uso con los PLC de Modicon, con el tiempo se ha convertido en un protocolo de comunicación estándar para la comunicación entre dispositivos electrónicos industriales. 

Existen protocolos Modbus para Ethernet (Modbus TCP) y líneas serie (Modbus RTU y Modbus ASCII). Modbus RTU (Remote Terminal Unit) transmite datos directamente en formato binario a través de la comunicación serie, mientras que Modbus TCP (Protocolo de Control de Transmisión) integra los datos del protocolo Modbus en paquetes TCP para su transmisión a través de redes TCP/IP. 

Tabla comparativa de la pila Modbus y las capas OSI para los protocolos de comunicación

Estructura de los mensajes Modbus

Modbus es un protocolo de solicitud-respuesta en el que el cliente envía una solicitud a un dispositivo Modbus y, a continuación, el dispositivo envía una respuesta.

Diagrama que muestra la comunicación mediante transacciones Modbus entre el cliente y el servidor

Un mensaje Modbus enviado desde un dispositivo primario a uno secundario contiene la dirección del dispositivo secundario, el «comando» (por ejemplo, «leer registro» o «escribir registro»), los datos y una suma de comprobación (LRC o CRC).

Estructura del mensaje Modbus RTU con encabezados y códigos de función

Las direcciones de datos se utilizan en los mensajes de consulta Modbus al leer o modificar datos. Modbus define cuatro tipos de datos: bobina, estado de entrada, registro de entrada y registro de retención. Dos de ellos almacenan valores de tipo «encendido/apagado» (1 bit), denominados «bobinas» y «entradas discretas», y los otros dos almacenan valores numéricos en forma de palabras de 16 bits, denominados «registros». Cada uno de ellos es de solo lectura o de lectura/escritura.

Tipo de datosAccesoDescripción
BobinaLectura y escrituraSalidas de un solo bit.
Entrada discretaSolo lecturaEntradas de un solo bit.
Registro de entradaSolo lecturaRegistros de entrada de 16 bits.
Registro de tenenciasLectura y escrituraRegistros de salida de 16 bits.

Hay tres categorías de códigos de función Modbus:

  • Códigos de funciones públicas: del 1 al 127, salvo los códigos definidos por el usuario. 
  • Códigos de funciones definidas por el usuario: en dos rangos, del 65 al 72 y del 100 al 110. 
  • Códigos de función reservados: utilizados por algunas empresas para productos antiguos y no disponibles para el uso público.
Tipo de funciónNombre de la funciónCódigo de función
Acceso a los datosAcceso a bitsEntradas físicas discretasLeer entradas discretas2
Piezas internas o bobinas físicas

Bobinas de lectura

Escribir «Single Coil»

Escribir varias bobinas

1

5

15

Acceso de 16 bitsRegistros de entrada físicaLeer registros de entrada4
Registros internos o registros de salida físicos

Leer varios registros de retención

Escribir en el registro de tenencia única

Escribir en varios registros de retención

Lectura y escritura en varios registros

Registro de escritura de máscara

Leer cola FIFO

3

6

16

23

22

24

Acceso a registros de archivos

Leer registro de archivo

Escribir registro de archivo

20

21

Diagnóstico

Leer el estado de la excepción

Diagnóstico

Obtener el contador de eventos Com 

Obtener el registro de eventos de Com 

ID del esclavo del informe 

Leer la identificación del dispositivo 

7

8

11

12

17

43

OtrosTransporte de interfaz encapsulada43
Tipo de función: Acceso a datos
Subtipo: Acceso a bits
Categoría: Entradas discretas físicas
Nombre de la función: Lectura de entradas discretas
Código de función: 2
Tipo de función: Acceso a datos
Subtipo: Acceso a bits
Categoría: Bits internos o bobinas físicas
Nombre de la función: Leer bobinas
Código de función: 1
Tipo de función: Acceso a datos
Subtipo: Acceso a bits
Categoría: Bits internos o bobinas físicas
Nombre de la función: Escribir en una sola bobina
Código de función: 5
Tipo de función: Acceso a datos
Subtipo: Acceso a bits
Categoría: Bits internos o bobinas físicas
Nombre de la función: Escribir en varias bobinas
Código de función: 15
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros de entrada físicos
Nombre de la función: Lectura de registros de entrada
Código de función: 4
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Lectura de varios registros de retención
Código de función: 3
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Escritura en un registro de retención único
Código de función: 6
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Escritura en varios registros de retención
Código de función: 16
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Lectura/escritura de varios registros
Código de función: 23
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Registro de escritura de máscara
Código de función: 22
Tipo de función: Acceso a datos
Subtipo: Acceso de 16 bits
Categoría: Registros internos o registros de salida física
Nombre de la función: Leer cola FIFO
Código de función: 24
Tipo de función: Acceso a datos
Subtipo: Acceso a registros de archivo
Nombre de la función: Leer registro de archivo
Código de la función: 20
Tipo de función: Acceso a datos
Subtipo: Acceso a registros de archivo
Nombre de la función: Escribir registro de archivo
Código de la función: 21
Tipo de función: Diagnóstico
Nombre de la función: Leer estado de excepción
Código de la función: 7
Tipo de función: Diagnóstico
Nombre de la función: Diagnóstico
Código de la función: 8
Tipo de función: Diagnóstico
Nombre de la función: Obtener contador de eventos COM
Código de la función: 11
Tipo de función: Diagnóstico
Nombre de la función: Obtener el registro de eventos COM
Código de la función: 12
Tipo de función: Diagnóstico
Nombre de la función: ID del esclavo del informe
Código de la función: 17
Tipo de función: Diagnóstico
Nombre de la función: Leer identificación del dispositivo
Código de función: 43
Tipo de función: Otros
Nombre de la función: Transporte de interfaz encapsulada
Código de la función: 43

Explotación

Análisis de vulnerabilidades

Tras realizar un análisis, nuestros becarios OPSWAT descubrieron que, durante la comunicación Modbus TCP, el protocolo carece de autenticación y cifrado para los paquetes transmitidos. Además, la validación de entradas en el PLC MicroLogix 1400 no está implementada correctamente. En consecuencia, un atacante remoto puede analizar el paquete Modbus TCP mediante el rastreo de paquetes y enviar cualquier solicitud al PLC sin autenticación a través del protocolo Modbus TCP. Debido a la falta de validación de entradas del dispositivo PLC MicroLogix 1400, un atacante remoto autenticado podría enviar un gran número de paquetes con valores aleatorios, lo que podría provocar el bloqueo del PLC.

Sobrescritura del registro

En un primer momento, intentamos capturar los paquetes Modbus TCP utilizados para leer o escribir registros en el PLC. Para ello, analizamos los paquetes generados por una aplicación llamada Modbus Poll, que permite leer y escribir registros en el PLC MicroLogix 1400.

Captura de pantalla que muestra la interfaz de la herramienta Modbus Poll para escribir registros individuales

Al utilizar Wireshark para capturar todos los paquetes de la interfaz de red, pudimos identificar el paquete Modbus TCP destinado a escribir un único registro:

Captura de paquetes que muestra una transacción Modbus con el código de función para escribir un único registro
Desglose detallado de la carga útil de Modbus TCP, incluidos los identificadores de transacción y de protocolo

A partir de la estructura de los paquetes interceptados, desarrollamos un sencillo script en Python para enviar paquetes TCP que solicitan la escritura de un registro en el PLC de destino. En este caso, la dirección IP del PLC es 192.168.93.89.

Ejemplo de código en Python para establecer una conexión Modbus TCP y enviar una carga útil

El registro del PLC se modificó tras recibir nuestro paquete malicioso no autenticado. 

Captura de paquetes que muestra el protocolo Modbus/TCP con un código de función de escritura en varios registros
Captura de pantalla de un diagrama de lógica de escalera con un bloque de función ADD para sumar valores de origen

En Micro Logix 1400, la mayoría de las instrucciones matemáticas utilizan tres parámetros: Fuente A, Fuente B y Destino

Los valores de la Fuente A y la Fuente B pueden proceder de dos registros de 16 bits denominados N13:3 y N13:4. Además, los valores de estos registros de 16 bits, como N13:3 y N13:4, están limitados al intervalo comprendido entre -32 768 y +32 767. Si los valores de N13:3 y N13:4 son grandes, el resultado de la instrucción de coincidencia puede exceder el rango máximo del tipo de datos, lo que podría provocar un fallo del PLC. Por lo tanto, para provocar un fallo en el PLC, es necesario escribir valores aleatorios grandes en todos los registros, incluidos N13:3 y N13:4. Para lograrlo, modificamos nuestro script de Python de la siguiente manera: 

Script de Python que muestra la creación de una carga útil Modbus TCP para escribir en varios registros

Simular el ataque

Para simular un ataque real, nuestros becarios OPSWAT intentaron provocar un fallo en el PLC MicroLogix 1400 ubicado en los laboratorios OPSWAT , partiendo de la hipótesis de que tanto el atacante como el PLC se encuentran en la misma red y pueden comunicarse entre sí. 

En el estado operativo normal del PLC MicroLogix 1400 en OPSWAT , con el PLC en modo REMOTE RUN, todos los valores de los registros son válidos y se encuentran dentro del rango establecido para sus tipos de datos, lo que indica que el programa de usuario funciona correctamente. 

Captura de pantalla del archivo de datos de RSLogix 500 en la que se muestran los valores de los datos N13 en formato decimal

Al ejecutar nuestro script de Python, se enviarán numerosos paquetes Modbus TCP al PLC, solicitando la escritura de grandes valores aleatorios en todos los registros sin autenticación:

Captura de paquetes que muestra solicitudes repetidas de escritura en varios registros Modbus TCP

Tras recibir estas solicitudes de paquetes maliciosos, los valores de todos los registros, incluidos N13:3 y N13:4, se establecen en 16 990. El resultado de la operación ADD en los registros N13:3 y N13:4 excede el rango válido de un registro de 16 bits. Este problema provoca un desbordamiento de enteros, lo que da lugar a un fallo e interrumpe el funcionamiento del PLC, tal y como indica el estado FAULTED.

RSLogix 500 muestra una condición de fallo y los valores de los datos de las direcciones N13

Nuestros becarios OPSWAT han logrado bloquear el PLC MicroLogix 1400 aprovechando la vulnerabilidad CVE-2021-22659.

Remediación

Captura de pantalla de un panel de control de vulnerabilidades de PLC que muestra los detalles de CVE y las vulnerabilidades críticas de Rockwell Automation MicroLogix

Ante vulnerabilidades como la CVE-2021-22659, es fundamental aplicar medidas correctivas exhaustivas para proteger los sistemas de tecnología operativa (OT) y los sistemas ciberfísicos. A continuación se enumeran algunas de las estrategias clave que pueden emplearse para evitar la propagación de los ataques:

  1. Detección de vulnerabilidades CVE conocidas: análisis periódico de las redes en busca de vulnerabilidades como la CVE-2021-22659.
  2. Supervisión de comportamientos anómalos: Detección de aumentos inusuales en la frecuencia de las comunicaciones con el PLC Micrologix 1400, lo que podría indicar un ataque en curso de transferencia de datos no autorizada.
  3. Detección de nuevas conexiones de dispositivos: El sistema debería detectar cuándo se conecta un nuevo dispositivo al PLC. 
  4. Segmentación de la red: aislar los dispositivos afectados puede ayudar a evitar la propagación lateral de los ataques, minimizando así su impacto.

MetaDefender OT Security OPSWATOT Security estas necesidades mediante la detección de vulnerabilidades CVE, la supervisión continua de la red en busca de comportamientos inusuales y la identificación de conexiones no autorizadas. Gracias a la inteligencia artificial, aprende los patrones normales de tráfico, establece un comportamiento de referencia e implementa políticas para alertar de anomalías. Esto permite dar respuestas inmediatas y fundamentadas ante posibles amenazas. 

En caso de un ataque que aproveche la vulnerabilidad CVE-2021-22659, MetaDefender OT Security con elFirewall Industrial MetaDefender Firewall bloquear las comunicaciones sospechosas según las reglas establecidas. El cortafuegos utiliza la inteligencia artificial para aprender los patrones habituales del tráfico y aplicar políticas destinadas a impedir conexiones no autorizadas. 

Al combinar estas capacidades de detección, alerta y segmentación de redes, MetaDefender OT Security el mecanismo de defensa ideal para entornos industriales, reduciendo de forma significativa el riesgo y el impacto de las ciberamenazas en los entornos de tecnología operativa.

Descubra cómo la plataforma de ciberseguridad de defensa en profundidad OPSWATpuede mejorar y consolidar su postura de seguridad. Hable hoy mismo con un experto para solicitar una demostración gratuita.

¡Mantente al día con OPSWAT!

Regístrate hoy mismo para recibir las últimas novedades de la empresa, historias, información sobre eventos y mucho más.