Cómo analizar dispositivos IoT: vulnerabilidades más comunes y cómo encontrarlas

Cómo analizar dispositivos IoT: vulnerabilidades más comunes y cómo encontrarlas

Compartimos algunas técnicas para analizar dispositivos IoT y descubrir vulnerabilidades.

Compartimos algunas técnicas para analizar dispositivos IoT y descubrir vulnerabilidades.

Según una encuesta realizada por ESET a principios del 2018, el 70% de los usuarios cree que los dispositivos IoT no son seguros. Sin embargo, el 62% aseguró que los compraría igual. Estas cifras se ven reflejadas en la cantidad de dispositivos IoT que encontramos actualmente en los hogares y en las compras de los usuarios, dado que en 2018 las ventas de dispositivos inteligentes superó a la cantidad de equipos móviles vendidos. De hecho, para el 2020, según una proyección de Gartner, se calcula que habrá 20 mil millones de dispositivos IoT en el mundo, número que equivale a 3 dispositivos por habitante.

La variedad de dispositivos IoT es sumamente amplia y accesible para cualquier usuario. Desde asistentes de voz, enchufes inteligentes, cámaras IP, luces, o termostatos, hasta los nuevos “wearable” (dispositivos usables) que llegan incluso a monitorear el estado de nuestro organismo; todo tipo de dispositivos se pueden conseguir por precios que van de 30 a 500 dólares. A diferencia de las tecnologías previas, el análisis de la seguridad de los dispositivos IoT presentan una gran complejidad debido a la amplia variedad de dispositivos y software existentes en el mercado.

Sin embargo, si bien su análisis puede resultar complejo, es bueno comenzar por algunas vulnerabilidades conocidas y por algunas técnicas muy útiles para obtener información.

Information Disclosure

Lo primero que debes buscar a la hora de analizar un dispositivo IoT es toda aquella información que se encuentre a simple vista. Muchos dispositivos brindan -a veces a propósito y otras por error- información acerca de su configuración, interacciones, trafico u otros archivos que pueden ser útiles para conocer mejor su funcionamiento, el entorno donde están conectados o incluso información personal del usuario. En estos casos esta información se encuentra a simple vista y es solo cuestión de saber buscarla.

Algunas cosas que podrías revisar son:

  • Buscadores: no todo en Internet son páginas web. Así como existe Google para ayudarnos a encontrar los sitios que necesitamos, también hay otros buscadores que en lugar de indexar sitios se dedican a escanear y recopilar puertos y servicios públicos en Internet, muchos de los cuales pertenecen a dispositivos IoT. Servicios como Shodan o Cencys son definitivamente un buen lugar donde comenzar a buscar dispositivos para investigar.
  • Protocolos no cifrados: equipos que se comunican mediante HTTP o cualquier otro protocolo no cifrado suelen ser muy sencillos de espiar, ya que basta con utilizar un proxy como intermediario para poder ver todo el tráfico de estos dispositivos.
  • Metadatos: son aquellos datos que hablan de los datos, es decir, describen el contenido de los archivos o la información de los mismos, como la calidad, condiciones, historia, disponibilidad y otras características de los datos. En el caso de los dispositivos IoT podemos encontrar, por ejemplo, información acerca de la red del usuario o incluso sus hábitos y consumos.
  • APIs Públicas: una API es una interfaz que especifica de qué manera deben interactuar distintos componentes de software. Cuando estas APIs son públicas, es decir, que cualquiera dentro de la red puede tener acceso a ellas, pueden ser utilizadas para integrar la funcionalidad del equipo con servicios externos, o bien, para obtener información del mismo. Las APIs son muy diversas y cada una es implementada de forma diferente, sin embargo, basta con conocer sus métodos y su interfaz para poder interactuar con ella. En las APIs públicas esta información normalmente se encuentra en Internet de forma pública para los desarrolladores. Por ejemplo, en algunos dispositivos de Google, como el Chromecast o el asistente de voz, podemos encontrar una API HTTP que utiliza métodos GET y POST y formatos JASON para interactuar con otros equipos. Si bien no es una API oficialmente documentada, ya se han publicado investigaciones con la sintaxis que se debe utilizar. En la siguiente imagen se puede ver información de un dispositivo Google Mini, como la versión y la red donde está conectado, así como también los horarios del despertador:

Información de un dispositivo Google Mini, como la versión, red a la que está conectado y los horarios del despertador.

Ingeniería reversa de aplicaciones y firmwares

En muchos casos conseguir el dispositivo IoT que queremos analizar resulta complicado o incluso costoso. Sin embargo, esto no tiene por qué detener el análisis, ya que no todo pasa por analizar el equipo. Todos los dispositivos IoT son controlados a través de aplicaciones que se pueden descargar y a las que le podemos aplicar ingeniería reversa. De hecho, a veces es mejor comenzar con el análisis de las aplicaciones que controlan los dispositivos inteligentes para ver cuáles son más vulnerables y podrían permitirnos realizar mejores investigaciones.

