sábado, 28 de mayo de 2011

Trasteando con una alarma de Securitas



Tal y como le prometí a Chema Alonso en la entrevista que me hizo en El Lado del Mal, tenía otra frikada domótica Mcgyveriana pendiente por hacer. En los tiempos en los que estuve analizando cómo iba a acceder a encender la Roomba me vino a la cabeza la solución a un anterior reto inacabado que tenía meses atrás: Poder encender y apagar de forma remota la alarma de mi casa.
Intenté buscando en foros de alarmas y redes P2P, manuales de instalador de Securitas, en busca de algún punto de acceso remoto que me permitiese manipular la centralita. Esta búsqueda terminó sin éxito. Incluso llamé al instalador de mi alarma porque recordaba que se había conectado vía Bluetooth para activar "noseque". Efectivamente, me contó que hacía ciertas comunicaciones, pero previamente hay que abrir la centralita de la alarma y activar el bluetooth poniéndola en modo test, por lo que tampoco me valía. Por más que busqué por bluetooth, no encontré ningún identificador de forma normal.

Sin embargo, mientras le explicaba a mi atónita madre (hola mamá!) cómo iba a acceder a la Roomba inicialmente simulando ser un mando a distancia por infrarrojos, se me encendió la luz respecto a la alarma: El mando a distancia que me dieron con la misma.
 
 
Historia de un hack domótico

Dicho mando funciona con una pila (en concreto una CR2450 de 3 Voltios) y permite mediante 4 botones: activar la alarma completamente, desactivarla, activarla parcialmente (para cuando estás dentro de casa) y saber el estado en el que está. Lo primero fue quitarle los tornillos al mando y entender cómo funciona. Me dí cuenta que, si mantienes apretado uno de los botones y le metes la pila, el mando envía la señal del botón correspondiente a la alarma inmediatamente una sola vez. En mi caso, la idea era poder al menos encender la alarma cuando mi casa detecte que no estoy (en base a no encontrar el bluetooth de mi móvil por ejemplo). Es increible la cantidad de cosas que se pueden hacer gracias a los 3,3V que es capaz de sacar el puerto paralelo mediante 8 líneas diferentes de salida controlables. Hace muchos años, me animé a 
hacer un reloj binario controlado mediante el puerto paralelo del PCAsí que lo primero que se me ocurrió fue un sencillo circuito que, manteniendo presionado el botón de encender alarma, atención "con una pinza de la ropa!", conectando el cable del pin 0 del puerto paralelo al contacto positivo de la toma de corriente de la pila del mando a distancia y el cable del pin 25 (Tierra) al negativo. Y, no os lo vais a creer, pero al mandar un 1 por el bit 0 del puerto paralelo, la mayoría de las veces: funcionaba!!!! El circuito era una chapuza y era inestable como él solo, pero era capaz de activar la maldita alarma con un solo bit del puerto paralelo.

Sin embargo, me interesaba lograr el poder encender y apagar remotamente la alarma (nunca se sabe cuando puede llegar a activarse sola estando en el salón y si salgo al pasillo, directamente sonaría!) así que el circuito tendría que ser más complicado, involucrando un par de relés (uno para cada botón: encender y apagar) y un par de líneas más desde el puerto paralelo para usar a modo de señales de control que permitan hacer que los relés se exciten o no. Dado que el voltaje del puerto paralelo es de 3,3 Voltios, necesitaba unos 
relés especiales que funcionasen a 3V. Por haceros la historia corta, gracias a la colaboración de mi buen amigo Pablo y su experiencia soldando circuitos, llegamos a la conclusión que la intensidad del puerto paralelo no era suficiente para alimentar por un bit el circuito y por otros dos hacer que los relés llegasen siquiera a inmutarse.

Mi gozo una vez más en un pozo!!!! Así pues, exponiéndole el problema a un tío mío, ingeniero electrónico, se ofreció a diseñarme el circuito definitivo que me garantizaría el correcto funcionamiento. En este caso, sería necesario, además del puerto paralelo para las señales de control, la utilización de un cable USB que proveería de un voltaje de 5V, suficientes para hacer que todo funcione como corresponde.

Así pues, y como la electrónica avanzada no es mi fuerte, os expongo el esquema del circuito que me envió mi tío, así como la lista de materiales necesarios.

Lista de materiales
  • Placa perforada -> 4 euros
  • 2 Optoacopladores darlington 4N30 -> Regalados por mi amigo Koldo
  • 2 resistencias de 2,2 KOhms 1/4W -> 0,02 euros
  • 2 resistencias de 10 KOhms 1/4W -> 0,02 euros
  • 2 resistencias de 100 KOhms 1/4W -> 0,02 euros
  • 2 transistores MPSA13 -> 0,4 euros
  • 3 diodos 1N4007-> 0,6 euros
  • 2 relés OMRON G5V1 3DC -> 5,1 euros
Los relés OMRON, los conseguí en ASDS y el resto de las piezas, excepto los optoacopladores, en Actron y en Electrónica Cíes

Y el circuito soldado queda algo así:
 
