03 mayo 2012

¿Jugamos con la webcam?


 
No, no penséis que, por el título, el post de hoy es un anuncio pr0n. Ya he hablado varias veces en SbD de la potencia del software Motion para monitorización y grabación de movimientos de estancias, utilizando cámaras de todo tipo.

Llevaba ya tiempo con la idea de evolucionar la cámara IP que tenía en la terraza, que apunta hacia un lado de ésta únicamente, por una cámara motorizada, que permita "echar un vistazo" rápido hacia el otro lado de la misma, para ver si todo está en su sitio o no. Ya sabéis, algo nuevo para alimentar mi propio "Homeland Security" y darle algo más para hacer a mi pequeño Skynet.

En mi labor de búsqueda por algo sencillito, ví que las cámaras de marcas reconocidas costaban más de lo que yo pretendía gastarme. Así, encontré una tienda que vende varios tipos de webcam de este tipo. En general, y por lo que hablé con la gente de la tienda, todas estas webcams de segunda marca, son chinas (yo supongo que las de primera también, pero tienen mejor calidad). Entre otras, probé una de marca Apexis que me ha dado bastante buen resultado. Ya sea wireless o cableada, se gestiona mediante un panel web, con versiones para Internet Explorer (un ActiveX), resto de navegadores y móviles.



Es decir, que si NATeamos un puerto desde el router ADSL hacia la IP de gestión de la webcam, se puede acceder y jugar con ella desde Internet (vamos, tú y todos los que se peguen con una autenticación vulnerable a fuerza bruta y diccionario). Si no es necesario acceder desde un dispositivo móvil limitado, es mejor hacerlo mediante una VPN. En mi caso, he aprovechado las capacidades de un proxy inverso de Apache con mod_proxy, que requiera un certificado SSL X.509 de cliente como autenticación a la gestión de la misma. De esta manera, aunque el protocolo de acceso utilizado contra la webcam es HTTP, forzar el uso de HTTPS hasta mi proxy inverso, la autenticación (de usuario/contraseña) a través de la red insegura, va cifrada, y la conexión además irá autenticada mediante el certificado válido.

La aplicación web de gestión de la webcam, permite moverla hacia cualquier posición. El firmware de la mía además, permite memorizar hasta 15 posiciones diferentes de la cámara, y por supuesto hacer que la cámara vaya a cualquiera de ellas.

En la foto de abajo podéis ver el panel de gestión de la webcam, y he puesto una foto de una terraza con arena y mar ;D


Trasteando con Tamper Data (últimamente lo uso más que el procesador de textos) me dí cuenta que, al igual que otros equipos caseros que he mirado, la autenticación utilizada para el panel web es Basic Authentication, ni cookies de sesión, ni tokens dinámicos en parámetros ni nada de nada. No se han complicado mucho la existencia esta gente con eso de "la seguridad". Con esto en la mano, ya sólo queda sentarse a probar las diferentes opciones, y documentarlas/scriptearlas para poder hacer que la webcam tenga vida propia mediante llamadas mediante línea de comandos, o que sea Skynet quien lo haga en base a sus propias decisiones.

Además, en mi caso particular, el programa Motion que corre cuando no hay ningún habitante en casa, monitoriza la actividad provista por streaming desde la webcam y, cuando detecta movimiento, me avisa y graba en video el mismo. Debido a que la cámara está en el exterior y que dispone de sensores infrarrojos para permitir visión nocturna, no es sencillo ecualizar los parámetros de brillo y contraste para evitar que cualquier cambio de luz genere falsos positivos al programa Motion. Es decir, que según la hora que sea, estaría bien modificarlo a dinámicamente para que la imagen fuese siempre correcta, tanto para la vista como para la monitorización.

Teniendo claro cuáles son las llamadas que se hace al panel web para balancear estos parámetros, es cuestión de aguja e hilo, el añadir a mi bot Gtalk y a Skynet la funcionalidad de mover la webcam a las posiciones pre-memorizadas, y dependiendo de la hora que sea, ajustar dinámicamente el brillo y el modo (50 Hz, 60 Hz o outdoor)

Así, se ven las siguientes peticiones:

GET "http://".$ip_webcam."/camera_control.cgi\?param=1\&value=$value";

-> Donde $ip_webcam está claro lo que es y el parámetro "value" es un valor de 0 a 240, correspondiente a multiplicar por 16 un valor entre 1 y 15.

 GET "http://".$ip_webcam."/decoder_control.cgi?command=$x" // Vete a la posicion memorizada 1

-> En este caso, para mover la cámara a una de las posiciones pre-memorizadas, el valor $x empieza en 31 para la posición 1, 33 para la posición 2, 35 para la 3 y así sucesivamente. Es decir, que $x = 30 + (($pos*2) -1)

Bueno pues si sirve de ayuda a los que tengáis este tipo de webcam, he hecho un par de scripts separados (que en mi casa, son dos funciones dentro de "Skynet") para hacer que se mueva de forma manual a la posición pre-configurada.

GET "http://".$ip_webcam."/camera_control.cgi?param=3&value=$x";

-> $ip_webcam es la IP de gestión de la webcam y el parámetro "value", es un valor entre 0 y 2, correspondiente a los modos: 50 Mhz, 60 Mhz y Outdoor, respectivamente.

Cuando es de noche, conviene configurar el modo de la webcam a "50 Hz" y de día en modo "Outdoor"

webcam_pos.pl




webcam_brillo.pl




DISCLAIMER: Señores de la Agencia de Protección de Datos: La cámara no la uso para grabar a personas por la calle, ni siquiera de otras casas (no he visto vecinas, ni en mi casa, ni en la de enfrente que merezcan comprar una cámara con zoom).

10 comments :

Madrikeka dijo...

Me ha encantado el último apunte :D

La verdad que me flipa muchísimo la que has liado en tu casa!!

Tengo que recopilar estos post y "releermelos" otra vez!!

Un saludo.

silverhack dijo...

Vaya guapada de post tio....
Ya sólo te falta poner a varios "dummies" disfrazados y controlados a través del BOT, y que se pongan en movimiento cuando no estés en casa, cual escena de "Sólo en casa"....

Serbio dijo...

En cuanto al disclaimer y las vecinas....Excusa non petita acussatio manifesta XD

Ole - dijo...

Yo voy aprendiendo perl segun Lorenzo va poniendo scripts xDD. Al segundo ya le pones control de luz segun los cambios de horario y tal y ya te queda "niquelao" xDD.

Saludos.

Irene Alvarez Gonzalez dijo...

Fort Knox comparado con tu casa...un parque infantil  :P
A ver quien es el ladrón chulo que te da el palo!
Chulísimo el post ;)

La vecina dijo...

La próxima vez que me vengas a pedir azúcar, como me mires el escote te vas a enterar

Lorenzo_Martinez dijo...

 jejeje en realidad eso de simular gente en casa, es algo que verás de aquí a un tiempo ;D Tengo la cabeza llena de ideas... pero schhhh

Lorenzo_Martinez dijo...

Eso es algo que estuve haciendo, en base a la hora de salida y de puesta de sol en base a geolocalización, pero el módulo Perl que probé no funcionaba bien :( Estamos trabajando en ello, stay tunned!

Lorenzo_Martinez dijo...

 La culpa es tuya, que me abres la puerta en modo provocador... ;D

Mig29 dijo...

Por curiosidad, se pueden lanzar en google un par de consultas, con la cadena "camera_control.cgi" y "decoder_control.cgi" en la URL. Parece que no todo el mundo es tan cuidadoso con la config de sus cams... ;-)