Hackeando un Moeller Easy 512

publicado en: Klockner Moeller, Seguridad | 2

Situación: se necesita extraer el programa de un controlador Klockner Moeller Easy 512, pero está protegido por contraseña. La empresa canadiense que lo instaló cerró hace años y no hay otro modo de obtener el software. Personalmente no hubiese intentado hacer lo que a continuación voy a describir, porque leí en el manual que, al tercer intento fallido, el programa se borra (y se vuelve a conceder acceso). Pero no es así: quien me lo trae ha estado probando contraseñas al azar y sigue sin poder iniciar sesión. En cualquier caso, advierto: si alguien repite esto, posiblemente con un PLC con otra configuración, puede perder el programa.
Easy512
Ya en general, la seguridad en automática no ha sido nunca una cualidad destacable. Al contrario, los sistemas de control se han concebido tradicionalmente como cerrados y de acceso exclusivamente físico por personal de confianza. Es un error lamentable. Por todo el mundo hay repartida una cantidad apabullante de instalaciones desprotegidas. No quiero ser alarmista, pero se trata de una asignatura pendiente que no se debería postergar.
Retomemos el Klockner Moeller. El software de programación, EasySoft, lo primero que pide al establecer la conexión es la contraseña. Y ante fallo desconecta y no admite otra acción. Hasta aquí, poco que objetar, no hay que olvidar que hablamos de un PLC de baja gama. Lo que lo hace tan vulnerable es la limitación sobre la contraseña: cuatro caracteres numéricos. Es decir, que en pocos minutos va a caer ante un ataque de fuerza bruta.
Una opción interesante sería suplantar directamente a la aplicación (la comunicación se realiza por el puerto serie) y lanzarle intentos. Pero no disponía de mucho tiempo, así que me decanté por una alternativa que, por otra parte, puede repetirse en otros contextos, razón por la que me he animado a publicarla. Se trata de mandar pulsaciones de teclas directamente al desplegable que solicita la contraseña.
Para ello, me instalé el programa AutoHotkey. No sé si es bueno, es el primero que encontré buscando en Google. Lo que sí puedo decir es que tiene una sintaxis algo retorcida. Los script se crean con cualquier editor de texto, se graban con la extensión .ahk y están listos para ejecutar. Asigné la combinación CTRL+h para iniciar el envío de pulsaciones del teclado, y la tecla ESC para detenerlas. Manda, como he comentado, todas las contraseñas desde 0000 hasta 9999 acompañadas de dos pulsaciones de ENTER (una para el cuadro de diálogo de la contraseña y la segunda para aceptar el mensaje de error). El código es el siguiente:

^h:: ; La ejecución del scrip se inicia con CTRL+h

;=== Se prueban contraseñas desde 0000 hasta 9999
i=0
Loop, 10000
{
   v:=Format("{:04}",i)   ; Se le da formato de cuatro cifras

   Send, %v%{enter}{enter}   ; Se mandan las cuatro cifras seguidas de dos ENTER
   Sleep, 400 ; Pausa
   i++

   ;=== Para salir, pulsar la tecla ESC
   GetKeyState, state, Esc
   if state = D
   Exit
}

Es muy mejorable. Posiblemente se pueda reducir el tiempo de pausa, por ejemplo. Pero sirve con el Moeller. Basta intentar conectarse, pulsar CTRH+h cuando pide la contraseña, y dejarlo correr. Una vez que acierta, la conexión se mantiene. Se pulsa ESC para detener el envío de teclas y ya es posible guardar la copia del programa.