Lo siguiente es buscar una cajita o un contenedor que permita encajar toda la maraña de cables y chips, así como dar una consistencia más sólida al circuito y sus cables, que son bastante frágiles ante cualquier tirón.

¿Quién no tiene por casa un viejo router ADSL Zyxel de esos monopuerto de Telefónica? Pues os diré que si vaciáis uno y quitáis un par de patillas de plástico internas, encaja a la perfección. Me doy cuenta ahora que, entre el cable USB con la manzanita reciclado de mi viejo iPhone 2G y la caja blanca del router, parece un accesorio más de Apple: ¿habremos creado la "iAlarma"?

Para enviar las señales necesarias desde el puerto paralelo, utilizaremos un par de scripts en Perl:

Script activar_alarma.pl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Carmen ~]# more /usr/local/bin/activar_alarma.pl
#!/usr/bin/perl
use Device::ParallelPort;
use Device::ParallelPort::drv::linux;
my $port = Device::ParallelPort->new('linux');
$port->set_bit(1,0);#Inicializo a 0
$port->set_bit(2,0);#Inicializo a 0
sleep (1);
$port->set_bit(1,1); #Pongo a 1 el bit 1 para que se "presione" el botón
print "Activando…\n";
sleep 5; #Espero 5 segundos con el botón "presionado"
$port->set_bit(1,0); #Suelto el botón

Script desactivar_alarma.pl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@Carmen ~]# more /usr/local/bin/desactivar_alarma.pl
#!/usr/bin/perl
use Device::ParallelPort;
use Device::ParallelPort::drv::linux;
my $port = Device::ParallelPort->new('linux');
$port->set_bit(1,0); #Inicializo a 0
$port->set_bit(2,0); #Inicializo a 0
sleep (1);
$port->set_bit(2,1); #Pongo a 1 el bit 2 para que se "presione" el botón
print "Desactivando..\n";
sleep 5;#Espero 5 segundos con el botón "presionado"
$port->set_bit(2,0);#Suelto el botón
 
Conclusiones
  • La forma de controlar si estoy/estamos en casa es mediante el bluetooth del teléfono móvil, por lo que en cuanto el servidor de casa no encuentra el móvil, vía bluetooth, activará la alarma. De manera que al llegar a casa y apagar la alarma manualmente con su correspondiente código de desbloqueo, en la siguiente barrida encontraría el bluetooth del móvil y no se activaría de nuevo la alarma. Podría hacerlo automáticamente también, invocando a desactivar_alarma.pl, pero si alguien lograra spoofear la BD Address bluetooth de mi móvil y su nombre, se desactivaría la alarma. Otro problema más, ¿qué sucede si llego a casa sin batería en el móvil? La puedo apagar manualmente sí, pero según llegue al salón, al siguiente minuto, se volvería a activar y estaría acorralado en el salón de casa! Así pues me interesa tener a mano la posibilidad de desactivar manualmente la alarma con desactivar_alarma.pl y quitar del cron el que monitorice si hay dispositivos bluetooth autorizados cerca mientras arranco el móvil y hasta que el bluetooth sea detectable. He estado buscando dispositivos bluetooth que poder comprar, que no hagan NADA pero que simplemente me sirvan para hacer el control de presencia, ¿quizá algo que se cuelgue en el llavero?
  • Sí, ya sé que Securitas ofrece un módulo GSM que mediante SMSs, permite hacer esto mismo, pero el modulito cuesta 120 euros más todos los SMSs que quieras enviar diariamente. también podría haber comprado un scanner de frecuencias e intentar capturar las señales enviadas por el mando a distancia al presionar ambos botones y replicarlas con un emisor de frecuencias. Desconozco cuanto costaría el equipo necesario para hacer eso. Sin embargo, la solución casera vale unos 10 euros. ¿Estamos en crisis no?
  • No he querido titular el post Hacking Securitas aunque realmente crea que así es, pero no faltarán las críticas a que eso no es hacking, así que… dejémoslo en trasteando o curioseando y así todos contentos: los trolls y yo ;D
  • Este invento ha sido el último a añadir al sistema de monitorización de presencia que tengo en casa, que activa/desactiva Motion, la posibilidad de que la Roomba se líe a limpiar, un contestador automático hecho con un modem externo y ahora la activación de la alarma, de manera que no tenga que presionar ningún botón y que todo se active y, excepto la alarma, se desactive por sí solo. Prometo exponer todo este frikismo en un post de aquí a un tiempo.
  • Cuando ví que no había manera de hacer que este invento funcionase con el puerto paralelo, pensé incluso en adquirir un Arduino o incluso recuperar mis recuerdos universitarios en programar un micropic 16F84.

Créditos y agradecimientos


Muchísimas gracias a mi amigo Pablo por sus manos expertas con el soldador, a mi amigo Koldo Valle por conseguirme y enviarme los optoacopladores que necesitaba para este invento, y por supuesto a mi tío Ricardo por las horas invertidas de una persona tan ocupada, dedicados a contentar las locuras de su sobrino. A los tres, gracias además por vuestra paciencia y un fuerte abrazo!

 
Fuente: Security by default
27/04/11

Suplemento Temático: Hackers

No hay comentarios: