martes, marzo 10, 2020

Gremlin Botnets: El club de los poetas muertos [Parte 2 de 6]

Tras acabar la primera parte, quedaba claro que el mundo del cibercrimen estaba poniendo mucha atención al mundo de las apps para Android por medio de controlar Gremlin Apps que se conviertan en Gremlin Botnets desplegadas vía Google Play, lo que podría abrir un nuevo escenario. El de utilizar toda esa red de apps como si fuera una mega-botnet y hacer algo similar a lo que describía yo en la primera parte con la FOCA Botnet.

Figura 1: Gremlin Botnets: El club de los poetas muertos [Parte 2 de 6]

Es decir, si un cibercriminal es capaz de controlar una amplia red de apps instaladas en un amplio volumen de dispositivos móviles, puede hacer cosas maliciosas a capricho en dispositivos que pertenecen a personas que trabajan en empresas y organizaciones que pueden ser interesantes para un APT (Advanced Persitent Threat). Es decir, para realizar ataques mucho más sutiles que los descritos en la parte anterior de esta serie.

3.- Una Botnet para APTs: APTs as a Service

Supongamos que una banda criminal controla 100 apps que están instaladas en 10 Millones de dispositivos. Todas estas apps son totalmente benignas, pero como muchas apps benignas se llevan datos del dispositivo que permiten a la banda criminal identificar qué persona está utilizando ese terminal móvil. Es decir, la app busca sacar información de quién usa ese dispositivo averiguando cosas tan sencillas como:
- Qué número de teléfono se usa en ese dispositivo. 
- Qué cuentas de servicios de Internet como Twitter, Facebook, Linkedin, etcétera están dadas de alta en el dispositivo. 
- Qué direcciones de correo electrónico están en ese dispositivo.
Conseguir estos datos en los sistemas operativos Android no ha sido muy complicado en el pasado y, a pesar de que Google ha puesto foco en mejorar la seguridad de sus dispositivos, aún queda un parqué sustancialmente relevante sin actualizar que permite a los desarrolladores de las apps acceder a las cuentas almacenadas en el terminal o al número de teléfono.

Figura 14: Sencillo código que encontrarás en muchos repos de GitHub
para llevarse todas las cuentas de un sistema operativo Andorid.

Una vez que se ha conseguido extraer información de las cuentas en el dispositivo, es decir, e-mail, número de teléfono o usuarios de servicios de Internet, el trabajo que debería hacerse en backend es utilizar técnicas OSINT (Open Source Intelligence) para localizar quién es quién. Es decir, en qué empresa trabaja, qué cuentas tiene en redes sociales, su operador de telecomunicaciones, si esos e-mails ha sufrido leaks de contraseñas o en qué parte del mundo vive esa persona.

Figura 15: Manual OSINT para analistas de ciberinteligencia

Aunque parece algo muy difícil, lo cierto es que no lo es tanto. El Manual de OSINT para analistas de ciberinteligencia de Yaiza Rubio y de Felix Brezo explica muchos de esos mecanismos, y nosotros, en el equipo de Ideas Locas, creamos nuestra propia plataforma tiempo atrás, llamada Dirty Business Card, en la que basta con dar una dirección de e-mail o un número de teléfono y se hace un rastreo de esa persona por una infinidad de sitios de la red, sacando todo tipo de detalles.

Figura 16: Demo de funcionamiento de Dirty Business Card

La última parte del negocio es, una vez que se sabe quién está detrás de cada dispositivo, desde el panel de control de nuestra Gremlin Botnet se podría hacer malicisosa una, y sola una, app de todas ellas. Es decir, utilizando un canal basado en esteganografía se enviaría una orden a la app instalada solo en el dispositivo de la víctima para hacer la recolección de información o la ejecución del comando que se desee.

Esto hace que el comportamiento del resto de las apps siga siendo benigno, pero el de una sola sea malicioso. De esta forma solo hemos activado una Gremlin App de todo el parque de instalaciones de nuestra Gremlin Botnet que están controladas, generando el menor ruido posible ante posibles análisis o controles de seguridad. La exposición es mucho menor cuando se activa solo una app.

Y para conseguir hacer aún menos ruido y generar menos sospechas, hacemos uso de permisos y acciones oportunistamente en el sistema operativo. O lo que es lo mismo. Si queremos acceder al carrete de la fotos para llevarnos la fotografías de ese móvil, solo tenemos que esperar que el usuario utilice una función de la app que necesite acceder al carrete para aprovechar ese momento y robar las fotografías.  De esta forma, las sospechas son infinitamente menores, al poder justificar el acceso a las fotos por el uso de una función que el usuario ha, conscientemente, utilizado.

Pero vamos a ver todos estos puntos en más detalle para entender mejor cómo está hecha nuestra Gremlin Botnet de apps que vamos a ver en funcionamiento en una demostración un poco más adelante.

3.1.- Los permisos en Android

A partir de la versión 7.0 de Android, conocida como Nougat, Google comenzó a restringir y eliminar el uso de algunos permisos que habían demostrado que dejar la seguridad en manos de que un usuario, muchas veces sin entender bien el significado y las consecuencias de ello, no había sido una buena idea.

