martes, agosto 02, 2022

Dominando la domótica china - Parte 4

martes, agosto 02, 2022

Seguimos inundados de dispositivos "más económicos" de los que no disponemos el control. Ese control significa para un cliente poder utilizarlos para la finalidad que fueron comprados. No es nuevo anunciar que estos dispositivos evitan ese control, y que lo barato sale caro (sobretodo si creemos que vamos a poder recuperarlo).


 

Esta vez me he centrado en cámaras del tipo ieGeek (fabricante) basados en plataforma CloudEdge (nube). He podido ver en sus entrañas que han sido programadas de otra manera más moderna que otras marcas como TAPO, y con colaboraciones de diferentes empresas y equipos de trabajo (se hace apreciar mucho la subcontratación y el popurrí de "soluciones" finales). Unos mecanismos son más seguros que otros, pero al final se resumen en que no son dispositivos seguros ni se basan en servicios seguros. Como en todo este tipo de dispositivos los servidores situados en Asia son necesarios para que estén operativos.

Un dispositivo destinado a la vigilancia debería de ser como mínimo, seguro. Seguro significa que el manejo del dispositivo y de la información que genera debe de estar controlado por el usuario, con posibilidad de ser configurado por el propietario.

En este caso... la solución es muy decepcionante, y he visto que hay mucha gente indignada porque "simplemente" no pueden grabar ni acceder a las cámaras de manera "local". 

Estos dispositivos internamente llevan un pequeño Linux, no es algo malo, sólo que despierta la posibilidad de acceder a diferentes "bugs" que uno sabe que no se han corregido, pero que lo preocupante es que otros puedan acceder a ello sin tu consentimiento.

Por otro lado, me he centrado en la investigación y el desarrollo de una librería para ese control, respetando las "garantías" que ofrece el proveedor del dispositivo, sin ser intrusivo, pero ofreciendo mayores funcionalidades que las que el proveedor original ofrece.

Muestro aquí el github del proyecto . Y la moraleja de por qué hay que utilizar implementaciones seguras en las soluciones hardware.


Bit

sábado, abril 09, 2022

ESP32-TeleCam

sábado, abril 09, 2022

Hay algunos proyectos que deberían de estar hechos, pero como era fácil de mentar, si lo quieres sopórtalo tú. Y este es el caso. Había la necesidad de colocar una pequeña cámara inalámbrica en un sitio inacesible, con falta de iluminación y sin acceso a la red eléctrica, para monitorizar una serie de eventos climatológicos en un lugar remoto.


 
Se trata de un pequeño proyecto para controlar y monitorizar a través de Telegram una pequeña webcam construida con una placa ESP32-CAM china, programada en PlatformIO, con un diseño imprimible por cualquiera desde casa y controlado por baterías y servos asequibles, capaz de tener un precio inferior al de cualquier webcam de "seguridad" china, pero sin software desconocido e inseguro dentro.

Las dimensiones de este dispositivo son muy pequeñas, y la idea es que tengas disponible una cámara (con las limitaciones de la banda 2,4Ghz) manejable e imprimible desde tu casa. Los materiales de trabajo:

  • Dos celdas de litio 18650
  • Un TP-4056
  • Un ESP32-CAM chino
  • Dos servos SG90

El código se encuentra disponible en el repositorio de github. Como menciono en el README es un repositorio con las funcionalidades básicas desarrolladas, pero que tiene todavía características por ampliar, aunque la idea y el código pueden ser desplegados en cualquier cámara esp32-cam disponible.

Bit

lunes, marzo 28, 2022

Dominando la domótica china - Parte 3

lunes, marzo 28, 2022

Implementación real
 
 
 
Con este artículo llegamos a la continuación de la parte 2, un caso de uso real. Quiero dominar mi dispositivo, que para eso lo he comprado y lo he pagado.

Hemos visto que dependiendo del tipo de dispositivo que adquirimos, tiene un tipo de controlador u otro, llegando a cargar un sistema operativo completo como ocurre en un router moderno.

Todo es adaptable, y por eso estos dispositivos traen un proceso de actualización (como los routers) para evitar posibles "escándalos" por temas de seguridad, algo muy controvertido en este momento.

También hemos visto que si conocemos un poco la arquitectura podemos acceder muy fácilmente al dispositivo mediante acceso al hardware a través del puerto UART, pero por simplicidad nos interesa explotar el software que viene dentro.