La ingeniería inversa se utiliza para entender cómo funciona una aplicación a partir de su ejecutable o empaquetado. En el caso de las aplicaciones móviles podemos, incluso, llegar a obtener el código fuente de estas, lo cual resulta muy útil para analizar sus funciones, entender como recibe y envía información, encontrar usuarios y claves hardcodeadas y hasta descubrir vulnerabilidades y como explotarlas. En algunos casos incluso se pueden encontrar los links de descarga del firmware, al cual, una vez descargado, también se le puede aplicar ingeniería inversa.

En el caso de las aplicaciones móviles, uno de los decompiladores más utilizados es JADX, el cual tiene una interfaz muy amigable para el análisis. En el siguiente ejemplo se utilizó este decompilador para obtener el código fuente de una aplicación que controla enchufes inteligentes. Las funciones más interesantes que se encontraron en este caso fueron las que se encargan de cifrar y descifrar el tráfico entre la aplicación y el dispositivo, y a partir de estas funciones se logró controlar el equipo de forma remota y sin ningún tipo de autenticación.

Ejemplo del uso del decompilador JADAX para obtener el código fuente de una aplicación que controla enchufes inteligentes.

Ejemplo del uso de JDAX para obtener el código fuente de una aplicación que controla enchufes inteligentes.

 

Análisis de tráfico y MiTM

Una gran cantidad de información viaja desde y hacia los dispositivos, por lo que poder controlarla nos dará una amplia ventaja en el control del dispositivo que estamos investigando. Ya sea porque el dispositivo se comunica a través de protocolos inseguros o por que se logró descifrar la comunicación (como en el caso anterior), a partir del análisis del tráfico de red podemos no solo obtener información sensible sino también entender y analizar protocolos de comunicación. Muchas veces podremos, además, alterar los paquetes enviados y recibidos o hasta incluso generar nuevos. Es decir, que manipulando el tráfico de un equipo podríamos llegar a controlarlo.

La mejor forma de capturar estos paquetes es mediante la utilización de un proxy, como por ejemplo, Burp Suite. Algunas veces, la captura de tráfico puede ser un poco más tediosa de analizar y deberemos recurrir a herramientas como Wireshark para facilitarnos el trabajo.

A modo de ejemplo, en las siguientes imágenes vemos el tráfico entre una cámara web y la aplicación móvil que la controla. En este caso, el tráfico se envía en texto plano a través de HTTP y no solo podemos obtener información de la cámara, sino también las imágenes que son capturadas por la misma:

Análisis del tráfico entre una cámara web y la aplicación móvil que la controla.

Análisis del tráfico entre una cámara web y la aplicación móvil que la controla.

En este caso, si además lográramos obtener el código fuente de la aplicación a partir de la ingeniería inversa, podríamos incluso entender cómo se forman los paquetes que se envían para controlar el dispositivo, generarlos desde un equipo remoto e interceptar la respuesta del equipo con las imágenes tomadas.

Configuraciones inseguras

Por último, muchos dispositivos se vuelven inseguros por usuarios que no prestan atención a las configuraciones. Es muy común (lo puedes comprobar en Shodan), encontrar puertos y servicios habilitados por defecto, incluso algunos obsoletos o que no están siendo utilizados. Además, seguramente has oído hablar de los usuarios y contraseñas por defecto que tampoco se cambian (también lo puedes comprobar en Shodan) y de los protocolos inseguros que hemos detallado en los casos anteriores.

Incluso, a veces los desarrolladores olvidan deshabilitar la función de depuración, la cual le permite a un atacante poder interactuar con el firmare o sistema operativo del equipo. Este es el caso de algunos dispositivos Android que salieron al mercado asiático con el puerto ADB (Android Debug Bridge) habilitado por defecto y que permitieron a un minero de criptomonedas infectar el equipo y utilizar sus recursos.

Si tienes dispositivos que deseas analizar, ya sabes por donde comenzar tu análisis para encontrar vulnerabilidades. Por otro lado, si eres de los que disfrutan de una casa inteligente, pero priorizas la seguridad, hay algunas medidas de seguridad que debes considerar:

  • Mantén tus dispositivos actualizados. Muchas vulnerabilidades son reportadas y corregidas en poco tiempo, por lo que si te mantienes en la última versión de las aplicaciones y firmware serás menos vulnerable.
  • Investiga y analiza que equipos comprar. En Internet hay muchas revisiones y análisis de seguridad publicados sobre varios dispositivos. Incluso puedes utilizar la ingeniería reversa para analizar las aplicaciones antes de comprar un dispositivo y elegir así el modelo más seguro.
  • Si eres desarrollador, incluye la seguridad desde el diseño de tu aplicación y realiza auditorías que incluyan tests de seguridad.
  • Tomate un tiempo para configurar tus dispositivos correctamente. Deshabilita puertos y servicios que no utilices, evita las configuraciones por defecto y cambia las contraseñas.

Recuerda lo que dijo un gran filósofo y matemático francés: Configuro, luego enchufo.

 

Discusión