11 sept 2018

Explotación de sistemas Android con ADB y Shodan.io

Hola gente, ¿cómo están?. En primer lugar como siempre darle las gracias especialmente a los administradores de este gran blog, los señores “Juan Antonio Calles” y “Pablo Gonzalez” por darme un espacio en Flu-Project. Lo que les voy comentar es un bug/feature que permite tener una Shell local en más de 35.000 Androids, algunos de ellos root, que se conectan con ADB (Android Debug Bridge).


A continuación os copiamos algunos detalles sobre ADB extraídos de la fuente oficial, por si no estáis familiarizados con esta herramienta:

Android Debug Bridge (ADB) es una herramienta de línea de comandos versátil que permite comunicarse con una instancia de un emulador o un dispositivo Android conectado. Esta herramienta proporciona diferentes acciones en los dispositivos, como la instalación y la depuración de aplicaciones, y proporciona acceso raíz de Unix que se puede utilizar para ejecutar varios comandos en un emulador o un dispositivo conectado. Es un programa cliente-servidor que incluye tres componentes:

  1. Un cliente: que envía comandos. El cliente se ejecuta en el equipo de desarrollo. Puede invocar un cliente desde un terminal de línea de comandos mediante la emisión de un comando ADB.
  2. Un daemon: que ejecuta comandos en un dispositivo. El daemon se ejecuta como un proceso de fondo en cada instancia del emulador o dispositivo.
  3. Un servidor: que gestiona la comunicación entre el cliente y el daemon. El servidor se ejecuta como un proceso en segundo plano en el equipo de desarrollo.
Se puede encontrar la herramienta adb en el siguiente link: https://adb.clockworkmod.com/

¿Cómo funciona ADB?

Cuando se inicia un cliente de ADB, el primer cliente comprueba si hay un ADB corriendo un proceso del servidor. Si no es así, inicia el proceso de servidor. Cuando se inicia el servidor, se une al puerto local TCP 5037 y busca los comandos enviados por los clientes ADB; todos los clientes ADB utilizan el puerto 5037 para comunicarse con el servidor de ADB.


A continuación, el servidor establece conexiones con todas las instancias de emuladores o dispositivos en funcionamiento. Localiza las instancias de emuladores o dispositivos mediante el escaneo de los puertos con números impares en el rango del 5555 al 5585. Cuando el servidor encuentra un demonio ADB, se establece una conexión con ese puerto. 

Cada instancia del emulador o dispositivo adquiere un par de puertos secuenciales; un puerto con número par para las conexiones de la consola y otro con número impar para las conexiones ADB. Por ejemplo:
  • Emulador 1, consola: 5554
  • Emulador 1, adb: 5555
  • Emulador 2, la consola: 5556
  • Emulador 2, ADB: 5557
y así...

Como se muestra, la instancia del emulador conectado a ADB en el puerto 5555 es la misma que la instancia cuya consola es responsable de recibir en el puerto 5554.

Una vez que el servidor establece conexiones con todas las instancias del emulador, puede utilizar los comandos ADB para acceder a esos casos. Dado que el servidor gestiona las conexiones a las instancias del emulador o dispositivo y maneja los comandos de diferentes clientes ADB, puede controlar cualquier instancia del emulador o dispositivo desde cualquier cliente (o desde un script).

Los sistemas android tienen el puerto 5555 abierto y se puede conectar a ellos con un PC mediante el comando:
  • adb connect ip: 5555
O con esta aplicación de ejemplo:
Adb shell es una aplicación de terminal que permite conectarse al servicio de ADB mediante otros dispositivos Android a través de la red y ejecutar comandos de terminal. Esto puede ser útil para depurar de forma remota los dispositivos Android.

Esta aplicación es un wrapper de ADB. Mantiene un historial de 15 comandos a los que se puede acceder mediante una presión prolongada del botón principal. Una presión larga en la pantalla del terminal en sí dará la opción de enviar un Ctrl + C, alternar el desplazamiento automático, o salir de la sesión de terminal.



Esto funciona de la misma manera que el comando "adb shell" trabaja en un ordenador, debido a que esta aplicación utiliza una implementación nativa del protocolo de ADB en Java, que no requiere root. Los dispositivos simplemente hablan el mismo protocolo entre sí, al igual que lo harían con un equipo que ejecuta el cliente ADB desde el SDK de Android.

Para conectarse a un dispositivo Android remoto, tan solo es necesario introducir la dirección IP del dispositivo y el número de puerto (5555).

Si ahora buscamos en shodan.io dispositivos Android con dicho puerto expuesto, nos encontraremos con un gran número de terminales expuestos:


Presentado el problema, un potencial atacante podría seleccionar facilmente una víctima y utilizando la herramienta que cité anteriormente podría acceder remotamente via shell a uno de dichos terminales:

Con escribir la dirección ip y el valor por defecto del puerto 5555, tendremos una Shell en el Android remoto }:)





Como se puede ver en estas imágenes, se trata de pruebas controladas xD:

Espero que les haya interesado y sed buenos…

Saludos a.k.a Rootkit pentester.

No hay comentarios:

Publicar un comentario