A proteção dos sistemas de controlo industrial e dos ambientes OT contra ataques remotos é mais crítica do que nunca, especialmente com vulnerabilidades como a CVE-2017-14469 e agora a CVE-2021-22659 que visam o controlador Micrologix 1400 da Rockwell Automation, amplamente utilizado. Os estudantes do Programa de Bolsas de Estudo OPSWAT testaram esta vulnerabilidade num ambiente controlado, realçando a necessidade de segurança.
Neste blogue, exploramos a forma como os alunos demonstraram como os atacantes podem explorar a vulnerabilidade para causar falhas nos sistemas e como a falta de validação de entrada adequada pode ser aproveitada para interromper as operações do PLC.
O que é um PLC? Explicação sobre o Micrologix 1400 da Rockwell Automation
Um PLC (Programmable Logic Controller - Controlador Lógico Programável) é um computador industrial concebido para automatizar processos através do controlo de máquinas e outras operações industriais. Funciona em ambientes difíceis e está programado para executar tarefas específicas com base na entrada de sensores. O controlador MicroLogix 1400 da Rockwell Automation é um PLC compacto e modular, normalmente utilizado em aplicações de pequena e média dimensão. Conhecido pela sua rentabilidade e flexibilidade, suporta vários protocolos de comunicação e oferece opções de E/S digitais e analógicas para interface com dispositivos.
A programação é normalmente feita utilizando o software da Rockwell Automation através da lógica ladder, permitindo aos utilizadores criar sequências de controlo. O MicroLogix 1400 é versátil, adequado para tarefas como o controlo de máquinas e a automatização de processos. A sua modularidade permite aos utilizadores expandir e personalizar o sistema com base em requisitos de aplicação específicos.
Introdução ao CVE-2021-22659
Em janeiro de 2021, a Rockwell Automation recebeu um relatório de Parul Sindhwad e Dr. Faruk Kazi do COE-CNDS no Veermata Jijabai Technological Institute (VJTI), Índia, sobre uma vulnerabilidade no controlador MicroLogix™ 1400. Identificaram uma falha de segurança na versão 21.6 e anteriores que permite a um atacante remoto não autenticado enviar um pacote Modbus especialmente criado, permitindo ao atacante recuperar ou modificar valores aleatórios no registo. Se explorado com sucesso, isso pode levar a um estouro de buffer, resultando em uma condição de negação de serviço. O LED de FALHA piscará a VERMELHO e as comunicações podem perder-se. A recuperação da condição de negação de serviço requer que a falha seja eliminada pelo utilizador.
A NVD avaliou esta vulnerabilidade de segurança como sendo de gravidade elevada.
Fases de ataque
Um atacante remoto, não autenticado, com acesso à rede do vulnerável PLC MicroLogix 1400 pode enviar um pacote especialmente criado para modificar os valores no registo. Isto poderia potencialmente causar uma condição de negação de serviço para o dispositivo, resultando em corrupção do sistema e tempo de inatividade. Um incidente deste tipo pode perturbar significativamente as operações de fabrico e outras actividades comerciais da organização.
Protocolo Modbus
Desenvolvido pela Modicon em 1979, o protocolo Modbus é uma estrutura de mensagens concebida para estabelecer a comunicação cliente-servidor entre dispositivos inteligentes. Originalmente concebido para ser utilizado com os PLCs da Modicon, tornou-se desde então um protocolo de comunicação padrão para a comunicação entre dispositivos electrónicos industriais.
Existem protocolos Modbus para Ethernet (Modbus TCP) e linhas de série (Modbus RTU e Modbus ASCII). O Modbus RTU (Remote Terminal Unit) transmite diretamente dados em formato binário através de comunicação série, e o Modbus TCP (Transmission Control Protocol) incorpora os dados do protocolo Modbus em pacotes TCP para transmissão através de redes TCP/IP.
Estrutura da mensagem Modbus
O Modbus é um protocolo de pedido-resposta em que o cliente transmite um pedido a um dispositivo Modbus e o dispositivo fornece subsequentemente uma resposta.
Uma mensagem Modbus enviada de um primário para um secundário contém o endereço do secundário, o "comando" (por exemplo, "ler registo" ou "escrever registo"), os dados e uma soma de verificação (LRC ou CRC).
Os endereços de dados são utilizados nas mensagens de consulta Modbus quando se lêem ou modificam dados. O Modbus define quatro tipos de dados: Bobina, Estado de entrada, Registo de entrada e Registo de retenção. Dois deles armazenam valores on-off (1-bit) chamados Bobinas e Entradas Discretas, e dois armazenam valores numéricos como palavras de 16-bit chamadas Registos. Cada um deles é só de leitura ou de leitura/escrita.
Tipo de dados | Acesso | Descrição |
Bobina | Leitura-escrita | Saídas de bit único. |
Entrada discreta | Só de leitura | Entradas de bit único. |
Registo de entrada | Só de leitura | Registos de entrada de 16 bits. |
Registo de retenção | Leitura-escrita | Registos de saída de 16 bits. |
Existem três categorias de códigos de função Modbus:
- Códigos de função pública - De 1 a 127, exceto para os códigos definidos pelo utilizador.
- Códigos de função definidos pelo utilizador - em duas gamas, de 65 a 72 e de 100 a 110.
- Códigos de função reservados - Utilizados por algumas empresas para produtos antigos e não disponíveis para utilização pública.
Tipo de função | Nome da função | Código de função | ||
Acesso aos dados | Acesso aos bits | Entradas físicas discretas | Ler entradas discretas | 2 |
Bits internos ou bobinas físicas | Ler bobinas Escrever uma única bobina Escrever várias bobinas | 1 5 15 | ||
Acesso de 16 bits | Registos de entrada física | Ler registos de entrada | 4 | |
Registos internos ou registos de saída física | Ler vários registos de retenção Escrever um único registo de retenção Escrever vários registos de retenção Ler/escrever vários registos Registo de escrita de máscaras Fila de espera de leitura FIFO | 3 6 16 23 22 24 | ||
Acesso ao registo de ficheiros | Ler registo de ficheiro Escrever registo de ficheiro | 20 21 | ||
Diagnóstico | Ler o estado da exceção Diagnóstico Obter contador de eventos Com Obter registo de eventos Com Comunicar ID do escravo Ler a identificação do dispositivo | 7 8 11 12 17 43 | ||
Outros | Interface de transporte encapsulada | 43 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso a bits Categoria: Entradas Discretas Físicas Nome da função: Ler Entradas Discretas Código da função: 2 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso a bits Categoria: Bits internos ou bobinas físicas Nome da função: Ler bobinas Código da função: 1 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso a bits Categoria: Bits internos ou bobinas físicas Nome da função: Escrever bobina simples Código da função: 5 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso a bits Categoria: Bits internos ou bobinas físicas Nome da função: Escrever bobinas múltiplas Código da função: 15 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos de entrada física Nome da função: Ler registos de entrada Código da função: 4 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Ler Registos de Retenção Múltiplos Código da função: 3 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Write Single Holding Register Código da função: 6 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Escrever Registos de Retenção Múltiplos Código da função: 16 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Ler/Escrever Registos Múltiplos Código da função: 23 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Mask Write Register Código da função: 22 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso de 16 bits Categoria: Registos Internos ou Registos de Saída Física Nome da função: Ler fila FIFO Código da função: 24 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso ao Registo de Ficheiros Nome da função: Ler registo de ficheiro Código da função: 20 |
Tipo de função: Acesso aos dados Sub-tipo: Acesso ao registo de ficheiro Nome da função: Escrever registo de ficheiro Código da função: 21 |
Tipo de função: Diagnóstico Nome da função: Ler estado de exceção Código da função: 7 |
Tipo de função: Diagnóstico Nome da função: Diagnóstico Código da função: 8 |
Tipo de função: Diagnóstico Nome da função: Obter contador de eventos Com Código da função: 11 |
Tipo de função: Diagnóstico Nome da função: Obter registo de eventos Com Código da função: 12 |
Tipo de função: Diagnóstico Nome da função: Report Slave ID Código da função: 17 |
Tipo de função: Diagnóstico Nome da função: Ler a identificação do dispositivo Código da função: 43 |
Tipo de função: Outra Nome da função: Encapsulated Interface Transport Código da função: 43 |
Exploração
Análise de vulnerabilidade
Através da análise, os nossos bolseiros de pós-graduação OPSWAT descobriram que, durante a comunicação Modbus TCP, o protocolo não possui autenticação e encriptação para os pacotes transmitidos. Além disso, a validação de entrada no PLC MicroLogix 1400 não é implementada corretamente. Consequentemente, um atacante remoto pode analisar o pacote Modbus TCP através de packet sniffing e enviar qualquer pedido ao PLC sem autenticação através do protocolo Modbus TCP. Devido à falta de validação de entrada do dispositivo PLC MicroLogix 1400, um atacante remoto autenticado pode enviar um grande número de pacotes com valores aleatórios, causando potencialmente a falha do PLC.
Sobreposição de registos
Inicialmente, tentámos capturar os pacotes Modbus TCP utilizados para ler ou escrever registos no PLC. Para tal, examinámos os pacotes gerados por uma aplicação denominada Modbus Poll, que facilita a leitura e a escrita de registos no PLC MicroLogix 1400.
Utilizando o Wireshark para capturar todos os pacotes da interface de rede, foi possível identificar o pacote Modbus TCP para escrever um único registo:
Com base na estrutura dos pacotes detectados, desenvolvemos um script Python simples para enviar pacotes TCP solicitando a escrita de um registo no PLC alvo. Neste cenário, o endereço IP do PLC é 192.168.93.89.
O registo do PLC foi alterado depois de receber o nosso pacote malicioso não autenticado.

