Artículo Técnico | Manipulando Modbus

Techpapers

Modbus es el protocolo de comunicación estándar de facto para el mundo industrial. Inicialmente fue diseñado para ser utilizado en las comunicaciones en serie (Modbus RTU/ASCII). Sin embargo, no hace mucho, se adaptó a TCP debido a la creciente popularidad de la pila TCP/IP. Dado que fue diseñado originalmente para líneas seriales controladas, Modbus no tiene ninguna característica de seguridad.

En este documento, escribimos varios benchmarks para evaluar el rendimiento de los dispositivos de red que ejecutan Modbus TCP. Los parámetros reportados por nuestros benchmarks incluyen: (1) tiempo de respuesta a las solicitudes de Modbus, (2) número máximo de solicitudes gestionadas con éxito por los dispositivos Modbus en tiempo, y (3) la monitorización de los dispositivos Modbus cuando sufren un ataque de denegación de servicio distribuido. Debido a la creciente adopción de las tecnologías IoT, presentamos en este trabajo el protocolo Modbus y seleccionamos varias herramientas para manipularlo. 

Introducción

Cuando se trata de redes ICS, Modbus es el protocolo más utilizado en las diferentes industrias. La razón de su uso excesivo es que fue introducido en el mercado hace más de 30 años, y debido a los límites de cambio de la industria en los últimos años, la mayor parte de la red industrial continúa utilizándolo. Este protocolo de comunicación en serie fue inventado en 1979 por Schneider Electric, desarrollado para aplicación industrial y libre de derechos de autor, es considerado como uno de los estándares para las comunicaciones industriales.

En este trabajo comenzamos presentando los conocimientos básicos de ICS y su arquitectura. En el capítulo 2 presentamos Modbus como un protocolo estándar de red ICS. Luego, en el capítulo 3, explicamos cómo analizar el tráfico Modbus. En el capítulo 4, presentamos varias herramientas para simular y explotar el tráfico Modbus en la red ICS. inventado en 1979 por Schneider Electric y, desarrollado para aplicación industrial y libre de derechos de autor considerado como uno de los estándares para las comunicaciones industriales. En este trabajo comenzamos presentando los conocimientos básicos de ICS y su arquitectura. En el capítulo 2 presentamos Modbus como un protocolo estándar de red ICS. Luego, en el capítulo 3, explicamos cómo analizar el tráfico Modbus. En el capítulo 4, presentamos varias herramientas para simular y explotar el tráfico Modbus. Por último, concluimos con nuestra aportación sobre este trabajo.

ICS

Los sistemas de control industrial (ICS) son dispositivos, sistemas, redes y controles utilizados para operar y/o automatizar los procesos industriales. Estos dispositivos se encuentran a menudo en casi cualquier industria, desde el segmento de fabricación de vehículos y transporte hasta el de energía y tratamiento de aguas. Las redes de Control de Supervisión y Adquisición de Datos (SCADA) son sistemas y/o redes que se comunican con ICS para proporcionar datos a los operadores con fines de supervisión, así como capacidades de control para la gestión de procesos. A medida que la automatización sigue evolucionando y adquiere mayor importancia en todo el mundo, el uso de los sistemas ICS/SCADA va a ser aún más frecuente.

Los sistemas ICS/SCADA han sido la comidilla de la comunidad de seguridad en los últimos años debido a Stuxnet, Flame y otras amenazas y ataques. Aunque la importancia y la falta de seguridad que rodea a los sistemas ICS/SCADA está bien documentada y es ampliamente conocida, este documento de investigación ilustra quién está atacando realmente los sistemas ICS/SCADA orientados a Internet y por qué. También cubre las técnicas para asegurar estos sistemas y algunas de las mejores prácticas para hacerlo. Un despliegue típico suele tener una red SCADA segregada que está conectada a través de un cortafuegos o con una conexión aérea a Internet. Como en la mayoría de los despliegues de ICS, los cortafuegos son una rareza, así que tenga en cuenta que un cortafuegos no se muestra en el siguiente diagrama por esta razón. Tampoco se mencionan los cortafuegos en todo el análisis.

Imagen 1. Implantación de sistemas ICS/SCADA simples

MODBUS

Modbus es un protocolo de mensajería de capa de aplicación, situado en el nivel 7 del modelo OSI, que proporciona una comunicación Maestro/Esclavo entre dispositivos. El protocolo Modbus se utiliza para transmitir información a través de líneas seriales entre dispositivos electrónicos. El dispositivo que solicita la información se denomina Maestro Modbus y los dispositivos que la suministran son Esclavos Modbus. En una red Modbus estándar, hay un Maestro y hasta 247 Esclavos, cada uno con una dirección única de Esclavo de 1 a 247. El Maestro también puede escribir información en los Esclavos. Modbus es un protocolo de petición y respuesta (Devanshi N. Patel, 2017).

Los códigos de función de Modbus son elementos de unidades de datos de protocolo (PDU) de solicitud/respuesta de Modbus. A nivel físico, Modbus puede utilizar diferentes interfaces físicas como RS485, RS232. La interfaz bifilar RS485 es la más común. La interfaz serie RS232 se utiliza para la comunicación a corta distancia mientras que la interfaz serie RS485 se utiliza para la comunicación a larga distancia. El formato de paquete de Modbus puede ser ver en la siguiente tabla. Un mensaje Modbus enviado desde un maestro a un esclavo contiene la dirección del esclavo, el código de función y los datos.

Dirección del esclavo

Cada esclavo tiene su dirección de unidad única de 1 a 255. Cuando el maestro solicita datos. La dirección del esclavo es de 1 byte. En este sistema, se utilizan dos esclavos y la dirección esclavo de estos esclavos se establecen como ‘UI2’ y ‘UI4’.

Imagen 2. Formato del paquete Modbus

Código de función

Este código indica al esclavo a qué tabla debe acceder y si debe leer o escribir en ella. En este sistema se utilizan las funciones de lectura y escritura y el código de función para la lectura es ’01’ para la bobina y ’03’ para el registro. La función para escribir es ’06’. Las funciones Modbus más comunes permiten leer y escribir datos desde/a un PLC. También existen otras funciones como la lectura de archivos y las funciones de diagnóstico. Los códigos de función Modbus no documentados también pueden ser utilizados para realizar acciones específicas. La siguiente tabla muestra las funciones más utilizadas.

Imagen 3. Código de funciones Modbus

Datos

Los datos deben ser definidos por el usuario. Puede ser de 0 a 252 bytes.

Imagen 4. Red Modbus

Uso de modbus con wireshark

Para utilizar Wireshark en un tráfico Modbus, necesitamos primero recoger el tráfico Modbus utilizando un sniffer de red. Modbus PCAPs se pueden encontrar fácilmente en línea. Al tener un archivo Modbus PCAP:

  • Iniciamos wireshark
Imagen 5. Uso de Wireshark para el análisis del tráfico

 

Imagen 6. Seleccionando el archivo PCAP

 

  • Haga clic en abrir un archivo de captura
  • Seleccione el archivo PCAP
  • En el campo de filtro escriba «modbus»
Imagen 7. Filtrando tráfico

 

  • Puede ver directamente la función por ejemplo y más información relacionada con las transacciones seleccionadas.
Imagen 8. Datos de tráfico

Uso de modbuspal como simulador de esclavos modbus

Después de descargar el código fuente de ModbusPal, primero ejecutamos el ModbusPal en una VM1 de Linux. El comando para ejecutar el ModbusPal es:

#java – jarModbusP al.jar

  • Cuando el programa se inicia, haga clic en el botón «Añadir» para añadir manualmente dos esclavos (ID: 2 y 4).
  • Haga clic en el icono «ojo» en una barra de Esclavos para abrir el panel de Esclavos y edite su contenido.
  • En cada panel de Esclavo, añada registros de retención (16 bits) y bobinas (bit), y cambia algunos de sus valores. (Tenga en cuenta que la bobina sólo tiene un valor de 0 o 1).
  • A continuación, haga clic en el botón «Ejecutar» en ModbusPal para ejecutar el simulador, que escuchará y aceptará las conexiones TCP entrantes al puerto 502.
Imagen 9. Bobinas de lectura

Uso de qmodmaster como maestro modbus simulador

  • Inicie el Simulador QModMaster en una VM2 de Windows.
  • Edite la opción «Modbus TCP…» en el menú «Opciones», y ponga la dirección IP del ModbusPal (VM1).
  • Haga clic en el botón «Conectar» para que el Maestro establezca el puerto TCP 502 con el ModbusPal.
  • Ahora el Maestro está listo para acceder/modificar los datos de los Esclavos.
Imagen 10. Uso de QModMaster como simulador de maestro Modbus

Uso de qmodmaster y modbuspal

