Ataque de fuerza bruta contra CX-Programmer password CQM1-CPU43
Hace unas semanas tuve una intervención un tanto particular. Un cliente había adquirido una envolvedora para palets de segunda mano parecida a la de la imagen.
La envolvedora en cuestión estaba controlada mediante un PLC de la marca Omron, modelo CQM1-CPU43. Este PLC se estuvo comercializando en España desde 1992 hasta 1998 aproximadamente. Os podéis hacer una idea de la antigüedad de la máquina.
La intervención no encerraba mayor dificultad que la de hacer una puesta en marcha y posterior modificación de una máquina sin documentación alguna, y sin soporte porque el fabricante al parecer ya no existe. Todo apuntaba a que sería algo muy divertido, y lo fue.
Una vez realizadas acometidas eléctrica y neumática se solucionan algunos problemas de conexionado y un par de fugas de aire.
Me conecto al PLC y sorpresa, el PLC tiene contraseña. Contraseña que debió poner un fabricante que ya no existe.
Esto me hizo recordar mis primeros pasos en el mundo de la automatización industrial. En aquellos años este modelo de CPU ya estaba descatalogado, de echo era el momento de transición entre el CQM1H y el CJ1. Para este modelo de PLCs había software que realizaba un ataque de fuerza bruta probando con todas las claves posibles a través del puerto de comunicaciones mediante comandos Host Link.
Esto lo corrigió Omron a partir del CQM1H limitando el número de peticiones que se podían realizar.
Mi problema parece fácil de solucionar, bajar el software y dejarlo hacer. No iba a resultar tan sencillo, la planta está en un lugar sin cobertura ni conexión a Internet (aún quedan sitios así) y mi tiempo es muy limitado como para ir al sitio más cercano con cobertura y ponerme a buscar el software en cuestión. La idea de crear el software tampoco era viable, aun siendo un software bastante sencillo se necesitan dos cosas: Especificaciones de los comandos FINS y tiempo para desarrollarlo.
Mi primera reacción es pulsar el botón de “Desactivar Contraseña” e introducir un par de claves al azar, lo que me da una idea para resolver el problema sobre la marcha sin tener que buscar el software “rompe claves”.
Llevo instalado en el portátil “AutoIt”, del cual podéis encontrar información en su página oficial http://www.autoitscript.com. Se trata de un lenguaje de scripting “BASIC-like” gratuito diseñado para automatizar tareas en el GUI de Windows, haciendo muy fácil la simulación de pulsaciones de teclado, movimientos del mouse, control de ventanas, etc.
Bueno, vamos a ello, creamos un pequeño Script que simule el mecanismo de estar introduciendo claves en el CX-Programmer y aceptando el mensaje que aparece, como si lo hiciésemos desde el propio teclado.
Lo que hacemos es generar los valores desde 1 hasta 9999, pero teniendo en cuenta que se requiere una longitud de cuatro caracteres como contraseña añadiremos ceros a la izquierda. El script quedó tal que así:
El código no está comentado y no se controla la respuesta de CX-Programmer, al fin y al cabo es un script de usar y tirar para salir del paso. Al inicio del Script hay un retraso de 5 segundos para una vez lanzado tengamos tiempo de pulsar el botón “Desactivar contraseña” de CX-Programmer y poner el foco en la caja de texto que aparece.
Una vez comienza el Script se van probando contraseñas igual que si fuésemos tecleando al azar. Lo único que hacemos es automatizar el proceso recorriendo todas las posibilidades, con lo que nos aseguramos el acierto. Vamos, un ataque de fuerza bruta realizado de una forma aún “más bruta”.
El resultado de la prueba fue satisfactorio, no puedo decir exactamente cuánto tiempo tardó, ya que mientras se ejecutaba aproveché para realizar tareas de ajuste y comprobación de sensores, sentido de giro de motores, etc.
Una vez conectados al PLC, aún sin tener esquemas ni documentación fue sencillo, el funcionamiento de la máquina es muy básico y el número de E/S muy pequeño.