Laboratorio básico de emulación sistemas ICS Parte 3/3

Buenas a todos en esta tercera y última parte del lab de emulación de sistemas ICS en este ataque de escritura de registros en el PLC lo primero que vamos a hacer es la lectura de la petición desde el scada al plc para entender un poco el protocolo y ver todas sus partes

Petición de lectura desde el Scada(192.168.1.162) al PLC(192.168.1.163)

Donde se ve el Function code 3 que hace referencia a Read Holding Registers

Partes básicas de la trama modbus TCP, en hexadecimal:

Cogiendo la trama modbus TCP de la imagen anterior, os pongo el esquema de todas las partes identificadas.

  • Function code: 3
  • Unit Identifier: 1
  • Lenght: 6
  • Protocol Identifier: 0
  • Transaction identifier: 932 -> 0x3a4 (que es lo que se ve en la trama)

Respuesta de lectura desde el PLC(192.168.1.163) al Scada(192.168.1.162):

Aquí vemos dentro de la misma comunicación la respuesta de vuelta al SCADA

Donde vemos el valor que aparece en el Scada leído del PLC (10) así como la dirección de registro que es el 0, que corresponde con el valor del PLC:

Nota: las direcciones o Address empiezan desde el 0, aunque en el ModbusPal aparezca 1.

Ahora nos vamos a Data sources -> Temperatura, le damos a editar y si no lo teníamos puesto tildamos la opcion de settable:

Ahora nos vamos a la pestaña de watchlist y al botón de info:

Aquí podremos mandarle comandos de Write Single register, vamos a mandarle uno y vemos en wireshark que sucede:

Una vez escrito el valor en Set a new value, haremos clic en la flecha de la derecha para enviar el comando al PLC

Wireshark con function write single register (6):

Nota: en el campo data se aprecia 001b (hexadecimal) que es el 27 en decimal

Bien ahora visto la lectura y modificación de registros, vamos a realizar lo mismo pero con SMOD  como atacante malicioso para modificar los registros de un PLC por el puerto 502 modbus TCP.

Nota: hay que tener en cuenta que esto es una simulación y los PLCs modernos tienen mecanismos de seguridad para evitar este tipo de ataques, además de sondas como por ejemplo Nozomi que detectan este tipo de ataques y alertarían de ellos al SOC-OT, no obstante esto simplemente es una prueba de concepto en un laboratorio para ver como se realizaría.

Ataque contra PLC1

Desde la máquina atacante 192.168.1.156 un kali linux , se va a usar el framework SMOD, bajado e instalado desde su repositorio en github:

SMOD: https://github.com/theralfbrown/smod-1

Smod es un framework que tiene cierto parecido con metasploit pero enfocado para Modbus:

Usamos la opción modbus/function/writeSingleRegister:

Aplicamos las opciones siguientes, y ejecutamos el exploit poniendo exploit, y vemos la respuesta:

Nota2: 0x190 es 400 en decimal, en la address 0x0 = 0 en decimal, si la address es distinta se cambiaría con el comando set RegisterAddr <valor en hex>

Ahora nos vamos al wireshark y vemos el envío de datos al PLC desde la dirección 192.168.1.156 (Kali Linux del atacante) al PLC1 - 192.168.1.163:

(0x190 es 400 en decimal)

y vamos al Scada-LTS:

Vemos como hemos hecho una escritura en el PLC y el Scada ha registrado esta “anomalía”.

Vista desde el PLC:

Y con este sencillo ejemplo hemos visto una modificación bastante simple en un PLC, de aquí hemos aprendido como funciona un datagrama Modbus TCP y como manipularlo, espero que os haya gustado y si veo que este tipo de post van gustando iré sacando algunos más.

¡Muchas gracias a todos!

Contribución gracias a Carlos Antonini

Serie Laboratorio básico de emulación sistemas ICS: Parte 1, Parte 2 y Parte 3

Comentarios