Seguridad en la actualización de un PLC

Publicado el 26/01/2017, por INCIBE
Seguridad en la actualización de un PLC

Los dispositivos utilizados en los sistemas de control llevan, además de la programación específica de las tareas que controla, un firmware que es un programa informático que establece la lógica de más bajo nivel encargado de controlar los circuitos electrónicos. Por norma general, el firmware de los dispositivos no varía en todo el ciclo de vida, aunque puede haber excepciones dependiendo del fabricante y de las actualizaciones o versiones que vaya publicando. Por el contrario, la programación específica de los dispositivos sí suele variar a lo largo del ciclo de vida, bien por cambios en su finalidad, bien por cambios en las funciones a controlar o los productos a fabricar.

Un dispositivo de control realiza una serie de funciones de acuerdo a una programación, que básicamente se limita a leer una serie de valores o variables y tomar acciones de acuerdo a dichos valores. En determinados sistemas de control estáticos, como una central eléctrica o una planta potabilizadora, es raro requerir de modificaciones de la programación; pero otros entornos, como una cadena de montaje automovilística o una fábrica de creación de cajas, requieren de reprogramación de los dispositivos de control para adaptarse a nuevos diseños finales cada poco tiempo.

Aunque los antiguos dispositivos de control requerían de programación local, la mayoría de los nuevos dispositivos permiten una actualización de forma remota, y no siempre se utilizan los métodos más seguros para llevarla a cabo.

Actualización de la programación

La programación de cualquier dispositivo de un sistema de control suele llevarse a cabo mediante una aplicación específica del fabricante instalada generalmente en una estación de ingeniería. Esta aplicación va asociada al dispositivo, y es habitual que no se puede utilizar para actualizar todos los equipos del sistema a no ser que sean modelos similares (algunos fabricantes utilizan la misma herramienta para todos sus equipos).

Descarga de programación de un dispositivo de control

- Descarga de programación de un dispositivo de control -

La conexión entre la aplicación y el dispositivo suele realizarse mediante protocolos como Telnet o FTP, aunque las versiones más modernas ya utilizan SSH. Las credenciales y la configuración para la conexión están guardadas en la propia aplicación la mayoría de las ocasiones, y, además, suelen ser desconocidas para los operadores y clientes.

Además muchas aplicaciones utilizan diferentes protocolos para realizar la programación dependiendo de las acciones que estén realizando en cada momento, así es habitual encontrar tráfico en protocolos IT (como HTTP, telnet, SSH, etc.) mezclado con protocolos industriales (ModBus, DNP3, etc.).

Buenas prácticas

La actualización de un dispositivo de control debería llevarse a cabo siempre en un entorno controlado o test, donde un error en la actualización no implique una parada de producción y no ponga en riesgo a otros dispositivos ni a los operarios que los controlan.

Además de utilizar un entorno controlado, la siguiente medida para asegurar el correcto traspaso de la nueva configuración es utilizar una red aislada sin conexión a la red de producción, como puede ser una red de laboratorio o incluso una conexión directa entre el equipo con la aplicación de configuración y el equipo a programar, de manera que no se pueda tener acceso al dispositivo desde otras redes de la empresa y mucho menos desde internet. De esta manera se limitan los posibles ataques de captura de información que pudieran suceder por no utilizar cifrado.

Si disponer de una red aislada en un entorno controlado no convence al operador en cuanto a la seguridad que le puede aportar, entonces es momento para el uso de herramientas de seguridad, como cortafuegos o IPS. En este momento, los retardos no son algo a tener en cuenta, puesto que no hay datos críticos limitados en tiempo en tránsito, por lo que todas las medidas de seguridad son aplicables en este escenario.

Si se quiere que la actualización sea la más segura posible se han de utilizar para el traspaso de configuraciones protocolos seguros. En muchos casos no hay posibilidad de elección de los protocolos que se utilizan, ya que son definidos directamente por el fabricante durante el proceso de desarrollo del producto, pero en ocasiones se dispone de la posibilidad de elección, sobre todo entre Telnet y SSH o HTTP y HTTPS.

Una vez que el equipo está actualizado, y posteriormente se prueba en un entorno controlado, hay que instalarlo de nuevo en producción. Para ello es preciso deshabilitar los puertos de configuración y cambiar las contraseñas por unas robustas, de manera que el equipo no pueda ser nuevamente actualizado sin conocimiento del operador.

Protección con herramientas de seguridad

Utilizar reglas tanto de cortafuegos como de IPS para permitir el tráfico sólo desde un equipo concreto al dispositivo asegura que nadie ajeno al operador interfiere en la programación.

En el cortafuegos se utilizarán reglas que identifiquen el origen y el destino de la información, así como el tipo de tráfico que se va a intercambiar. Se utilizarán reglas tipo:

  iptables -A INPUT -p tcp -i eth0 -s IP_operador –d IP_dispositivo --dports 22,80,443,XXX -m state --state NEW,ESTABLISHED -j ACCEPT

Las reglas de filtrado del IPS han de ser más específicas, identificando qué paquetes concretos son los que se permiten y eliminando el resto.

  drop tcp !IP_operador any -> IP_dispositivo any (msg:"mensaje alerta";content:”contenido”; nocase;offset:12;classtype:web-application-activity;reference:url,http://certsi.es;sid:1000001;rev:1;)

Análisis del proceso de programación del PLC TBOX

Entre nuestro equipamiento de test disponemos de un PLC TBOX del que hemos realizado una captura de tráfico mientras lo configurábamos.

Captura de tráfico durante la programación del PLC

- Captura de tráfico durante la programación del PLC -

Durante este proceso hemos observado que este equipo en concreto utiliza dos protocolos para hacer el traspaso de información desde la aplicación de desarrollo hasta el equipo: SSH y ModBus. Con el uso del protocolo SSH, el PLC realiza un intercambio de claves entre el PLC y la estación de ingeniería utilizando el algoritmo de Diffie-Hellman para utilizar un canal seguro a la hora de transferir el resto de datos.

El proceso de programación consta de varios intercambios de información utilizando los protocolos mencionados, empezando por una comunicación Modbus, utilizando peticiones dentro del rango definido por el protocolo como de libre implementación para los desarrolladores, y a través del cual se intercambia toda la configuración del dispositivo.

Información intercambiada a través del protocolo ModBus

- Información intercambiada a través del protocolo ModBus -

Fichero de configuración en formato XML intercambiado

- Fichero de configuración en formato XML intercambiado -

Este fichero, de ser capturado puede proporcionar mucha información para la preparación de un ataque específico ya que proporciona la versión de muchas librerías en uso en el firmware del PLC.

La programación continúa con una comunicación SSH, que al ir cifrada, no permite vislumbrar la información intercambiada.

Información intercambiada por SSH

- Información intercambiada por SSH -

Posteriormente se vuelve a transmitir el fichero de configuración mediante ModBus para realizar nuevamente intercambio de datos a través de SSH. El proceso finaliza con el envío de nuevo del fichero de configuración resultante por ModBus tras la reprogramación.

A veces los fabricantes utilizan métodos que no se exponen en las especificaciones de los productos. Por este motivo es importante realizar pruebas de los dispositivos en entornos controlados para poder crear las reglas de cortafuegos e IDS/IPS de manera adecuada.  Determinadas tareas no deberían realizarse nunca directamente en producción para prevenir posibles brechas de seguridad.