Pero hasta esa versión, y con un abanico de posibilidades varias, saber quién utilizaba, o lo que es lo mismo, en qué teléfono estaba corriendo una app no era demasiado complicado. Nosotros hicimos una demo llamada GetMyNumber de cómo se puede saber el número de teléfono en el que está corriendo una app usando diferentes trucos, algo que a partir de Android 7.0 no es posible, pero que antes se podía hacer de varias formas.

Figura 17: Demo de GetMyNumber hecha en 2015

La primera de ellas, haciendo uso de los permisos READ_PHONE_STATE o READ_PHONE_NUMERS, se puede sacar información de las versiones antiguas, llegando hasta poder saber el IMEI del teléfono. Por supuesto, hoy esto está capado, pero no en las versiones antiguas, y cuándo revisamos con Tacyt - nuestra plataforma Big Data de ciberinteligencia en el mundo de las apps móviles - cuantas apps pedían este permiso en el año 2015 el resultado fue de alrededor de 1.5 Millones de apps.

Figura 18: Casi 1.5 Millones de apps usando READ_PHONE_STATE

Entre la lista de formas que usamos en GetMyNumber, se encontraba el uso de los servicios de telefonía, es decir, ver si desde la información de la SIM es posible sacar el número. Esto se puede hacer con un comando similar a:
TelephonyManager tMgr       = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String mPhoneNumber = tMgr.getLine1Number(); 
Pero no es el único truco. Por supuesto, pasa sacar las cuentas de servicios de Internet se puede hacer uso del permiso GET_ACCOUNTS  y buscar aquellas que están registradas. En aquellos tiempos, acceder a tu cuenta de Telegram o ChatON, basadas en números de teléfono y llevarte el número, era bastante trivial.

Figura 19: Accediendo con el permiso GET_ACCOUNTS

Con este permiso se puede acceder a todas las cuentas que estuvieran dadas de alta en el sistema operativo Android, ya sean Twitter, Facebook o Google, algo que ya no es posible en las últimas versiones.

Uno de los motivos por los que saltó la voz de alarma fue porque - y esto es posible aún en versiones antiguas - si la app solicitaba el permiso de RECEIVE_SMS, entonces no solo podía saber qué número de teléfono tenía, si no que podía pasar a un criminal el número para que este solicitara el inicio de sesión en WhatsApp o Telegram, y cuando el Token para el 2FA llegara vía SMS al teléfono, la app maliciosa pudiera leerlo y robar la cuenta.

Figura 20: Casi 35.000 apps (que serían cientos de miles de instalaciones)
tenían los permisos necesarios para robar Telegram o WhatsApp

Cuando revisamos con Tacyt el número de apps que tenían esta posibilidad. Es decir, que podrían volverse maliciosas y desde una Gremlim Botnet para APTs dar la orden para que cualquiera de ellas robara la cuenta de Telegram o WhatsApp a gusto, vimos que el número era de apps en Google Play era de cerca de 35.000.

Figura 21: Proceso para robo de WhatsApp o Telegram sabiendo
número de teléfono y teniendo permiso Receive_SMS

Es verdad que esto ha mejorado desde la versión de Android 7.0, pero por desgracia, más del 60 % de los dispositivos Android aún cuentan con versiones anteriores a esa, lo que hacer que muchos sigan teniendo toda su seguridad dependiendo de esos permisos. Por eso es tan importante actualizar el sistema operativo, y por eso muchas apps - como WhatsApp - dejan de dar soporte a versiones antiguas de los sistemas operativos Android.

Figura 22: Cuota de diferentes versiones de sistemas operativos Android a día de hoy

Aún así, aunque el sistema operativo se encuentre en una versión 7.0 o superior, las apps que pudieran utilizarse para este tipo de Gremlin Botnets pueden hacer usar otro tipo de trucos, como poner un sistema de login de la app basado en OAuth usando la cuenta de uno de los servicios de Internet.

Figura 23: Típica autenticación en mundo móvil usando un IdP OAuth

No hay nada más fácil, sea la versión de Android que sea, que pedir un login basado en Facebook, Google o una dirección de e-mail. En este caso estaríamos utilizando autenticación basada en OAuth, y ya os contamos en el año 2016 todos los datos y permisos que se pueden obtener por medio de este protocolo. Os dejo el enlace al artículo de SAPPO, por si queréis repasarlo.

Saludos Malignos!

*********************************************************************************
- Gremlin Botnets: El club de los poetas muertos [Parte 1 de 6]
- Gremlin Botnets: El club de los poetas muertos [Parte 2 de 6]
- Gremlin Botnets: El club de los poetas muertos [Parte 3 de 6]
- Gremlin Botnets: El club de los poetas muertos [Parte 4 de 6]
- Gremlin Botnets: El club de los poetas muertos [Parte 5 de 6]
- Gremlin Botnets: El club de los poetas muertos [Parte 6 de 6]
*********************************************************************************

Autor: Chema Alonso (Contactar con Chema Alonso)


No hay comentarios:

Publicar un comentario