Análise dos RTUs Red Lion Sixnet
Os remote terminal units (RTUs) Sixnet da Red Lion oferecem capacidades avançadas de automação, controlo e aquisição de dados. Estes dispositivos são concebidos para sistemas de automação e controlo industrial, particularmente em setores como energia, tratamento de água e águas residuais, transporte, serviços públicos, manufatura e outros.
Para configurar e visualizar os dispositivos Sixnet, a Red Lion criou o software Sixnet IO Tool Kit, uma ferramenta para Windows que projeta, configura e monitoriza sistemas Sixnet I/O, incluindo o RTU. Comunica com os seus dispositivos através do protocolo proprietário Sixnet Universal, via UDP na porta 1594. Este software é utilizado também por outros fornecedores, como a Honeywell com o Honeywell IO Tool Kit.
Para adicionar uma camada de segurança, a Red Lion implementou um sistema de permissões de utilizador sobre o protocolo UDP. Usando o programa é possível criar utilizadores, eliminar utilizadores e editar a palavra-passe e permissões.
Quando o programa inicia uma ligação ao RTU Sixnet, tenta primeiro aceder com um utilizador anónimo e envia apenas a ação selecionada sem autenticação.
Se o utilizador anónimo não for permitido ou não tiver permissões suficientes para o comando solicitado, o RTU envia um desafio (challenge). O programa então solicita as credenciais e cria uma resposta com os dados fornecidos.
O programa envia então novamente a ação e acrescenta o response_hash no fim. Se a autenticação for bem-sucedida e o utilizador tiver permissão para executar a ação solicitada, o fluxo continua. Cada vez que o programa envia um pacote UDP, o response_hash é novamente calculado com um índice incrementado e enviado para o RTU. Se ocorrer um erro, será enviado um novo desafio (challenge) e o programa solicitará um novo utilizador e palavra-passe.
O protocolo Sixnet Universal suporta muitas funções, incluindo: gestão de ficheiros (ler, criar, escrever, etc.), definição do número da estação, obtenção de informações da estação, obtenção do kernel Linux, versão de arranque (boot version), entre outras.
Vamos explicar cada uma destas quatro partes do pacote que marcámos com cores diferentes:
Cabeçalho do Pacote: Os primeiros seis bytes de cada pacote constituem o cabeçalho.
- O primeiro byte é o método de verificação de redundância cíclica (CRC) do pacote. 0x7D corresponde a um CRC Fixo, 0x5D ao formato hexadecimal e 0x29 ao formato binário.
- O segundo byte é o comprimento do pacote, excluindo os dois primeiros bytes.
- O terceiro byte é o número da estação de destino; neste caso, 0xFF significa broadcast, pelo que todos os dispositivos que receberem este pacote irão executar o comando. O destino pode ter dois bytes se certas condições forem cumpridas.
- O quarto byte é o número da estação de origem e é estruturado da mesma forma que o terceiro.
- O quinto byte é o número da sessão e, para este código de função, deve ser 0xC0.
- O sexto byte é o número de sequência da sessão.
Comando: Representa o código da função, neste caso para executar um comando privilegiado.
Conteúdo da Mensagem: Os dados reais da mensagem, terminados em NULL; este texto será executado.
CRC: Para o método CRC Fixo referido no início, no final haverá sempre 0x1D0F.
imagen Claroty
Diz “TCP”, Ignora a Autenticação: CVE-2023-42770
Como o protocolo Sixnet Universal implementa muitas funções sensíveis, incluindo execução de código, foi adicionada uma camada de autenticação para proteger o sistema. Descobrimos que o software a correr no RTU, que está a escutar na porta UDP, também escuta na mesma porta via TCP e que, utilizando a porta TCP, é possível ignorar a autenticação.

O software da estação de engenharia não parece utilizar a variante TCP do protocolo, mas apenas UDP. A única diferença entre a forma como o software trata os dados em UDP e TCP é a verificação de autenticação. Na variante UDP, cada pacote é validado quanto a permissões e autenticação, e só se esta for válida o pacote é processado. Verificámos que, quando os dados são enviados por TCP, o pacote é processado imediatamente, sem a camada adicional de autenticação.
Se seguirmos o fluxo UDP, abaixo, podemos ver no binário sxether_client, no offset 0x10003078, a utilização da função get_message_authenticated, que analisa o pacote e o seu sufixo de autenticação. Depois, no offset 0x100030D8, podemos ver a utilização de uma função que verifica e valida a autenticação e, apenas se for válida, continua a tratar o pedido.

Por outro lado, no fluxo TCP, como se pode ver abaixo, assim que os dados são recebidos do cliente, é chamada a função get_message no offset 0x100026D0, em vez de get_message_authenticated, pelo que o sufixo de autenticação não é analisado e o pedido é processado sem qualquer verificação de autenticação.

Deste modo, ao utilizar o protocolo Sixnet Universal através da porta TCP 1594, um atacante poderia contornar todas as verificações de autenticação, executar comandos e obter execução remota de código.
Quero RCE! CVE-2023-40151
Uma das funções que o protocolo Sixnet suporta é a execução de comandos da shell Linux. O comando é utilizado com 0xd0 0x1e e permite aos clientes enviar comandos da shell Linux para serem executados. Ao executar o binário Linux id, verificámos que os comandos são executados com os privilégios mais elevados, utilizando o utilizador root:

Aqui está um exemplo de um comando que o programa envia para o RTU. A explicação sobre a estrutura do pacote encontra-se acima.

Eis um exemplo de um comando que o programa envia ao RTU. A explicação sobre a estrutura do pacote está acima.
A Concluir
A Red Lion disponibilizou patches para ambas as vulnerabilidades nos seus remote terminal units SixTRAK e VersaTRAK, resolvendo falhas que permitiam contornar a autenticação e executar código com privilégios de root.
É crucial que as organizações apliquem as atualizações fornecidas pelo fabricante para corrigir estas vulnerabilidades. Os RTUs da Red Lion são amplamente utilizados em muitos ambientes de automação industrial, e um atacante com acesso aos dispositivos e capacidade de executar comandos como root representa um risco significativo de perturbação ou danos nos processos.
A Team82 partilhou alguns detalhes sobre as vulnerabilidades e a nossa investigação demonstra que estas falhas são exploráveis e devem ser tratadas. A Red Lion publicou avisos separados com informações sobre patches e instruções. A CISA também publicou um aviso com informações de versões e medidas de mitigação.
Para aceder ao artigo original, clique aqui.