Leer los datos del esclavo

  • QModMaster, cambie el «Slave Addr» para que sea el ID del esclavo que desea consultar, seleccione el «Código de función» para leer los registros del esclavo o leer las bobinas. Elija el «Número de registros/bobinas» para que sea menor o igual que el número de registros/bobinas que haya creado en el nodo Esclavo.
  • Pulse el botón de menú «Lectura/Escritura» para leer los datos.

La siguiente figura muestra que el Maestro obtiene los datos de los registros del Esclavo 2 los datos de la bobina del Esclavo 4.

Imagen 11. Uso de QModMaster y ModbusPal

Modificar los datos del esclavo

Probando que el Maestro Modbus escriba los datos de los Registros/Cobras a los Esclavos.

  • Cambie el código de función a «Write Multiple Registers».
  • Cambie el número de Registros para que sea menor o igual al número predefinido de registros del Esclavo.
  • Cambie los valores de esos registros,
  • Haga clic en el botón de comando «Lectura/Escritura», y podrá ver que los valores de los registros en el correspondiente ModbusPal Slave se han actualizado.

La siguiente figura muestra un cambio de múltiples registros en QModMaster.

Imagen 12. El maestro Modbus modifica varios registros en el esclavo remoto

Uso de metasploit para modificar los esclavos modbus

Debido a que el Maestro Modbus se comunica con los Esclavos en texto plano y no hay procedimiento de autenticación, un atacante puede generar fácilmente el mismo formato de paquetes de consulta a Esclavos Modbus para acceder/modificar los registros/bobinas de los Esclavos, siempre y cuando:

  • La máquina del atacante pueda enviar paquetes a Modbus Slave.
  • Los paquetes enviados por el atacante siguen el formato del protocolo Modbus formato.

Los hackers han incorporado módulos de ataque Modbus en Metasploit, por lo que el segundo requisito anterior puede ser superado mediante el uso de Metasploit. En Kali Linux, ejecute «msfconsole» para iniciar Metasploit. Al buscar modbus, puedes encontrar los siguientes módulos de ataque: 

En este experimento, utilizamos una segunda VM de Kali Linux (VM3:192.168.1.103) para lanzar el ataque Metasploit. Para satisfacer el primer requisito anterior, la VM3 debe colocarse en la misma LAN que la VM objetivo (VM1: 192.168.1.104) donde ModbusPal está en funcionamiento.

Imagen 13. Uso de METASPLOIT para modificar los registros de los esclavos Modbus

Escáner de esclavos Modbus

Podemos utilizar el módulo de ataque «modbus findunitid» de Metasploit para escanear y averiguar si todos los esclavos Modbus existen en la LAN o detrás de un Modbus Gateway. Para los dos esclavos creados por ModbusPal mostrados en la Figura 2, el procedimiento de escaneo de Esclavos Modbus se ilustra en la figura siguiente. El único parámetro a establecer es la dirección IP ‘rhost’ dirección IP (IP de destino), y podemos ver que los esclavos ID 2 y 4 han sido encontrados.

Imagen 14. Escaneo de esclavos Modbus

Acceso/Modificación de datos del esclavo modbus

Podemos utilizar el módulo de ataque «modbusclient» [2] de Metasploit para leer/escribir registros/coils en un determinado Modbus Slave. La siguiente prueba utiliza el ejemplo de Modbus mostrado en la Figura 2. La acción por defecto del módulo Modbusclient es leer registros. La siguiente figura muestra cómo leer los 5 valores de los registros del Esclavo 2. Tenga en cuenta que la dirección de datos’ 0 significa la dirección 1 en la GUI de ModbusPal del panel.

Imagen 15. Acceso y modificaciones de datos del esclavo Modbus

 

Imagen 16. Leyendo valores registrados de Slave 2

 

Ahora cambiamos la opción ‘action’ a «WRITE COILS» para escribir los valores de varias bobinas en el Esclavo 4. El procedimiento de ataque se ilustra en la siguiente figura. Los valores de las bobinas de 10 bits de las bobinas se pueden ver actualizados en el Esclavo 4 en el objetivo VM1.

Imagen 17. Escritura de los valores de los registros en el Esclavo 4

Conclusión

En este trabajo hemos presentado el protocolo Modbus y varias herramientas que se pueden utilizar para analizarlo en la sección, emularlo en sección y explotarlo en la sección.

Referencias

http://www.modbus.org/ 

https://www.rapid7.com/db/?type=metasploit

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar

keyboard_arrow_up