Exfiltración de información entre un SmartTV y un SmartDisplay: Una PoC
La Prueba de Concepto (PoC) de este artículo consiste en validar si sería posible una comunicación entre un SmartTV y un SmartDisplay usando un Cover-Channel para exfiltrar información, haciendo uso de un método poco convencional. La idea es aprovechar la presencia cada vez mayor de dispositivos IoT para, utilizando una cámara o webcam, como un dispositivo de seguridad o un SmartDisplay, exfiltrar la información mostrada de forma oculta en la pantalla de una SmartTV que se encuentre en el ángulo de visión de la cámara.
Esta forma de ocultar información a simple vista en un «Cover-Channel» es lo que se conoce como esteganografía y debido a que realmente no viajan datos directamente por la red es bastante complicado para sistemas de detección de intrusiones (IDS) detectar dicha transmisión. Podéis leer más sobre estas técnicas y su detección mediante estegoanálisis en el libro de «Esteganorafía y estegonanálisis» de Jordi Serra y Daniel Lerch publicado por 0xWord.
Figura 4: Libro de Esteganografía y Estegoanálisis de Jordi Serra y Daniel Lerch publicado por 0xWord |
Para ocultar la información, se ha decidido usar un contador de FPS (Frames Per Second) que supuestamente mostraría información acerca del rendimiento de la Smart TV pero que en realidad estaría transmitiendo un mensaje codificado. Dada la popularidad del sistema Androidpara las televisiones y muchos dispositivos IoT, las aplicaciones desarrolladas para la prueba de concepto que se encargarán de la emisión y transmisión de la información son para dicho sistema. Para transmitir la información el funcionamiento es el siguiente:
- Se toma el mensaje a transmitir y se codifica en binario, añadiendo bits de control entre bytes para separar unos caracteres de otros y además prefijando una secuencia de control que ayudará a determinar el inicio y final del mensaje.
- La aplicación determina los FPS reales del dispositivo y los aproxima a la decena más próxima.
- En este punto la aplicación introducirá cada segundo un bit de la secuencia a enviar en el contador de FPS. Lo hará de la siguiente manera:
- Si se transmite un 1 se sumará 1 al contador de FPS
- Si es un 0 el contador de FPS no se modifica
- Si es un 2, bit de control utilizado para separar bytes y formar la secuencia de control, se resta 1 al contador.
- Se muestra el contador por pantalla y el mensaje te transmitirá en bucle.
Evidentemente ahora toca recibir el mensaje, para ello la aplicación receptora deberá ser capaz de determinar el valor de FPS en pantalla y posteriormente decodificar el mensaje conforme se transmite, la aplicación desarrollada para tal propósito funciona así:
- Se hace uso de una librería que permite detectar caracteres a partir de las imágenes captadas por la cámara del dispositivo, usando un Cognitive Service de Visión Artificial.
- Antes de pasar a determinar el valor del contador de FPS de todo lo captado por la cámara, se realiza una pequeña corrección de todo lo detectado partiendo de la base de que se sabe que lo que se busca son números y además que solo espera detectar ciertos valores debido a la codificación realizada anteriormente.
- Una vez que se tiene todos los caracteres captados por la cámara, se procesan los valores detectados para limpiar todo lo que no interesa y solo dejar los FPS de la pantalla.
- En este punto la aplicación ira decodificando bits hasta dar con la secuencia de control, momento en que la decodificación del mensaje comenzará. Se dará por terminada la transmisión al encontrar una nueva secuencia de control.
- Una vez que se ha determinado que se tiene todo el mensaje, se mostrará por pantalla.
El sistema funciona bastante bien pero no es perfecto, es cierto que en el caso de mensajes de texto plano en el que produzca un error de detección en uno o varios bits, es posible seguir leyendo el mensaje final puesto que solo faltarían algunos caracteres y sigue siendo legible. El problema surge si lo que se transmite es alguna clase binario o imagen, para empezar, llevaría mucho tiempo debido a que la velocidad de transmisión es extremadamente lenta, pero además es que un solo bit corrupto y el archivo completo queda inservible. En el siguiente vídeo tenéis una demostración del funcionamiento de la exfiltración.
Ante el problema de corrupción de los datos que se transmiten se podrían añadir bits de paridad que ayuden a corregir errores y para aumentar la velocidad (motivo por el que se ha evitado añadir el sistema de paridad en esta prueba) se podrían añadir otras métricas a la aplicación acerca del dispositivo que permitan transmitir más bits por segundo.
Powered by WPeMatico