28 diciembre 2013

Hacking portavelas eléctrico for fun and profit (1 de 2)

Hoy vamos a destripar uno de los dispositivos tecnológicos más antiguos, presente en multitud de iglesias: los sistemas de velas eléctricas. Pueden parecer dispositivos tontos, pero todo lo contrario.

Foto cortesía de hoy.com.ec
Las velas eléctricas son la nueva moda en las iglesias de Cuenca
Como casi todo hoy en día, tienen su corazoncito, su puerto ethernet, puerto USB y como no, ¡su propio firmware!

Debido a que todavía estamos trabajando junto con el proveedor para el parcheo de las vulnerabilidades, en el presente post únicamente podremos mostrar una breve introducción del sistema y algunas de las conclusiones fruto del trabajo realizado durante meses y meses. Veremos como, By Default, la seguridad de estos sistemas deja mucho que desear.

Funcionamiento interno (hardware)

El mecanismo del portavelas es muy sencillo. Os mostramos un pequeño diagrama a continuación (vista aérea):
Diagrama de funcionamiento del portavelas eléctrico

El mueble consta de dos partes: el circuito de LEDs (1) y la placa base (2). Esta última es la que contiene la lógica de, una vez introducida la moneda por la ranura, determinar cual de las luces pertenecientes a todo el circuito debe encenderse. El modo por defecto es aleatorio y puede configurarse, junto a otros parámetros, a través de una interfaz web.

Analizando el firmware

Tras determinar el fabricante del dispositivo (el cual no podemos desvelar de momento), nos dirigimos a su página web para descargar el último firmware disponible.

Una vez descargado, hacemos ingeniería inversa sobre el fichero y os podemos adelantar las conclusiones más llamativas tras el análisis:

  • El sistema operativo corresponde con creoendiOS, personalizada por el fabricante cuya base corresponde con el sistema OpenWRT.
  • La contraseña por defecto de root es "aguabendita".
  • La contraseña por defecto del usuario admin para el panel web de administración es "innominepatris", todo junto.
  • Posee los siguientes puertos abiertos:
  • 22/TCP - SSH para administración remota por consola
  • 80/TCP - Administración web
  • 443/TCP - Administración web segura
  • 666/TCP - Puerto de administración a modo de backdoor, que permite acceder a la administración sin necesidad de introducir usuario o contraseña.
Dirigiéndonos al funcionamiento principal del sistema (encender velas con monedas), se detectó un demonio corriendo sobre el sistema operativo, llamado "monitMoneda", sobre el cual recaía la funcionalidad de comprobación del tipo de moneda, para posteriormente encender más o menos velas según la ofrenda:
  • 5 céntimos = 1 vela
  • 50 céntimos = 10 velas
  • 1 euro = 15 velas
Curiosamente, existía un caso dentro del bloque selector, en el que había otra casuística: monedas de 500 pesetas. Si bien aparentemente el dispositivo no aceptaba moneda diferente a euros, el fabricante mantuvo la moneda de 500 pesetas para que una vez introducida, se activase un modo de depuración para el sistema. 

En el próximo post, enseñaremos cómo fue posible, gracias al modo de depuración y el acceso completo al menú de administración del sistema, conseguir algo como lo siguiente:

Escribiendo mensajes personalizados con velas eléctricas (sin ofrenda)

Iremos actualizando el siguiente enlace a modo de wiki con más información acerca de la investigación, y permaneced atentos al blog, ¡sobretodo para la segunda parte! 

13 comments :

Alberto dijo...

Feliz día de los inocentes a vosotros también!! ;)

masticover dijo...

XDDDDD
¡¡Muy bueno!! Curradísimo!! XDD
¡Enhorabuena chicos! ¡Feliz día de los inocentes!

fossie dijo...

Una buena inocentada. Os ha salido genial. Muy currada.

BooT Loos dijo...

Grandeee. Lo de innominepatris todo junto ya me ha sonado raro pero el backdoor en el puerto 666 ha sido épico!! Enhorabuena. Espero con ansia la segunda parte

Angelo dijo...

Buenisimo jajajaja cuando lei la contraseña aguabendita ya cai del dia jajajaja

Jesus dijo...

Pues en el enlace que ponéis no me sale ninguna wiki!!! ;-)

pablo dijo...

Muy bueno, jajaja, feliz dia de los inocentes ;)

exactlimon dijo...

aguabendita jajaj

Victor Manuel Leyva fernandez dijo...

Joder, la he leído hoy y me la he comido entera ajajjajajajajajja

Gabriel dijo...

Genial. El puerto abierto explica muchas cosas !!!

Javi Martínez dijo...

Hay una pequeña errata, la variable LATCH tiene valores distintos en los scripts. Muy bueno, lo he modificado para usarlo con pam-script y xscreensaver, funciona genial.

Gonzalo Piano dijo...

Estoy intentando hacer lo mismo en FreeNAS 9.3 (basado en FreeBSD). El script de emparejamiento que estoy usando es este: http://pastebin.com/tSJDkubH (es el mismo del post, pero con un par de cambios y por supuesto mi applicationid y mi secretkey). Al ejecutarlo, siempre obtengo: {"error":{"code":102,"message":"Invalid application signature"}}. Estoy 100% seguro que mi applicationid y mi secretkey están bien. Estoy pensando en algún error en FreeBSD al convertir la cadena a base64 o tal vez antes al hacer la firma. Alguien tiene alguna idea de por donde puede estar el error? Muchas gracias!

Priscila dijo...

Como podria hacer para parear latch con una pagina web que no tenga la opcion de lath, como por ejemplo gmail o con cuentas de las universidades?