Uno de estos puntos es conocer rápidamente cómo funciona, la app oficial que controla estos dispositivos dispone de un método para ello, y explotar de la misma manera el software que gestiona el hardware. Todos los dispositivos IoT comerciales disponen de este tipo de "vulnerabilidad" por diseño. No entraré en la parte de cómo obtener la información aquí expuesta para obtener los payloads, ya que ese conocimiento se da por hecho que el lector lo tiene.

Cómo hemos visto antes, generalmente podemos acceder mediante red a estos dispositivos desde dos ámbitos:

  1. Red local
  2. Internet (IoT)

El acceso por red local generalmente es sencillo y obligatorio, ya que estos dispositivos aunque tengan conexiones "seguras" tienen que ser configurados y para ello generan un AP. El tráfico de esta red puede ser monitorizadas (tú eres el dueño de la red). Con este tipo de comunicaciones podemos llegar al resultado expuesto en la anterior parte y hacer un script sencillo para comprobar el resultado:


Esta información es básica y sin manipular, ya que siempre puedes cambiar los valores y los parámetros. Este pequeño script genera un POST que obtiene una respuesta con el token de autenticación que el dispositivo considera válido, para poder explotar la API interna y poder configurarse. Sencillo ¿verdad?

Una vez que conoces cómo obtener el token de autenticación, ya puedes acceder a los servicios a la API que gestionan el hardware. Este proceso es extrapolable a cualquier API basada en autenticación por token de seguridad, es decir, todos y cada uno de los dispositivos IoT que puedas encontrar en una tienda convencional.

Evidentemente, el fabricante quiere ocultarnos esta información básica porque prefiere que uses su APP oficial y las limitaciones que quiera imponer al producto. Esto te va a llevar a una situación en la que nadie va a proporcionar una documentación detallada para explotar estos servicios, aunque existen maneras de acelerar el proceso.

En el repositorio he creado un script bash con simples verbos capturados que ofrecen la información básica a explotar, e incluso una captura de la cámara en formato jpg

El uso de este tipo de contenidos por bash está muy bien, para aprender y lanzar comandos es muy correcto y podemos completar y complicar el script todo lo que queramos, pero la finalidad perseguida es explotar esto desde un programa sencillo al alcance de todos o un entorno productivo. Lo que se pretende es controlar el hardware adquirido de manera útil y aumentar las funcionalidades que ofrece de serie el fabricante.

Para ello he programado una prueba de concepto en python, capaz de autenticar y extraer información dentro de tu red.

Bien, la prueba de concepto es prácticamente un success, con su implementación de métodos que nos permite utilizar de manera sencilla un par de requests para obtener el token y un verbo para consumir la API con sus parámetros funcionales.


Podemos seguir implementando todos los verbos que queramos, de hecho quedan pendientes algunos que he incluído en el bash script, pero seguimos sin acercarnos a nuestro objetivo real, controlar el dispositivo remotamente, ya que así sólo podemos explotar en nuestra red local el dispositivo y necesitaríamos acceder a ella. Este dispositivo (no hace falta decir que todos los IoT están incluídos en este grupo) se controlan a través de Internet, por lo que necesito una "adaptación" al uso cotidiano.

Ahí es donde entra la implementación de la clase Tapo:

Me extendería detalladamente en argumentar e implementar todas los métodos, e incluso en completar (si el tiempo lo concede) un numero mayor de verbos y funcionalidades, pero básicamente esta clase proporciona un cliente en formato librería para autenticar y consumir una API que maneja y controla el dispositivo, al igual que lo hace la app, sólo que permite una integración en sistemas más complejos.

El funcionamiento depende del verbo que se quiera lanzar, ya que hay varios tipos de implementación (no conocemos la documentación oficial):

  1. Autenticación básica y consumo tradicional de la API
  2. Funcionalidades con peticiones síncronas, que nos permiten controlar, obtener información y enviar comandos (como mover la cámara)
  3. Funcionalidades de obtención de información en vivo. Son aquellas que nos permiten extraer eventos en vivo e incluso el video en directo manteniendo una conexión abierta.

He subido el código fuente en este repositorio de github para que cualquiera pueda aprender y usarlo respetando al autor, pero sobretodo para que se entienda cómo siendo constructivos podemos dominar esta electrónica Made in China.

En la siguiente entrada relacionada con la temática enseñaré como implementar otro tipo de dispositivos y a integrar esta librería python en un ejemplo real en una tarea de automatización bastante útil.

Bit
Hide Me!