miércoles, marzo 23, 2022

Dominando la domótica china - Parte 2

miércoles, marzo 23, 2022

Anteriormente estuvimos haciendo un pequeño análisis sobre la domótica china  basada en pequeños microcontroladores esp8265 muy baratos, dispositivos que se conectan a servidores remotos de otros continentes y que mantienen el control remoto de ellos a través de su conexión inalámbrica.

El famoso IoT no es más que un concepto marketing creado para ofrecer hardware que solventa un problema conectado a Internet, y este tipo de soluciones "domésticas" basan su viabilidad en ofrecer servicios adicionales que completan las funcionalidades con sistemas más complejos.

Dispositivos TP-Link Tapo (C200)

En esta publicación he querido extender el hilo argumental con otra rama de dispositivos similares, las cámaras IP wifi. En este caso me centraré en un producto actual en el mercado que lleva un sistema operativo completo dentro de ellos, un SoC Realtek RTS3903. 


Del mismo modo que los microcontroladores, que son dispositivos programados para realizar una simple tarea, estos dispositivos por su precio permiten agregar multiples funcionalides de red de manera sencilla con un sistema completo. Este SoC que estamos analizando lleva un openwrt modificado, al igual que muchos routers, y como en todo tipo de dispositivos con funcionalidades similares se permite de manera directa la entrada por UART de acceso a la línea de comandos.


Esta manera es muy sencilla, y permite investigar y conocer el sistema de mejor manera, muy agresivo, ya que requiere acceso directo al hardware, pero es la manera de conocer al enemigo. En este tutorial podéis conocer mejor cómo tener el control real del hardware que compráis, no está completo pero os permitirá llegar a puntos que no teníais pensado analizar y conocer el sistema adecuadamente.

Controlando el hardware mediante vulnerabilidades software.

Sabiendo el tipo de sistema que hay dentro podemos hacernos con el control del dispositivo utilizando ingeniería inversa. En este caso que no voy a entrar en detalle se expone este hardware a una inyección de comandos para poder abrir una shell inversa.

En el tutorial anterior se encuentra una sección donde se expone una manera de montar un servicio telnet inyectando un comando en un parámetro.


 

Este parámetro es interpretado directamente por el configurador del servidor web de openwrt "uci". Es una vulnerabilidad muy extendida intentar inyectar comandos para hacer una reverse shell en este tipo de dispositivos (y en los que no lo son).

Esta forma en específico requiere acceso al hardware, ya que hay que abrir una terminal con el dispositivo primero (aunque sólo se requiere una única vez, o cada vez que se reinicie el dispositivo si no se continua con el proceso de persistencia). Es muy smart y está muy bien analizada, ofrece maneras de escribir y hacer persistentes los cambios con firmado de particiones del sistema como si fueran originales.

Esto me pareció muy interesante, ya que al entrar dentro de este sistema pude volcar el contenido de las particiones en una sd y sobreescribirlo a mi gusto. Pero yo quería que mi método se permitiera utilizar en cualquier dispositivo sin necesidad absoluta de acceder al hardware, por lo que pensé en hacer un completo análisis.
 
¿Y si reseteamos la cámara a la configuración inicial? La propia configuración inicial (que es como nos encontramos el dispositivo cuando sale de la caja), aunque sinceramente, para ejecutar cualquier exploit no es siempre necesario (basta con autenticarse).

Un simple escaneo nos permite ver que en tenemos acceso a múltiples puertos, uno de ellos es el 443 (donde se encuentra el uhttpd proporcionando una API):


Al igual que en todas las domóticas chinas, esta parte es necesaria para que los dispositivos sean configurados con una sencilla app que proporciona el fabricante. Este control básico permite cambiar la funcionalidad de red del dispositivo y conectarlo a internet (es la funcionalidad básica).

Utilizando un poco de ingenio en forma de script (basta con mirar la app original y el tráfico de red que hay con la cámara) podemos explotar una serie de servicios que podemos usar para comunicarnos con el dispositivo, y poder obtener toda la información que deseemos.

Todos los servicios (excepto login como es lógico) usan autenticación. Esta autenticación se puede utilizar y extraer de manera sencilla atacando directamente sobre su ip para extraer un token (stok) válido:

 

La prueba de concepto funciona. Al no existir una api documentada, hay que sacar verbo a verbo todos los comandos  y sus argumentos (es lo que tiene esto del mundo reverse). 

En la siguiente entrega se mostrará cómo explorar y explotar este resultado desde python y hacer una interfaz que comunique tanto por red local como por internet lo que queramos requerir, con posibilidades de incorporar nuestra librería en una pequeña raspberry o server para controlar y obtener información remotamente de este tipo de dispositivos.

Bit
Hide Me!