No Micro Logix 1400, a maioria das instruções matemáticas utiliza três parâmetros: Fonte A, Fonte B e Destino
Os valores da Fonte A e da Fonte B podem vir de dois registos de 16 bits denominados N13:3 e N13:4. Além disso, os valores nestes registos de 16 bits, tais como N13:3 e N13:4, estão limitados ao intervalo de -32,768 a +32,767. Se os valores de N13:3 e N13:4 forem grandes, o resultado da instrução de correspondência pode exceder o intervalo máximo do tipo de dados, causando potencialmente uma falha no PLC. Consequentemente, para induzir uma falha no PLC, é necessário escrever grandes valores aleatórios em todos os registos, incluindo N13:3 e N13:4. Para o conseguir, modificámos o nosso script Python da seguinte forma:
Simular o ataque
Para simular um ataque real, os nossos bolseiros de pós-graduação OPSWAT tentaram induzir uma avaria no PLC MicroLogix 1400 localizado nos laboratórios CIP OPSWAT , partindo do princípio de que tanto o atacante como o PLC estão na mesma rede e são capazes de comunicar entre si.
No estado operacional normal do PLC MicroLogix 1400 da OPSWAT Labs, com o PLC no modo REMOTE RUN, todos os valores dos registos são válidos e estão dentro do intervalo designado para os seus tipos de dados, indicando que o programa do utilizador está a funcionar corretamente.
Após a execução do nosso script Python, vários pacotes Modbus TCP serão enviados para o PLC, solicitando a escrita de grandes valores aleatórios em todos os registos sem autenticação:
Depois de receber estes pedidos de pacotes maliciosos, os valores de todos os registos, incluindo N13:3 e N13:4, são definidos para 16.990. O resultado da operação ADD nos registos N13:3 e N13:4 excede o intervalo válido de um registo de 16 bits. Este problema provoca um excesso de número inteiro, conduzindo a uma falha e interrompendo o funcionamento do PLC, como indicado pelo estado FAULTED.
Os nossos bolseiros graduados OPSWAT conseguiram fazer cair o PLC MicroLogix 1400 explorando o CVE-2021-22659.
Remediação
Face a vulnerabilidades como a CVE-2021-22659, a correção abrangente é crucial para proteger os sistemas OT e ciber-físicos. De seguida, apresentam-se algumas das principais estratégias que podem ser utilizadas para evitar a propagação de ataques:
- Deteção de CVEs conhecidos: Verificar regularmente as redes em busca de vulnerabilidades como a CVE-2021-22659.
- Monitoramento de comportamentos anômalos: Identificação de aumentos incomuns na frequência de comunicação com o PLC Micrologix 1400, o que pode sugerir um ataque em andamento de transferência de dados não autorizada.
- Identificação de novas ligações de dispositivos: O sistema deve detetar quando um novo dispositivo se liga ao PLC.
- Segmentação da rede: O isolamento dos dispositivos afectados pode ajudar a evitar a propagação lateral dos ataques, minimizando assim o impacto.
MetaDefender OT Security da OPSWATatende a essas necessidades detectando CVEs, monitorando continuamente a rede em busca de comportamentos incomuns e identificando conexões não autorizadas. Utilizando IA, aprende padrões de tráfego normais, estabelece um comportamento de base e implementa políticas para alertar anomalias. Isto permite respostas instantâneas e informadas a potenciais ameaças.
No caso de um ataque que explora o CVE-2021-22659, MetaDefender OT Security integra-se com o MetaDefender Industrial Firewall para bloquear comunicações suspeitas com base em regras definidas. O firewall usa IA para aprender padrões de tráfego regulares e aplicar políticas para evitar conexões não autorizadas.
Ao combinar estas capacidades de deteção, alerta e segmentação de rede, MetaDefender OT Security torna-se o mecanismo de defesa ideal para ambientes industriais, reduzindo significativamente o risco e o impacto das ameaças cibernéticas em ambientes de tecnologia operacional.
Explore como a plataforma de segurança cibernética de defesa em profundidade da OPSWATpode melhorar e amadurecer a sua postura. Fale com um especialista hoje para uma demonstração gratuita.